Semantische Ähnlichkeit: Vektoren vergleichen¶
Im Kapitel Embeddings haben wir Texte in Vektoren übersetzt – zwei inhaltlich ähnliche Texte liegen im Vektorraum nah beieinander. Damit daraus Suche und später RAG werden können, brauchen wir ein klares Kriterium: Wann sind zwei Vektoren „ähnlich“? Dieses Kapitel erklärt die Idee mit Intuition zuerst, dann ein Maß (Kosinusähnlichkeit) und warum genau das die Brücke zu semantischer Suche schlägt.
Recap: Wozu brauchen wir das?¶
Bisher: Wir haben Text in Embeddings (Vektoren fester Länge) umgewandelt. Ähnliche Bedeutung → ähnliche Vektoren.
Jetzt: Wir brauchen eine Zahl, die sagt, wie ähnlich zwei Vektoren sind – damit wir z. B. die „nächsten“ Dokumente zu einer Frage finden können.
Später: In Semantische Suche nutzen wir genau dieses Maß, um aus vielen Chunks die relevantesten auszuwählen; daraus entsteht Retrieval und dann RAG.
Intuition: Nähe im Raum¶
Stellen wir uns zwei Vektoren als Pfeile im Raum vor (in der Praxis haben sie z. B. 384 oder 768 Dimensionen, die Idee bleibt gleich). Zwei Texte mit ähnlicher Bedeutung sollen „nah“ beieinander liegen. Was heißt „nah“?
Option 1 – Abstand: Je kürzer der Abstand zwischen den Spitzen der Pfeile, desto ähnlicher. Das funktioniert, aber die Länge der Vektoren kann stören: Ein langer und ein kurzer Vektor können inhaltlich gleich ausgerichtet sein; der Abstand wäre trotzdem groß.
Option 2 – Richtung: Wir ignorieren die Länge und schauen auf die Richtung. Zwei Vektoren, die in die gleiche Richtung zeigen, sind „ähnlich“ – unabhängig davon, ob sie lang oder kurz sind.
Für Texte und Embeddings ist die Richtung meist aussagekräftiger als der reine Abstand. Das führt direkt zum Kosinus.
Kosinusähnlichkeit (Intuition)¶
Der Winkel zwischen zwei Vektoren beschreibt, ob sie in die gleiche Richtung zeigen (Winkel 0°), senkrecht stehen (90°) oder entgegengesetzt sind (180°). Der Kosinus dieses Winkels liefert eine einfache Zahl:
cos ≈ 1: Vektoren zeigen in die gleiche Richtung → sehr ähnlich.
cos ≈ 0: Vektoren stehen senkrecht → unabhängig / nicht ähnlich.
cos ≈ -1: Vektoren zeigen entgegengesetzt → sehr unähnlich.
Bei typischen Embedding-Modellen liegen die Werte oft zwischen 0 und 1; negative Werte sind möglich, aber seltener. Größerer Kosinus = ähnlicher.
Beispiel (konzeptionell)¶
Frage: "Was ist RAG?"
Chunk A: "RAG kombiniert Retrieval mit einem Sprachmodell."
Chunk B: "Das Wetter ist heute schön."
→ Embedding von Frage und Chunk A haben hohe Kosinusähnlichkeit.
→ Embedding von Frage und Chunk B haben niedrige Kosinusähnlichkeit.
→ Für semantische Suche sortieren wir Chunks nach dieser Ähnlichkeit und wählen die Top-k.
Formel und Code¶
Mathematisch ist die Kosinusähnlichkeit das Skalarprodukt der (normierten) Vektoren:
cos(a, b) = (a · b) / (||a|| · ||b||)
Dabei ist a · b das Skalarprodukt und ||a|| die Länge (Norm) von a. So wird nur die Richtung verglichen.
import numpy as np
def cosine_similarity(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
# Beispiel: zwei Vektoren (z. B. aus einem Embedding-Modell)
vec_frage = np.array([0.1, 0.9, 0.2, ...]) # Embedding der Frage
vec_chunk = np.array([0.15, 0.85, 0.25, ...]) # Embedding eines Chunks
score = cosine_similarity(vec_frage, vec_chunk) # z. B. 0.92 → sehr ähnlich
Warum Embeddings semantische Suche ermöglichen¶
Ohne Embeddings: Wir könnten nur nach exakten Wörtern suchen („RAG“, „Retrieval“). Synonyme oder umschreibende Sätze würden nicht gefunden.
Mit Embeddings: Jeder Text wird zu einem Punkt im gleichen Vektorraum. Bedeutung wird durch die Lage erfasst – ähnliche Inhalte liegen nah beieinander.
Mit Kosinusähnlichkeit: Wir haben ein klares, rechnerisch einfaches Maß für „wie ähnlich“. So können wir aus hunderten oder tausenden Chunks die relevantesten zur Anfrage auswählen – das ist der Kern von Retrieval und damit die Grundlage für RAG.
Kurz zusammengefasst¶
Vektorähnlichkeit lässt sich über Richtung (Winkel) messen – unabhängig von der Vektorlänge.
Kosinusähnlichkeit ist dafür das Standardmaß: Werte nahe 1 = ähnlich, nahe 0 = unabhängig.
Embeddings + Kosinusähnlichkeit sind die Brücke von „Text als Vektor“ zu semantischer Suche und RAG.
Nächster Schritt¶
Im Kapitel Semantische Suche (Semantische Suche) setzen wir genau das um: Wir haben einen Korpus aus Chunks, jede Anfrage wird zu einem Vektor, und mit der Kosinusähnlichkeit finden wir die Top-k relevanten Chunks – die wir später dem LLM als Kontext für RAG mitgeben.