28,74 Millionen Hacker-News-Beiträge und -Kommentare als Vektor-Embedding-Suchdatensatz
(clickhouse.com)- Das Hacker News-Dataset enthält 28,74 Millionen Beiträge und Kommentare, wobei jeder Text aus einem 384-dimensionalen Vektorembedding besteht, das mit dem SentenceTransformers all-MiniLM-L6-v2-Modell generiert wurde
- Der Datensatz wird als einzelne Parquet-Datei (S3-Bucket) von ClickHouse bereitgestellt und kann für den Entwurf sowie die Leistungsbewertung großer Vektorsuchanwendungen auf breiter Datenbasis genutzt werden
- Am SQL-Beispiel wird schrittweise gezeigt, wie eine Tabelle erstellt, Daten geladen, ein HNSW-basierter Vektor-Ähnlichkeitsindex aufgebaut und eine Suchabfrage ausgeführt wird
- Das Python-Beispiel erzeugt mit SentenceTransformers ein Anfrage-Embedding und nutzt in ClickHouse die Funktion cosineDistance() für die semantische Suche
- Die anschließende Zusammenfassungs-Demo-Anwendung nutzt LangChain und OpenAI GPT-3.5-turbo, um gefundene Beiträge zusammenzufassen, und zeigt die Erweiterbarkeit als unternehmensbezogenes KI-Use-Case für Generative AI auf
Überblick über den Hacker News-Vektorsuchdatensatz
- Der Datensatz umfasst 28,74 Millionen Beiträge und Kommentare von Hacker News, wobei jeder Eintrag ein mit dem Modell SentenceTransformers all-MiniLM-L6-v2 erzeugtes 384-dimensionales Vektorembedding enthält
- Das Embedding nutzt ein lokales Embedding-Modell, das die Bedeutung von Sätzen und Absätzen erfassen soll
- Dieser Datensatz kann für die Entwicklung, Dimensionierung und Leistungsanalyse großer Vektorsuchanwendungen auf Grundlage nutzergenerierter Texte genutzt werden
Datenbereich
- Der vollständige Datensatz liegt als einzelne Parquet-Datei von ClickHouse vor und kann aus dem S3-Bucket (
https://clickhouse-datasets.s3.amazonaws.com/hackernews-miniLM/…) heruntergeladen werden - Es wird empfohlen, für die Schätzung von Speicherbedarf und RAM-Verbrauch den ANN-Index-Leitfaden der ClickHouse-Dokumentation zu lesen
Daten laden und Index aufbauen
- Die Tabelle
hackernewswird erstellt, um mehrere Attribute wie Beitrag-ID, Text, Vector, Autor, Zeitstempel und Punktzahl aufzunehmen - Das Laden der Daten erfolgt mit folgendem SQL-Befehl
INSERT INTO hackernews SELECT * FROM s3('https://clickhouse-datasets.s3.amazonaws.com/hackernews-miniLM/…');- Für das Einfügen von etwa 28,74 Millionen Zeilen werden wenige Minuten benötigt
- Der Vektor-Ähnlichkeitsindex wird mit dem HNSW-Algorithmus und cosineDistance aufgebaut
ALTER TABLE hackernews ADD INDEX vector_index vector TYPE vector_similarity('hnsw', 'cosineDistance', 384, 'bf16', 64, 512); ALTER TABLE hackernews MATERIALIZE INDEX vector_index SETTINGS mutations_sync = 2;- Dabei sind
M=64undef_construction=512gesetzt, und der Indexaufbau kann je nach Anzahl der CPU-Kerne und der Storage-Bandbreite von Minuten bis zu Stunden dauern
- Dabei sind
- Nach dem Indexaufbau nutzt die Vektorsuche die Indizes automatisch
SELECT id, title, text FROM hackernews ORDER BY cosineDistance(vector, <search vector>) LIMIT 10- Das Laden des Index in den Speicher kann einige Sekunden bis Minuten dauern
Python-basierte semantische Suche
- Ein Python-Skript erzeugt mit SentenceTransformers ein Embedding der Eingabeabfrage und führt die Abfrage über ClickHouse Connect aus
- Mit der Funktion cosineDistance() wird die Ähnlichkeit zwischen dem Eingabe-Vector und den Vektoren im Datensatz berechnet
- In der Beispielausführung werden die Top-20-Ergebnisse für die Anfrage „Are OLAP cubes useful“ ausgegeben
- Die Ausgabe enthält die jeweiligen IDs und einen 100-Zeichen-Auszug des Textes jedes Beitrags
Zusammenfassungs-Demo-Anwendung
- Nach dem Beispiel für semantische Suche und Dokumentensuche mit ClickHouse folgt eine generative KI-basierte Zusammenfassungsanwendung
- Wichtige Schritte
- Eingabe eines Themas durch den Nutzer
- Erstellung des Themens-Embeddings mit
SentenceTransformers all-MiniLM-L6-v2 - Abfrage relevanter Beiträge/Kommentare über Vektorsuche in ClickHouse
- Zusammenfassung der Ergebnisse mit
LangChainund OpenAIgpt-3.5-turbo
- In der Ausführungssimulation wird nach dem Thema „ClickHouse performance experiences“ gesucht und GPT-3.5 erstellt die Zusammenfassung
- Die Zusammenfassung betont Leistung, Einfachheit, Effizienz und Eignung von ClickHouse für großskalige Analysen und geht auch auf einige Herausforderungen bei DML und Backups ein
- Diese Anwendung kann auf vielfältige Unternehmensfälle von Generativer KI ausgedehnt werden, etwa Kundensentiment-Analyse, Automatisierung des technischen Supports, Protokollzusammenfassungen und Finanzdokumenten-Analyse
Aufbau des Zusammenfassungscodes
- In dem Python-Code werden
SentenceTransformer,clickhouse_connect,LangChainundChatOpenAIverwendet - Die Suchergebnisse werden kombiniert und an das GPT-3.5-Modell übergeben, das eine Zusammenfassung mit maximal 10 Sätzen erzeugt
- Je nach Token-Anzahl von Eingabetexten wird entweder die Kette
stuffodermap_reduceausgewählt - Das Ergebnis wird im Format „Summary from chatgpt-3.5:“ ausgegeben
1 Kommentare
Hacker-News-Meinungen
Es wird empfohlen, im neuen Vektor-Embedding-Datensatz all-MiniLM-L6-v2 nicht zu verwenden
Dieses auf sentence-transformers basierende praktische Modell wurde in frühen Tutorials häufig genutzt, ist inzwischen aber veraltet und bildet aktuelle Architekturen und Trainings-Pipelines nicht mehr ab
Auch die Kontextlänge ist mit 512 kurz. Stattdessen wird EmbeddingGemma empfohlen. Es unterstützt ein 2k-Kontextfenster und zeigt sehr gute Benchmark-Leistung
Es ist langsamer, aber den Aufwand wert. Als Kompromiss sind auch bge-base-en-v1.5 oder nomic-embed-text-v1.5 in Ordnung
Open Weights, mehrsprachige Unterstützung und 32k Kontext
Mit rund 70 MB ist es klein und leicht herunterzuladen. EmbeddingGemma liegt bei über 300 MB und ist daher belastender
Es stellt sich die Frage, ob es brauchbare Modelle unter 100 MB gibt
Die „Gemma-Lizenz“ ist vage, sodass möglicherweise eine rechtliche Prüfung nötig ist
Wenn Google die Liste der „eingeschränkten Nutzungen“ ändert, besteht jederzeit das Risiko eines Nutzungsverbots
Es fehlen zum Beispiel Vergleiche wie Cohere vs OpenAI small vs OpenAI large
Es ist unklar, nach welchen Kriterien man benchmarken sollte
Es läuft auch auf CPUs gut
Seit 2023 werden alle HN-Kommentare in BigQuery eingebettet und unter hn.fiodorov.es gehostet
Der Quellcode ist auf GitHub veröffentlicht
Bei der Suche nach „Who’s Gary Marcus“ kamen negativere Ergebnisse als bei Google
Interessant wäre, wie hoch die Betriebskosten sind
Laut der Privacy and Data Policy von HN ist die kommerzielle Nutzung von Kommentaren verboten
Auch Vektorrepräsentationen wären technisch gesehen abgeleitete Werke
ist es verboten, Inhalte der Website kommerziell zu vervielfältigen, zu verbreiten, zu verändern oder abgeleitete Werke daraus zu erstellen
Auch Data Mining und Scraping sind untersagt
Ich halte es für mein Recht, eine Vektordatenbank als externes Hilfsmittel meines Gedächtnisses anzulegen
Ein Rechtsklick-Menü wie „Ähnliche Sätze anzeigen“ auf HN wäre wünschenswert
So ließe sich vielleicht auch erkennen, ob derselbe Vorschlag schon früher gemacht wurde
Man könnte sehen, wie oft dieselbe Diskussion in anderen Beiträgen wiederholt wird,
und auch vorab prüfen, wie frühere Reaktionen auf das ausfielen, was man selbst schreiben will
Das könnte eine Art semantic thread sein
Es stellt sich die Frage, ob es Studien gibt, die Vektorsuche vs. normale Textsuche vergleichen
Es ist fraglich, ob Vektorsuche den Aufwand wirklich wert ist
Es heißt, HN-Posts und Embedding-Metadaten zusammen seien 55 GB groß; bei Parquet-Dateien stellt sich die Frage, ob das plausibel ist
Wenn der einzige Zweck darin besteht, Kommentare zum Training kommerzieller Modelle zu verwenden, ist das etwas unerquicklich
Das könnte meine Bereitschaft zur künftigen Teilnahme beeinflussen
Früher hatte ich das Gefühl, fremden Menschen zu helfen; jetzt fühlt es sich eher so an, als würde ich Menschen helfen, die ich nicht mag
Vielleicht schwingen meine Worte irgendwo in einem riesigen Modell der Zukunft ganz leicht nach
Es wäre gut, wenn es eine Funktion zum Löschen von Accounts/Kommentaren gäbe
Sie sind faktisch zu dauerhaften Daten geworden, und eines Tages könnten meine Kommentare vielleicht wie antike Weisheit überliefert werden
Ein Punkt wurde von der To-do-Liste gestrichen (dank dieses Projekts)
Mal angenommen, ein Freund würde fragen … wenn man hier einen Kommentar schreibt, wird er dann in einen Vektor umgewandelt?