Ähnlichkeitssuche nutzen - Wie man Meetup-Inhalte im Internet nicht verliert
Haben Sie schon einmal die Frustration erlebt, sich an eine brillante Idee zu erinnern, die auf einem Meetup geteilt wurde, nur um festzustellen, dass sie im Labyrinth vergangener Veranstaltungen verloren gegangen ist? Als Organisator und Teilnehmer habe ich den Schmerz gespürt, wenn wertvolle Inhalte nach dem Ende der Veranstaltung durch die Lücken rutschen. Allzu oft bleiben Erkenntnisse, die in einer Ecke der Welt geteilt werden, isoliert und für diejenigen unzugänglich, die anderswo davon profitieren könnten.
Um dieses Problem anzugehen, wandte ich mich Techniken der Ähnlichkeitssuche zu, um das umfangreiche Spektrum an unstrukturierten Daten zu durchsuchen. Unstrukturierte Daten machen 80 % der weltweiten Daten aus und können mithilfe verschiedener Machine-Learning-Modelle in Vektoren umgewandelt werden. Mein bevorzugtes Tool für diese Aufgabe war Milvus, eine beliebte Open-Source-Vektordatenbank, die sich durch die Verwaltung und Suche in komplexen Datenlandschaften auszeichnet. Milvus ermöglicht es, zugrunde liegende Verbindungen und Ähnlichkeiten zu entdecken.
Zur Berechnung von Embeddings verwende ich SentenceTransformers. Es ist ein Python-Framework für modernste Satz-, Text- und Bild-Embeddings. Sie können es verwenden, um Satz-/Text-Embeddings für mehr als 100 Sprachen zu berechnen. Diese Embeddings können dann verglichen werden, z. B. mit Kosinus-Ähnlichkeit, um Sätze mit ähnlicher Bedeutung zu finden.
Herunterladen der Daten
Meetup.com verfügt nicht über eine kostenlose öffentliche API. Sie benötigen ein Pro-Konto, um darauf zuzugreifen, und Sie können es selbst hier überprüfen.
Da die API nicht öffentlich ist, habe ich einige Daten aus einer Meetup-Gruppe generiert, die ich betreibe. Sie finden die einfachen Daten auf GitHub und können sie mit Pandas laden.
import pandas as pd
df = pd.read_csv(‘data/data_meetup.csv’)
Der Tech-Stack: Milvus und SentenceTransformers
Wir werden Milvus als Vektordatenbank, SentenceTransformers zur Generierung von Text-Embeddings und OpenAI GPT 3.5-turbo verwenden, um die Essenz von Meetup zusammenzufassen. In der Veranstaltungsbeschreibung gibt es normalerweise viel Rauschen, daher kann deren Zusammenfassung dabei helfen.
Milvus Lite
Milvus bietet verschiedene Bereitstellungsoptionen für unterschiedliche Anforderungen. Für ein leichtgewichtiges und unkompliziertes Setup ist Milvus Lite ideal. Es kann einfach über PyPi pip install Milvus installiert und direkt in einem Jupyter Notebook ausgeführt werden, wodurch eine reibungslose Möglichkeit geschaffen wird, Vektordatenbankfunktionen in unser Projekt zu integrieren.
Milvus mit Docker/ Docker Compose
Für robustere Anforderungen kann Milvus mit Docker Compose bereitgestellt werden, da es ein verteiltes System ist.
Die Docker-Compose-Datei ist auf der Seite Install Milvus Standalone und auf Milvus GitHub verfügbar. Wenn Sie Milvus mit Docker Compose starten, sehen Sie drei Container und verbinden sich standardmäßig über Port 19530 mit Milvus.
SentenceTransformers
SentenceTransfomers wird verwendet, um unsere Embeddings zu erstellen; es ist auf PyPi mit pip install sentence-transformers verfügbar. Wir werden das Modell all-MiniLM-L6-v2 verwenden, da es 5-mal kleiner und 5-mal schneller ist und im Vergleich zum besten von ihnen angebotenen Modell dennoch eine gute Qualität bietet.
Ähnlichkeitssuchabfragen ausführen
Milvus starten
Um eine Ähnlichkeitssuche durchzuführen, benötigen wir eine Vektordatenbank. Um sie zu starten, importieren Sie einfach den default_server und rufen Sie die Funktion start() auf.
from milvus import default_server
default_server.start()
Die Daten in Milvus einfügen
Bevor wir Daten zu Milvus hinzufügen können, müssen wir eine Collection erstellen und ein Schema vorbereiten. Bereiten Sie zunächst die notwendigen Parameter vor, einschließlich des Feldschemas, des Collection-Schemas und des Collection-Namens.
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)
Nachdem die Collection und das Schema nun erstellt wurden, können wir einen Index für das Feld embedding erstellen und die Daten mit der Funktion load() in den Speicher laden.
collection.create_index(field_name="embedding")
collection.load()
Embeddings mit SentenceTransformer erstellen
Wie zuvor erwähnt, verwenden wir SentenceTransformer und das Modell 'all-MiniLM-L6-v2', um unsere Embeddings zu erstellen. Importieren wir, was dafür benötigt wird.
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)
Den Inhalt von Meetups zusammenfassen
Beschreibungen von Meetups können zwar informativ sein, aber auch ziemlich viel Rauschen enthalten; sie enthalten normalerweise Zeitplaninformationen, Angaben dazu, wer die Veranstaltung sponsert, und verschiedene Regeln zum Veranstaltungsort/zur Veranstaltung usw. Während diese sehr wichtig sind, wenn Sie an einem Meetup teilnehmen, spielen sie für unseren Anwendungsfall keine Rolle. Ich verwende OpenAI GPT-3.5-turbo, um den Inhalt zusammenzufassen.
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
Ähnliche Inhalte zurückgeben
Damit unsere Similarity Search funktioniert, müssen wir sicherstellen, dass unsere Vektordatenbank unsere Suchbegriffe verstehen kann. Erstellen wir also Embeddings unserer Suchbegriffe.
search_terms = "The speaker speaks about Open Source and ML Platform"
search_data = [transformer.encode(search_terms)] # Must be a list.
Die Milvus Collection nach ähnlichen Inhalten durchsuchen
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')
Ergebnisse
Milvus gab drei Meetups über Open Source und ML Platform zurück, die von MLOps.community und Neptune.ai veranstaltet wurden.
Nachfolgend finden Sie die Details:
Search terms: The speaker speaks about Open Source and ML Platform
Results:
Erstes MLOps.community Berlin Meetup ---- 0.5537542700767517
Das MLOps.community Meetup in Berlin am 30. Juni wird einen Hauptvortrag von Stephen Batifol von Wolt über die Skalierung von Open-Source Machine Learning bieten. Die Veranstaltung umfasst außerdem Lightning Talks, Networking sowie Essen und Getränke. Die Agenda beinhaltet Einlass um 18:00 Uhr, Stephens Vortrag um 19:00 Uhr, Lightning Talks um 19:50 Uhr und geselliges Beisammensein um 20:15 Uhr. Teilnehmende können sich auf Meetup.com für Lightning Talks anmelden. Die Veranstaltung findet in Zusammenarbeit mit <a href="https://neptune.ai/>neptune.ai</a> statt
MLOps.community Berlin 04: Pre-event Women+ In Data and AI Festival ---- 0.4623506963253021
MLOps.community Berlin veranstaltet am 29. und 30. Juni bei Thoughtworks eine Sonderausgabe. Die Veranstaltung ist ein Warm-up für das Women+ In Data and AI Festival. Das Meetup wird Vorträge von Fiona Coath über Überwachungskapitalismus und Magdalena Stenius über den CO2-Fußabdruck von Machine Learning bieten. Die Agenda umfasst Vorträge, Lightning Talks und Networking-Möglichkeiten. Teilnehmende werden ermutigt, den Code of Conduct der Veranstaltung zu lesen und einzuhalten, um eine inklusive und respektvolle Umgebung zu gewährleisten.
MLOps.community Berlin Meetup 02 ---- 0.41342616081237793
Das MLOps.community Meetup in Berlin am 6. Oktober wird einen Hauptvortrag von Lina Weichbrodt über ML Monitoring, Lightning Talks und Networking-Möglichkeiten bieten. Die Veranstaltung findet im Büro von Wolt mit einer Kapazitätsgrenze von 150 Personen statt. Lina verfügt über umfangreiche Erfahrung in der Entwicklung skalierbarer Machine-Learning-Modelle und hat bei Unternehmen wie Zalando und DKB gearbeitet. Die Agenda umfasst Essen, eine Bonding-Aktivität, den Hauptvortrag, Lightning Talks und geselliges Beisammensein. Teilnehmende können sich außerdem anmelden, um Lightning Talks zu verschiedenen MLOps-bezogenen Themen zu halten. Die Veranstaltung findet in Zusammenarbeit mit neptune.ai statt.
Schau dir gerne den Code auf Github an.
Weiterlesen

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.

Zilliz Cloud Now Available in AWS Asia Pacific (Seoul)
Zilliz Cloud is now available in AWS Seoul — low-latency vector search, in-country data residency, and one-step migration for Korean AI teams. 31 regions across 5 clouds.

VidTok: Rethinking Video Processing with Compact Tokenization
VidTok tokenizes videos to reduce redundancy while preserving spatial and temporal details for efficient processing.



