33 Punkte von GN⁺ 2025-01-16 | 2 Kommentare | Auf WhatsApp teilen
  • Data Scientists verwandeln alles in Vektoren. Das ist die Sprache der AI
  • Wer jedoch Cosine Similarity blind anwendet, kann in die falsche Richtung gelenkt werden
  • Dieser Artikel erklärt, wie man Ähnlichkeit bewusster nutzt, um bessere Ergebnisse zu erzielen.

Embeddings

  • Embeddings sind vektorisierte Darstellungen von Daten und sehr nützlich, um Beziehungen zwischen Objekten darzustellen oder ähnliche Elemente zu finden
  • Zum Beispiel haben "brother" und "sister" als rohe IDs keine Beziehung, als Vektoren können sie jedoch eine semantische Beziehung ausdrücken
  • Vektoren werden als Eingabestruktur für Machine-Learning-Modelle verwendet oder eigenständig für Ähnlichkeitssuchen genutzt
  • Satz-Embeddings auf Basis von Large Language Models (LLMs) sind derzeit einer der beliebtesten Anwendungsfälle für Embeddings
  • Diese Leistungsfähigkeit bringt Verantwortung in Bezug auf Datensicherheit und bewusste Nutzung mit sich

Beispiel: Satzvergleich mit Cosine Similarity

  • Vergleich von drei Sätzen
    • A: "Python can make you rich."
    • B: "Python can make you itch."
    • C: "Mastering Python can fill your pockets."
  • Zeichenbasierter Vergleich
    • Vergleicht man rohe Strings, unterscheiden sich A und B um 2 Zeichen, A und C um 21 Zeichen
    • Semantisch sind jedoch A und C ähnlicher (beide handeln von Geld)
  • Vektorbasierter Vergleich
    • Mit OpenAI text-embedding-3-large werden Embedding-Vektoren wie die folgenden erzeugt:
      • A: [-0.003738, -0.033263, -0.017596, 0.029024, -0.015251, ...]
      • B: [-0.066795, -0.052274, -0.015973, 0.077706, 0.044226, ...]
      • C: [-0.011167, 0.017812, -0.018655, 0.006625, 0.018506, ...]
    • Anzahl der Vektordimensionen: 3072 (lang, aber ohne Qualitätsverlust reduzierbar)
  • Berechnung der Cosine Similarity
    • A und C: 0.750 (semantisch ähnlich)
    • A und B: 0.576 (schriftbildlich ähnlich)
    • Ergebnis: Bedeutung ist ein wichtigerer Ähnlichkeitsfaktor als Rechtschreibung

Was ist Cosine Similarity?

  • Cosine Similarity misst Ähnlichkeit, indem der Kosinus des Winkels zwischen zwei Vektoren berechnet wird
  • Da die Vektoren in einem hochdimensionalen Raum existieren, versagt das intuitive geometrische Verständnis oft
  • Mathematisch ist sie das Dot Product normierter Vektoren
  • Wichtige Eigenschaften:
    • Identische Vektoren ergeben 1
    • Zufällige Vektoren liegen nahe bei 0 (durch Mittelungseffekte in hohen Dimensionen)
    • Das Ergebnis liegt zwischen -1 und 1
  • Diese Einfachheit kann irreführend sein
    • Nur weil der Wert zwischen 0 und 1 liegt, sollte man ihn nicht als Wahrscheinlichkeit oder sinnvolle Skala missverstehen
      • Beispiel: Ein Wert von 0.6 muss keine starke Ähnlichkeit bedeuten
    • Negative Werte stehen nur selten für semantische Gegensätze
      • Meist sind sie bedeutungslos oder nahe an Rauschen
  • Wenn man mit Glove(glove.6B.300d) nach Wörtern sucht, die "dog" ähnlich sind:
    • Die nahen Wörter sind erwartbar
    • Die entferntesten Wörter liefern oft bedeutungslose Ergebnisse
  • Cosine Similarity ist wie "Duct Tape": einfach und schnell, um verschiedenste Vektoren zu vergleichen
    • Bilder, Text, Audio, Code usw. lassen sich vergleichen
  • Sie bleibt jedoch nur ein Provisorium und kann tiefere Probleme verdecken
    • Beispiel: So wie man ein Rohr mit Duct Tape repariert, ist das weder besonders verlässlich noch dauerhaft
  • Manchmal wirkt Cosine Similarity effektiv, doch wenn sie scheitert, ist die Ursache schwer zu erkennen
    • Oft greift man dann zu improvisierten Workarounds, die neue Probleme schaffen können

Die Beziehung zwischen Cosine Similarity und Korrelationskoeffizienten

  • Der Pearson-Korrelationskoeffizient wird in drei Schritten berechnet:
    • Den Mittelwert abziehen, um die Daten zu zentrieren
    • Die Vektoren zu Einheitsvektoren normieren
    • Das Dot Product der beiden Vektoren berechnen
  • Wenn Vektoren zentriert und normiert sind:
    • Pearson-Korrelationskoeffizient = Cosine Similarity = Dot Product
  • Praktische Nutzung
    • Die Vektoren werden nicht bei jedem Paarvergleich neu zentriert oder normiert
      • Stattdessen verarbeitet man sie vorab und berechnet dann nur noch das Dot Product
    • Wenn Cosine Similarity verwendbar ist, kann man Pearson-Korrelation genauso verwenden
      • Beide Maße lassen sich praktisch im selben Kontext einsetzen

Probleme bei der Verwendung von Cosine Similarity als Ähnlichkeitsmaß

  • Cosine Similarity als Trainingsziel für ein Machine-Learning-Modell zu verwenden, ist mathematisch valide
  • Die Probleme entstehen jenseits der Eignung von Cosine Similarity selbst:
    • Wenn die beim Training verwendete Loss Function nicht Cosine Similarity ist
    • Wenn das Trainingsziel von den Anforderungen der realen Anwendung abweicht
  • Modelle werden in der Regel mit unnormalisierten Vektoren trainiert:
    • Beispiel: Wahrscheinlichkeitsvorhersage auf Basis des Dot Product und logistischer Loss Function
    • Einige Modelle lernen, Elemente derselben Klasse durch Minimierung der euklidischen Distanz nahe zusammenzubringen
  • Normierung liefert mathematische Eigenschaften (Begrenzung des Ergebnisses auf -1 bis 1), ist aber ein "Provisorium"
  • Nur Modelle, die mit Cosine Similarity oder einer direkten Funktion davon trainiert wurden, sind sicher einsetzbar
  • Selbst wenn ein Modell explizit mit Cosine Similarity trainiert wurde, bleibt die Definition von Ähnlichkeit unklar:
    • Literaturkritiker: gemeinsame Themen
    • Bibliothekar: Genre-Klassifikation
    • Leser: emotionale Reaktion
    • Setzer: Seitenzahl und Format
  • Cosine Similarity vereinfacht verschiedene Definitionen auf eine einzige Zahl und kann dadurch irreführen
  • Beispiel: "espresso" und "cappuccino"
    • word2vec betrachtet diese beiden Wörter als nahezu identisch (aus US-Perspektive)
    • In Italien gelten sie jedoch nicht als identisch

Fälle, in denen Cosine Similarity scheitert

  • Einfaches Beispiel: die Frage nach dem Schlüssel
    • Frage: "What did I do with my keys?"
    • Vergleichssätze:
      • "I left them in my pocket"
      • "They are on the table"
      • "What did I put my wallet?"
      • "What I did to my life?"
  • Problem
    • Das Ergebnis mit Cosine Similarity:
      • Der nächstliegende Satz ist statt einer passenden Antwort eine andere Frage ("What I did to my life?")
      • Die Methode stützt sich nicht auf semantische Relevanz, sondern auf bloße Ähnlichkeit der Satzstruktur
    • Sätze über Python haben eine Ähnlichkeit nahe 0 und werden damit korrekt als irrelevant behandelt
  • Grenzen in der realen Welt
    • In realen Anwendungen arbeitet man mit Tausenden von Dokumenten
      • Bei großen Datensätzen, die das Kontextfenster überschreiten, ist die Methode noch anfälliger für Rauschen
    • Je größer der Datensatz wird, desto mehr funktionieren Ähnlichkeitswerte wie ein Roulette-Spiel in hohen Dimensionen

Welche Alternativen gibt es zu Cosine Similarity?

Der leistungsstärkste Ansatz

  • LLM-Abfrage nutzen:
    • Ein leistungsfähiges Sprachmodell verwenden, um zwei Elemente zu vergleichen
    • Beispiel: "Is {sentence_a} a plausible answer to {sentence_b}?"
    • Mit einem LLM sind sinnvolle Vergleiche möglich:
      • Einfache Unterscheidung zwischen Frage und Antwort
      • Ergebnisse können in einem strukturierten Format wie JSON ausgegeben werden
    • Bei großen Datensätzen ist das jedoch ineffizient und teuer

Embeddings optimieren

  • Task-spezifische Embeddings erzeugen:
    • Fine-Tuning, das die Gewichte eines bestehenden Modells anpasst
    • Transfer Learning, das das Wissen des Modells nutzt, um neue, fokussierte Embeddings zu erzeugen
  • Symmetrische Ähnlichkeit:
    • Die Frage "Sind A und B ähnlich?" im Vektorraum ausdrücken
    • Unnötige Dimensionen reduzieren und nur relevante Merkmale behalten
  • Asymmetrische Ähnlichkeit:
    • Beispiel: "Ist Dokument B die richtige Antwort auf Frage A?" als Wahrscheinlichkeit ausdrücken
    • Transformation in spezialisierte Räume für Query und Key

Prompt Engineering

  • Prompts zum Setzen von Kontext hinzufügen:
    • Beispiel: "Nationality of {person}", um den Kontext rund um Nationalität hervorzuheben
    • Statt einfacher Prompts besser konkrete Sätze verwenden:
      • "This is a country that has produced many influential historical figures, including {person}"
    • Die Ergebnisqualität verbessert sich deutlich, ist aber nicht perfekt

Text umschreiben und Kontext extrahieren

  • Text vor dem Embedding vorverarbeiten:
    • Oberflächliche Ähnlichkeiten mit einem einfachen Prompt wie "Fasse den folgenden Text in Standardenglisch in höchstens 200 Wörtern zusammen" entfernen
    • Unnötige formale Elemente (Tippfehler, Formatierung usw.) ignorieren und sich auf den Inhalt konzentrieren
  • Strukturierten Kontext erzeugen:
    • Kundengespräche zusammenfassen und klare Anforderungen sowie Probleme extrahieren:
      • "Fasse das Gespräch in maximal 10 Markdown-Punkten zusammen"
    • Seiten ebenfalls in dasselbe Format überführen, um präziseres Matching zu ermöglichen

Fazit

  • Verschiedene alternative Methoden gleichen die Schwächen von Cosine Similarity aus und liefern verlässlichere Ergebnisse
  • Je nach Projektsituation sollte ein passender Ansatz gewählt und angewendet werden

Zusammenfassung

  • Grenzen von Cosine Similarity:
    • Cosine Similarity liefert Werte zwischen -1 und 1, diese sollten jedoch nicht als Wahrscheinlichkeit verstanden werden
    • Die meisten Modelle werden nicht mit Cosine Similarity als Ziel trainiert, und die Ergebnisse sind nur Korrelationen ohne Garantie
    • Selbst wenn ein Modell Cosine Similarity gelernt hat, muss man verstehen, ob diese Definition von Ähnlichkeit zu den eigenen Anforderungen passt
  • Wie man Vektorähnlichkeit effektiv nutzt:
    • Auf die Daten spezialisierte Embeddings trainieren
    • Prompts so gestalten, dass sie sich auf relevante Aspekte konzentrieren
    • Text vor dem Embedding bereinigen und standardisieren

2 Kommentare

 
mhj5730 2025-01-20

Wirklich großartig aufbereitetes Material.

 
GN⁺ 2025-01-16
Hacker-News-Kommentare
  • In RAG-Anwendungen, die Kosinusähnlichkeit verwenden, ist es sinnvoll, die Ergebnisse mit einem „semantic re-ranker“ oder einem „L2 re-ranking model“ neu zu ordnen

    • In den Beispielen von pgvector-python wird ein Cross-Encoder-Modell für das Re-Ranking verwendet
    • Man kann auch ein Sprachmodell für das Re-Ranking einsetzen, aber die Leistung kann schlechter sein als bei speziell auf Re-Ranking ausgelegten Modellen
    • Im Azure-RAG-Ansatz wird der AI Search semantic ranker verwendet, den Bing zum Neuordnen von Suchergebnissen nutzt
  • Wortvektoren lösen das Problem, dass zwei Wörter stark miteinander verbunden sein können, auch wenn sie nicht im selben Kontext auftreten

    • „Python“ und „Ruby“ erscheinen möglicherweise nicht im selben Kontext, aber „scripting“ kann im Kontext beider vorkommen
    • Wegen des Fluchs der Dimensionalität funktioniert das jedoch oft nicht gut
    • Es wird die Idee vorgestellt, Wort-Embeddings statt als Vektoren als Knoten darzustellen
  • In den USA könnte word2vec Espresso und Cappuccino als nahezu identisch einstufen, in Italien jedoch nicht

    • Der beste Ansatz ist, zwei Einträge direkt mit einer LLM-Abfrage zu vergleichen
    • Ein LLM kann „Wo habe ich mein Portemonnaie hingelegt?“ und „Wo habe ich meinen Schlüssel hingelegt?“ als sehr ähnlich bewerten
  • Kosinusähnlichkeit wird in den meisten Deep-Learning-basierten semantischen Suchsystemen verwendet

    • Modelle wie SentenceTransformers werden darauf trainiert, Kosinusähnlichkeit zu verwenden
    • Auch Modelle wie CLIP nutzen Kosinusähnlichkeit für die Vektorrepräsentation von Bildern
  • Zwei Einträge direkt mit einer LLM-Abfrage zu vergleichen ist der leistungsfähigste Ansatz

    • Cross-Encoder sind eine leistungsstarke und schnelle Lösung
  • HyDE ist eine Methode, bei der eine hypothetische Antwort auf eine Frage erzeugt und dann die Ähnlichkeit verglichen wird

    • Es ist besser, das Format der Chunks zu standardisieren und hypothetische Antworten im selben Format zu erzeugen
  • Kosinusähnlichkeit und Top-k-RAG wirken veraltet

    • Kosinusähnlichkeit ist nur eine zufällige Eigenschaft der Daten
    • Neue Embedding-Modelle werden darauf trainiert, Kosinusähnlichkeit als Ähnlichkeitsmaß zu verwenden
  • Nach Versuchen mit dem RAG-Ansatz stellte sich Enttäuschung ein, und es wird angenommen, dass man das Modell so strukturieren sollte, dass es RAG bereits während des Trainings ausführen kann

    • Man kann die Modellierung der Trainingsdaten verbessern, indem man das Modell die Embeddings, das Format und den Suchprozess definieren lässt
  • In 3D-Grafik und Physik sind Bedeutung und Genauigkeit klar, aber im maschinellen Lernen repräsentiert der Vektorraum zu vieles, sodass die Verwendung des Skalarprodukts mehrdeutig wirkt