4 Punkte von GN⁺ 2025-11-29 | 1 Kommentare | Auf WhatsApp teilen
  • 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 hackernews wird 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=64 und ef_construction=512 gesetzt, und der Indexaufbau kann je nach Anzahl der CPU-Kerne und der Storage-Bandbreite von Minuten bis zu Stunden dauern
  • 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
    1. Eingabe eines Themas durch den Nutzer
    2. Erstellung des Themens-Embeddings mit SentenceTransformers all-MiniLM-L6-v2
    3. Abfrage relevanter Beiträge/Kommentare über Vektorsuche in ClickHouse
    4. Zusammenfassung der Ergebnisse mit LangChain und OpenAI gpt-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, LangChain und ChatOpenAI verwendet
  • 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 stuff oder map_reduce ausgewählt
  • Das Ergebnis wird im Format „Summary from chatgpt-3.5:“ ausgegeben

1 Kommentare

 
GN⁺ 2025-11-29
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

    • Derzeit wird Qwen3-Embedding-0.6B bevorzugt
      Open Weights, mehrsprachige Unterstützung und 32k Kontext
    • Trotzdem hat all-Mini den Vorteil, clientseitig ausführbar zu sein
      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
    • Schade ist die Lizenzproblematik bei EmbeddingGemma
      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
    • Ein Vergleich zwischen kommerziellen Embedding-Modellen wäre interessant
      Es fehlen zum Beispiel Vergleiche wie Cohere vs OpenAI small vs OpenAI large
      Es ist unklar, nach welchen Kriterien man benchmarken sollte
    • Vor einigen Wochen wurden EmbeddingGemma und nomic-embed-text-v1 per A/B-Test verglichen, wobei nomic deutlich bessere Ergebnisse geliefert hat
      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

    • Es wurde direkt ausprobiert, und die Antworten waren ziemlich gut
      Bei der Suche nach „Who’s Gary Marcus“ kamen negativere Ergebnisse als bei Google
      Interessant wäre, wie hoch die Betriebskosten sind
    • Die Architekturbeschreibung im GitHub-Repo war beeindruckend. Ein großartiges Projekt
    • Es wäre interessant zu wissen, mit welcher Hardware die Embeddings erzeugt wurden und wie lange das gedauert hat
    • Es stellt sich die Frage, ob es eine Issue-Funktion gibt, über die Nutzer die Löschung ihrer Daten anfordern können
  • Laut der Privacy and Data Policy von HN ist die kommerzielle Nutzung von Kommentaren verboten
    Auch Vektorrepräsentationen wären technisch gesehen abgeleitete Werke

    • Laut den Y-Combinator-Nutzungsbedingungen
      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
    • Natürlich sind Vektoren abgeleitete Werke, aber meine Erinnerung ist letztlich auch ein abgeleitetes Werk
      Ich halte es für mein Recht, eine Vektordatenbank als externes Hilfsmittel meines Gedächtnisses anzulegen
    • Nur als Witz: Ich war gerade dabei, die Löschung all meiner Kommentare zu verlangen. Jetzt muss ich das wohl nicht mehr
    • Dann sollte wohl auch jemand OpenAI Bescheid sagen
  • 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

    • Wenn man Kommentare und Threads semantisch verknüpft, wäre das wirklich spannend
      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
    • Mit dieser Funktion würde man vermutlich jede Menge Wörter wie „tangential, orthogonal, anecdata, enshittification, razor…“ sehen
    • Früher hat jemand einmal ein Tool zur Erkennung von Zweitaccounts auf HN gebaut, und es war beängstigend, wie fast perfekt es allein anhand des Schreibstils funktionierte
  • 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

    • Gewöhnliche Suche wird meist bm25 genannt. In den meisten Such-Papers dient bm25 als Baseline
    • Ein konkretes Paper ist nicht bekannt, aber der reachsumit.com-Account bei Bluesky behandelt häufig Materialien zu RAG und Information Retrieval
    • Wichtig ist, unter welchem Aspekt verglichen wird — etwa Serverlast oder Nutzererfahrung
  • Es heißt, HN-Posts und Embedding-Metadaten zusammen seien 55 GB groß; bei Parquet-Dateien stellt sich die Frage, ob das plausibel ist

    • Der Großteil dürfte aus Embedding-Daten bestehen. Eine andere DB, die alle HN-Posts und Kommentare enthält, kommt auf 17,68 GB unkomprimiert und etwa 5,67 GB komprimiert
    • Die Kompressionseffizienz ist erstaunlich gut. Mit Brotli lassen sich selbst mehrere Millionen Seiten auf 1–2 GB reduzieren
    • Nach der Tabelle scheint die Zahl plausibel zu sein. Auch ich würde gern meine Upvote-Daten einbetten, um meinen Geschmack zu analysieren
    • Im komprimierten Zustand ist das eine durchaus plausible Größe
  • 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

    • Seit dem Aufkommen der LLMs habe ich weniger Lust, nützliche Dinge ins Internet zu schreiben
      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
    • Ich finde eher den Gedanken interessant, dass meine schrägen Kommentare als Spuren im latenten Raum eines LLMs zurückbleiben
      Vielleicht schwingen meine Worte irgendwo in einem riesigen Modell der Zukunft ganz leicht nach
    • Die Stimmung ist zu ernst. Man möchte sagen: einfach Spaß daran haben
  • Es wäre gut, wenn es eine Funktion zum Löschen von Accounts/Kommentaren gäbe

    • Unsere Worte wurden bereits auf zahllose Geräte weltweit kopiert
      Sie sind faktisch zu dauerhaften Daten geworden, und eines Tages könnten meine Kommentare vielleicht wie antike Weisheit überliefert werden
    • HN-Datensätze wurden bereits an vielen Orten vervielfältigt, daher sollte man Beiträge hier als öffentliche Inhalte betrachten
  • 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?