Utiliser la recherche par similarité - Comment ne pas perdre le contenu Meetup sur Internet
Avez-vous déjà ressenti la frustration de vous souvenir d’une idée brillante partagée lors d’un Meetup, pour finalement la retrouver perdue dans le dédale des événements passés ? En tant qu’organisateur et participant, j’ai ressenti la douleur de voir du contenu précieux passer entre les mailles du filet une fois l’événement terminé. Trop souvent, des insights partagés dans un coin du globe restent cloisonnés, inaccessibles à ceux qui pourraient en bénéficier ailleurs.
Pour résoudre ce problème, je me suis tourné vers des techniques de recherche par similarité afin de passer au crible le vaste ensemble de données non structurées. Les données non structurées représentent 80 % des données mondiales et peuvent être converties en vecteurs à l’aide de différents modèles de Machine Learning. L’outil que j’ai choisi pour cette tâche était Milvus, une base de données vectorielle open-source populaire qui excelle dans la gestion et la recherche au sein de paysages de données complexes. Milvus permet de découvrir des connexions et des similarités sous-jacentes.
Pour calculer les Embeddings, j’utilise SentenceTransformers. Il s’agit d’un framework Python pour des embeddings de phrases, de textes et d’images à l’état de l’art. Vous pouvez l’utiliser pour calculer des embeddings de phrases/textes dans plus de 100 langues. Ces embeddings peuvent ensuite être comparés, par exemple avec la similarité cosinus, afin de trouver des phrases ayant une signification similaire.
Téléchargement des données
Meetup.com ne dispose pas d’une API publique gratuite. Vous aurez besoin d’un compte Pro pour y accéder, et vous pouvez le vérifier vous-même ici.
Comme l’API n’est pas publique, j’ai généré certaines données à partir d’un groupe Meetup que j’anime. Vous pouvez trouver les données simples sur GitHub et les charger avec Pandas.
import pandas as pd
df = pd.read_csv(‘data/data_meetup.csv’)
La stack technique : Milvus et SentenceTransformers
Nous utiliserons Milvus comme base de données vectorielle, SentenceTransformers pour générer des embeddings de texte et OpenAI GPT 3.5-turbo pour résumer l’essence de Meetup. Il y a généralement beaucoup de bruit dans la description des événements, donc les résumer peut aider à cet égard.
Milvus Lite
Milvus propose différentes options de déploiement pour répondre à différents besoins. Pour une configuration légère et simple, Milvus Lite est idéal. Il peut être facilement installé via PyPi pip install Milvus et exécuté directement dans un notebook Jupyter, offrant un moyen sans tracas d’intégrer des capacités de base de données vectorielle à notre projet.
Milvus avec Docker/ Docker Compose
Pour des besoins plus robustes, Milvus peut être déployé à l’aide de Docker Compose, car il s’agit d’un système distribué.
Le fichier docker compose est disponible sur la page d’installation de Milvus Standalone et le GitHub de Milvus. Lorsque vous lancez Milvus avec Docker Compose, vous verrez trois conteneurs et vous vous connecterez à Milvus via le port 19530 par défaut.
SentenceTransformers
SentenceTransfomers est utilisé pour créer nos Embeddings, il est disponible sur PyPi avec pip install sentence-transformers. Nous utiliserons le modèle all-MiniLM-L6-v2 car il est 5 fois plus petit que 5 fois plus rapide et offre tout de même une bonne qualité par rapport au meilleur modèle qu’ils proposent.
Exécuter des requêtes de recherche par similarité
Démarrer Milvus
Pour effectuer une recherche par similarité, nous devons disposer d’une base de données vectorielle. Pour la démarrer, il suffit d’importer le default_server et d’appeler la fonction start().
from milvus import default_server
default_server.start()
Charger les données dans Milvus
Avant de pouvoir ajouter des données à Milvus, nous devons créer une Collection et préparer un Schema. Tout d’abord, préparez les paramètres nécessaires, notamment le schéma des champs, le schéma de la collection et le nom de la 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)
Maintenant que la Collection et le schéma sont créés, nous pouvons créer un index pour le champ embedding et charger les données en mémoire avec la fonction load().
collection.create_index(field_name="embedding")
collection.load()
Créer des embeddings avec SentenceTransformer
Comme indiqué précédemment, nous utiliserons SentenceTransformer et le modèle 'all-MiniLM-L6-v2' pour créer nos embeddings. Importons ce qui est nécessaire pour cela.
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)
Résumer le contenu des Meetups
Les descriptions des Meetups, bien qu’informatives, peuvent aussi être assez bruyantes ; elles contiennent généralement des informations sur le programme, sur les sponsors de l’événement et différentes règles concernant le lieu/l’événement, etc. Bien que ces éléments soient très importants lorsque vous assistez à un Meetup, ils n’ont pas d’importance pour notre cas d’utilisation. J’utilise OpenAI GPT-3.5-turbo pour résumer le contenu.
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
Retourner du contenu similaire
Pour que notre Similarity Search fonctionne, nous devons nous assurer que notre base de données vectorielle peut comprendre nos termes de recherche ; créons des embeddings de nos termes de recherche.
search_terms = "The speaker speaks about Open Source and ML Platform"
search_data = [transformer.encode(search_terms)] # Must be a list.
Rechercher du contenu similaire dans la Collection 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')
Résultats
Milvus a retourné trois meetups sur l’Open-Source et les ML Platform, organisés par MLOps.community et Neptune.ai.
Voici les détails :
Search terms: The speaker speaks about Open Source and ML Platform
Results:
Premier Meetup MLOps.community Berlin ---- 0.5537542700767517
Le meetup MLOps.community à Berlin le 30 juin proposera une conférence principale de Stephen Batifol de Wolt sur la mise à l’échelle du Machine Learning open source. L’événement comprendra également des lightning talks, du networking, ainsi que de la nourriture et des boissons. Le programme prévoit l’ouverture des portes à 18 h 00, la conférence de Stephen à 19 h 00, les lightning talks à 19 h 50 et les échanges informels à 20 h 15. Les participants peuvent s’inscrire aux lightning talks sur Meetup.com. L’événement est organisé en collaboration avec <a href="https://neptune.ai/>neptune.ai</a>
MLOps.community Berlin 04 : Pré-événement Women+ In Data and AI Festival ---- 0.4623506963253021
MLOps.community Berlin organise une édition spéciale les 29 et 30 juin chez Thoughtworks. L’événement sert d’échauffement pour le festival Women+ In Data and AI. Le meetup accueillera les intervenantes Fiona Coath, qui parlera du capitalisme de surveillance, et Magdalena Stenius, qui abordera l’empreinte carbone du machine learning. Le programme comprend des conférences, des lightning talks et des opportunités de networking. Les participants sont encouragés à consulter et à respecter le Code de conduite de l’événement afin de garantir un environnement inclusif et respectueux.
MLOps.community Berlin Meetup 02 ---- 0.41342616081237793
Le meetup MLOps.community à Berlin le 6 octobre proposera une conférence principale de Lina Weichbrodt sur le monitoring ML, des lightning talks et des opportunités de networking. L’événement se tiendra dans les bureaux de Wolt avec une capacité limitée à 150 personnes. Lina possède une vaste expérience dans le développement de modèles de machine learning évolutifs et a travaillé dans des entreprises comme Zalando et DKB. Le programme comprend de la nourriture, une activité de cohésion, la conférence principale, des lightning talks et des échanges informels. Les participants peuvent également s’inscrire pour présenter des lightning talks sur divers sujets liés au MLOps. L’événement est organisé en collaboration avec neptune.ai.
N’hésitez pas à consulter le code sur Github.
Continuer à lire

Vector Lakebase: End the AI Data Silo
Learn how Vector Lakebase unifies vector search, data lakes, and AI data operations so teams can serve RAG and agents without copy-and-sync pipelines.

We spent 8 years making vector databases faster. Then we stopped.
Rarely queried embeddings still need to stay searchable. See how Vector Lakebase enables on-demand vector search without always-on compute costs.

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.



