Usando a busca por similaridade — Como não perder conteúdo de Meetup na Internet
Você já experimentou a frustração de se lembrar de uma ideia brilhante compartilhada em um Meetup, apenas para descobrir que ela se perdeu no labirinto de eventos passados? Como organizador e participante, já senti o impacto de conteúdos valiosos escapando pelas frestas assim que o evento termina. Com muita frequência, insights compartilhados em um canto do mundo permanecem isolados, inacessíveis para aqueles que poderiam se beneficiar em outros lugares.
Para enfrentar esse problema, recorri a técnicas de busca por similaridade para examinar a extensa variedade de dados não estruturados. Dados não estruturados representam 80% dos dados do mundo e podem ser convertidos em vetores usando diferentes Modelos de Machine Learning. Minha ferramenta escolhida para essa tarefa foi o Milvus, um banco de dados vetorial open-source popular que se destaca no gerenciamento e na busca em cenários de dados complexos. O Milvus torna possível descobrir conexões e similaridades subjacentes.
Para calcular Embeddings, estou usando SentenceTransformers. É um framework Python para embeddings de sentenças, textos e imagens de última geração. Você pode usá-lo para calcular embeddings de sentenças/textos para mais de 100 idiomas. Esses embeddings podem então ser comparados, por exemplo, com similaridade de cosseno, para encontrar sentenças com significado semelhante.
Baixando os Dados
Meetup.com não tem uma API pública gratuita. Você precisará de uma conta Pro para acessá-la, e pode conferir por conta própria aqui.
Como a API não é pública, gerei alguns dados de um grupo do Meetup que eu administro. Você pode encontrar os dados simples no GitHub e carregá-los com Pandas.
import pandas as pd
df = pd.read_csv(‘data/data_meetup.csv’)
A Stack Tecnológica: Milvus e SentenceTransformers
Usaremos Milvus como o Banco de Dados Vetorial, SentenceTransformers para gerar embeddings de texto e OpenAI GPT 3.5-turbo para resumir a essência do Meetup. Geralmente há muito ruído na descrição do evento, então resumi-las pode ajudar nisso.
Milvus Lite
O Milvus oferece diferentes opções de implantação para atender a diferentes necessidades. Para uma configuração leve e direta, o Milvus Lite é ideal. Ele pode ser facilmente instalado via PyPi pip install Milvus e executado diretamente dentro de um notebook Jupyter, oferecendo uma maneira sem complicações de incorporar capacidades de banco de dados vetorial ao nosso projeto.
Milvus com Docker/ Docker Compose
Para necessidades mais robustas, o Milvus pode ser implantado usando Docker Compose, pois é um sistema distribuído.
O arquivo docker compose está disponível na página Install Milvus Standalone e no GitHub do Milvus. Quando você inicia o Milvus com Docker Compose, verá três contêineres e se conectará ao Milvus pela porta 19530 por padrão.
SentenceTransformers
SentenceTransfomers é usado para criar nossos Embeddings, está disponível no PyPi com pip install sentence-transformers. Usaremos o modelo all-MiniLM-L6-v2, pois ele é 5 vezes menor e 5 vezes mais rápido, e ainda oferece boa qualidade em comparação com o melhor modelo que eles oferecem.
Executar Consultas de Busca por Similaridade
Iniciar o Milvus
Para executar uma busca por similaridade, precisamos ter um Banco de Dados Vetorial. Para iniciá-lo, basta importar o default_server e chamar a função start().
from milvus import default_server
default_server.start()
Popular os Dados no Milvus
Antes de poder adicionar dados ao Milvus, precisamos criar uma Collection e preparar um Schema. Primeiro, prepare os parâmetros necessários, incluindo o esquema de campos, o esquema da collection e o nome da collection.
from pymilvus import FieldSchema, CollectionSchema, DataType, Collection
# We insert the object in the format of title, date, content, content embedding
fields = [
FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),
FieldSchema(name="title", dtype=DataType.VARCHAR, max_length=500),
FieldSchema(name="date", dtype=DataType.VARCHAR, max_length=100),
FieldSchema(name="content", dtype=DataType.VARCHAR, max_length=10000),
FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=384)
]
schema = CollectionSchema(fields=fields)
collection = Collection(name=”mlops_meetups”, schema=schema)
Agora que a Collection e o schema foram criados, podemos criar um índice para o campo embedding e carregar os dados na memória com a função load().
collection.create_index(field_name="embedding")
collection.load()
Criar Embeddings com SentenceTransformer
Como dito anteriormente, usaremos SentenceTransformer e o modelo 'all-MiniLM-L6-v2' para criar nossos embeddings. Vamos importar o que é necessário para isso.
from sentence_transformers import SentenceTransformer
transformer = SentenceTransformer('all-MiniLM-L6-v2')
content_detail = df[‘content’]
content_detail = content_detail.tolist()
embeddings = [transformer.encode(c) for c in content_detail]
# Create an embedding column in our Dataframe
df['embedding'] = embeddings
# Insert the data in the collection
collection.insert(data=df)
Resumir o Conteúdo dos Meetups
As descrições dos Meetups, embora informativas, também podem ser bastante ruidosas; geralmente contêm informações de programação, quem está patrocinando o evento e diferentes regras sobre o local/evento, etc. Embora isso seja muito importante quando você participa de um Meetup, não importa para o nosso caso de uso. Eu uso o OpenAI GPT-3.5-turbo para resumir o conteúdo.
def summarise_meetup_content(content: str) -> str:
response = openai.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{
"role": "system",
"content": "Summarize content you are provided with."
},
{
"role": "user",
"content": f"{content}"
}
],
temperature=0,
max_tokens=1024,
top_p=1,
frequency_penalty=0,
presence_penalty=0
)
summary = response.choices[0].message.content
return summary
Retornar Conteúdo Semelhante
Para que nossa Busca por Similaridade funcione, precisamos garantir que nosso Banco de Dados Vetorial consiga entender nossos termos de busca; vamos criar embeddings dos nossos termos de busca.
search_terms = "The speaker speaks about Open Source and ML Platform"
search_data = [transformer.encode(search_terms)] # Must be a list.
Pesquisar Conteúdo Semelhante na Collection do Milvus
res = collection.search(
data=search_data, # Embedded search value
anns_field="embedding", # Search across embeddings
param={"metric_type": "IP"},
limit = 3, # Limit to top_k results per search
output_fields=["title", "content"] # Include title field in result
)
for hits_i, hits in enumerate(res):
print("Search Terms:", search_terms)
print("Results:")
for hit in hits:
content_test = hit.entity.get("content")
print(hit.entity.get("title"), "----", hit.distance)
print(f'{summarise_meetup_content(hit.entity.get("content"))} \n')
Resultados
O Milvus retornou três meetups sobre Open-Source e ML Platform hospedados por MLOps.community e Neptune.ai.
Abaixo estão os detalhes:
Search terms: The speaker speaks about Open Source and ML Platform
Results:
Primeiro Meetup da MLOps.community Berlin ---- 0.5537542700767517
O meetup da MLOps.community em Berlim em 30 de junho contará com uma palestra principal de Stephen Batifol, da Wolt, sobre Escalabilidade de Machine Learning Open-Source. O evento também incluirá lightning talks, networking e comidas e bebidas. A agenda inclui abertura das portas às 18h, a palestra de Stephen às 19h, lightning talks às 19h50 e socialização às 20h15. Os participantes podem se inscrever para lightning talks no Meetup.com. O evento é em colaboração com <a href="https://neptune.ai/>neptune.ai</a>
MLOps.community Berlin 04: Pré-evento Women+ In Data and AI Festival ---- 0.4623506963253021
A MLOps.community Berlin está organizando uma edição especial do evento nos dias 29 e 30 de junho na Thoughtworks. O evento é um aquecimento para o festival Women+ In Data and AI. O meetup contará com as palestrantes Fiona Coath discutindo capitalismo de vigilância e Magdalena Stenius falando sobre a pegada de carbono do machine learning. A agenda inclui palestras, lightning talks e oportunidades de networking. Os participantes são incentivados a revisar e cumprir o Código de Conduta do evento para um ambiente inclusivo e respeitoso.
MLOps.community Berlin Meetup 02 ---- 0.41342616081237793
O meetup da MLOps.community em Berlim em 6 de outubro contará com uma palestra principal de Lina Weichbrodt sobre Monitoramento de ML, lightning talks e oportunidades de networking. O evento será realizado no escritório da Wolt, com limite de capacidade de 150 pessoas. Lina tem ampla experiência no desenvolvimento de modelos escaláveis de machine learning e trabalhou em empresas como Zalando e DKB. A agenda inclui comida, uma atividade de integração, a palestra principal, lightning talks e socialização. Os participantes também podem se inscrever para apresentar lightning talks sobre vários tópicos relacionados a MLOps. O evento é em colaboração com neptune.ai.
Sinta-se à vontade para conferir o código no Github.
Continue lendo

Top 10 Context Engineering Techniques You Should Know for Production RAG
A practical guide to context engineering for production LLM systems, covering RAG, context processing, memory, agents, and multimodal context.

Why and How to Migrate from Self-Hosted Milvus to Zilliz Cloud
A simple, step-by-step guide to migrating from Milvus to Zilliz Cloud. Learn both endpoint and backup methods for a smooth, scalable vector database migration.

Optimizing Embedding Model Selection with TDA Clustering: A Strategic Guide for Vector Databases
Discover how Topological Data Analysis (TDA) reveals hidden embedding model weaknesses and helps optimize vector database performance.



