- 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
Wirklich großartig aufbereitetes Material.
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
Wortvektoren lösen das Problem, dass zwei Wörter stark miteinander verbunden sein können, auch wenn sie nicht im selben Kontext auftreten
In den USA könnte word2vec Espresso und Cappuccino als nahezu identisch einstufen, in Italien jedoch nicht
Kosinusähnlichkeit wird in den meisten Deep-Learning-basierten semantischen Suchsystemen verwendet
Zwei Einträge direkt mit einer LLM-Abfrage zu vergleichen ist der leistungsfähigste Ansatz
HyDE ist eine Methode, bei der eine hypothetische Antwort auf eine Frage erzeugt und dann die Ähnlichkeit verglichen wird
Kosinusähnlichkeit und Top-k-RAG wirken veraltet
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
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