AI Engineering Academy · Lektion

Dense- vs. Sparse-Retrieval: Abwägungen

Verstehen Sie, wann dichte Embeddings exakte Keyword-Treffer verfehlen und wann BM25 semantische Paraphrasen übersieht, und warum die Kombination beider Verfahren durchgehend besser abschneidet als jedes einzelne.

Lektion 1 von 413 Schritte

Dense- vs. Sparse-Retrieval: Abwägungen ist eine kostenlose AI Engineering Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des AI Engineering Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der AI Engineering Academy-Kurs umfasst insgesamt 4 Lektionen.

Zwei grundlegend unterschiedliche Abrufsignale

Moderne Abrufsysteme stützen sich auf zwei unterschiedliche Signale: dichter Abruf kodiert Bedeutung in kontinuierlichen Vektorräumen, während sparsamer Abruf das exakte Vorkommen von Begriffen zählt. Diese Signale ergänzen sich und sind nicht austauschbar. Ihre jeweiligen Stärken und Schwächen zu verstehen, ist der erste Schritt zum Aufbau eines Systems, das beide effektiv nutzt.

Wie dichte Embeddings funktionieren

Dichter Abruf bildet sowohl die Abfrage als auch jedes Dokument mithilfe eines neuronalen Encoders auf einen hochdimensionalen Vektor ab. Die Ähnlichkeit wird anhand des Kosinusabstands oder des Skalarprodukts zwischen den Vektoren gemessen. Da der Encoder mit großen Textkorpora trainiert wurde, liegen semantisch verwandte Formulierungen im Vektorraum nahe beieinander, selbst wenn sie keine gemeinsamen Wörter enthalten – das ist der entscheidende Vorteil des dichten Abrufs.

from openai import OpenAI
import numpy as np

client = OpenAI()

def embed(text: str) -> list[float]:
    resp = client.embeddings.create(
        model='text-embedding-3-small',
        input=text,
    )
    return resp.data[0].embedding

def cosine_similarity(a, b):
    a, b = np.array(a), np.array(b)
    return float(np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b)))

q = embed('How do I cancel my subscription?')
d = embed('Steps to unsubscribe from the service')
print(cosine_similarity(q, d))  # high similarity despite different words

Wo dichter Abruf scheitert

Dichte Modelle haben Schwierigkeiten mit seltenen Begriffen, die während des Encoder-Trainings nur unzureichend vertreten waren. Eine Abfrage mit einer spezifischen Produktmodellnummer wie RTX-4090-Ti-OC, einem medizinischen Wirkstoffnamen oder einem proprietären internen Bezeichner findet häufig nicht das richtige Dokument, weil der Encoder keine gelernte Repräsentation für diese Tokenfolge besitzt. Der Vektor landet dann an einer ungeeigneten Stelle im Embedding-Raum.

Wie der sparsame BM25-Abruf funktioniert

BM25 (Best Matching 25) ist eine probabilistische Ranking-Funktion, die Dokumente danach bewertet, wie häufig Abfragebegriffe im Dokument vorkommen. Dabei wird die Dokumentlänge normalisiert und die Sättigung der Termhäufigkeit abgeschwächt. Das Ergebnis ist ein spärlicher Score-Vektor – die meisten Dimensionen sind null, weil Dokumente nur einen kleinen Teil des Vokabulars enthalten.

# BM25 scoring formula (conceptual)
# score(D, Q) = sum over query terms t of:
#   IDF(t) * (tf(t,D) * (k1 + 1)) / (tf(t,D) + k1 * (1 - b + b * |D|/avgdl))

# k1 controls term frequency saturation (typically 1.2-2.0)
# b controls document length normalization (typically 0.75)
# IDF(t) = log((N - df(t) + 0.5) / (df(t) + 0.5))

# N = total documents, df(t) = documents containing term t
# tf(t,D) = frequency of t in document D, |D| = doc length, avgdl = average doc length

Stärken von BM25: Exakte Begriffe und Fachjargon

BM25 ist besonders stark bei Abfragen mit exakten Fachbegriffen, Produktnamen, Fehlercodes und numerischen Bezeichnern, die präzise übereinstimmen müssen. Eine Abfrage nach ORA-01017 (einem Oracle-Fehlercode) bewertet Dokumente, die genau diese Zeichenfolge enthalten, deutlich höher als Dokumente, die lediglich allgemein die Datenbankauthentifizierung behandeln. Für ein Dense-Modell, das diesen spezifischen Code noch nie gesehen hat, ist das unmöglich.

from rank_bm25 import BM25Okapi

corpus = [
    'Oracle database ORA-01017 invalid username or password logon denied',
    'Database authentication and connection troubleshooting guide',
    'How to resolve login errors in Oracle and MySQL databases',
]

tokenized_corpus = [doc.lower().split() for doc in corpus]
bm25 = BM25Okapi(tokenized_corpus)

query = 'ORA-01017 error fix'
scores = bm25.get_scores(query.lower().split())
print(dict(zip(range(len(corpus)), scores)))
# doc 0 scores highest because it contains ORA-01017

Wo BM25 scheitert: Paraphrasen und Synonyme

BM25 erkennt semantische Paraphrasen nicht. Ein Dokument über „Reparatur von Automobilmotoren“ erhält für eine Abfrage zu „Wartung von Automobilmotoren“ den Wert null, wenn keines der exakten Wörter übereinstimmt. Dieses Problem nicht übereinstimmender Vokabulare, auch lexikalische Lücke genannt, führt dazu, dass die reine Stichwortsuche große Mengen relevanter Inhalte verpasst, die dieselbe Idee einfach mit anderen Wörtern ausdrücken.

from rank_bm25 import BM25Okapi

corpus = [
    'automobile engine repair and maintenance tips',
    'car motor maintenance guide for beginners',
    'vehicle powertrain service intervals',
]
tokenized = [doc.split() for doc in corpus]
bm25 = BM25Okapi(tokenized)

scores = bm25.get_scores(['car', 'motor', 'maintenance'])
print(scores)
# doc 1 scores high, doc 0 and 2 score lower despite being semantically related

Benchmark-Ergebnisse: Hybrid gewinnt konsistent

Benchmarks mit BEIR-, MS-MARCO- und Q&A-Datensätzen aus Unternehmen zeigen konsistent, dass hybrides Retrieval entweder Dense- oder Sparse-Retrieval allein übertrifft – bei NDCG@10 um 5–15 Prozent. Der größte Vorteil zeigt sich bei Datensätzen mit einer Mischung aus faktischen Nachschlageabfragen (bei denen BM25 hilft) und Paraphrasenabfragen (bei denen dichte Embeddings helfen). Keine einzelne Retrieval-Methode dominiert alle Abfragetypen.

Analyse der Abfragetypen: Welcher Retriever gewinnt

Sie können vorhersagen, welcher Retriever besser abschneidet, indem Sie den Abfragetyp analysieren. Dense Retrieval gewinnt bei konzeptionellen Fragen, Paraphrasen und breit gefassten Themenabfragen. BM25 gewinnt bei Abfragen mit Eigennamen, Versionsnummern, Codeausschnitten, Akronymen und seltenen Fachbegriffen. Hybrid gewinnt immer, wenn der Abfragetyp im Voraus unbekannt ist – was in Produktionsumgebungen fast immer der Fall ist.

# Query type heuristics
def predict_retriever_advantage(query: str) -> str:
    tokens = query.split()
    has_numbers = any(t[0].isdigit() for t in tokens)
    has_uppercase_acronyms = any(t.isupper() and len(t) > 2 for t in tokens)
    is_short = len(tokens) <= 4

    if has_numbers or has_uppercase_acronyms:
        return 'BM25 likely wins (exact terms)'
    elif is_short:
        return 'Dense likely wins (semantic matching needed)'
    else:
        return 'Hybrid recommended (mixed signals)'

Problem inkompatibler Scores

Das Kombinieren dichter und spärlicher Ergebnisse ist nicht trivial, da ihre Scores auf inkompatiblen Skalen liegen. Die Kosinusähnlichkeit liefert Werte zwischen -1 und 1, während BM25 unbeschränkte positive Scores erzeugt, die von der Korpusgröße abhängen. Sie können diese Werte nicht einfach addieren. Die Standardlösung besteht darin, rangbasierte Fusion statt scorebasierter Fusion zu verwenden – also Ranglisten anstelle roher Scores zusammenzuführen.

Praktische Entscheidung: Wann Sie welche Methode verwenden

Verwenden Sie reines Dense-Retrieval, wenn Ihr Korpus aus einem eng begrenzten Fachgebiet stammt, ein einheitliches Vokabular verwendet und Sie semantische Verallgemeinerung über Paraphrasen hinweg benötigen. Verwenden Sie reines BM25, wenn es sich bei den Abfragen hauptsächlich um Nachschlageabfragen mit exakten Bezeichnern handelt und Ihr Datensatz klein genug für eine vollständige Suche ist. Verwenden Sie hybrides Retrieval in allen produktiven RAG-Systemen mit unterschiedlichen Abfragetypen – der Mehraufwand ist moderat und die Verbesserung des Recalls deutlich.

Abwägung zwischen Leistung und Infrastruktur

Dense Retrieval erfordert eine GPU-beschleunigte Suche nach approximierten nächsten Nachbarn oder eine Vektordatenbank, was zusätzliche Infrastrukturkosten verursacht. BM25 läuft vollständig auf der CPU mit einem invertierten Index und ist äußerst schnell. Hybrides Retrieval benötigt beide Infrastrukturkomponenten sowie einen Fusionsschritt. Die zusätzliche Komplexität ist für die meisten produktiven Anwendungsfälle durch die Recall-Verbesserung gerechtfertigt, muss jedoch gegen Ihr Infrastruktur-Budget abgewogen werden.

Kurze Überprüfung

Testen Sie Ihr Verständnis der in dieser Lektion behandelten Abwägungen zwischen dichtem und spärlichem Retrieval.

Zusammenfassung der Lektion

In dieser Lektion haben Sie gelernt: Dense Retrieval erfasst die semantische Bedeutung, scheitert aber bei seltenen exakten Begriffen; sparse Retrieval mit BM25 verarbeitet exakte Stichwörter, verpasst jedoch Paraphrasen; und hybrides Retrieval übertrifft beide Methoden allein konsistent bei unterschiedlichen Abfragetypen. Ihre Scores sind inkompatibel und müssen durch Rangfusion statt durch Addition der Scores zusammengeführt werden. Als Nächstes implementieren wir die BM25-Stichwortsuche in Python.

Kostenlos starten

Lerne Python mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
30
Lektionen
120

Häufig gestellte Fragen

Ist die Lektion „Dense- vs. Sparse-Retrieval: Abwägungen“ kostenlos?

Ja — der vollständige Text von „Dense- vs. Sparse-Retrieval: Abwägungen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des AI Engineering Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der AI Engineering Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Dense- vs. Sparse-Retrieval: Abwägungen“?

Verstehen Sie, wann dichte Embeddings exakte Keyword-Treffer verfehlen und wann BM25 semantische Paraphrasen übersieht, und warum die Kombination beider Verfahren durchgehend besser abschneidet als j… Du übst AI Engineering Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um AI Engineering Academy zu starten?

Keine Vorkenntnisse erforderlich. AI Engineering Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „Dense- vs. Sparse-Retrieval: Abwägungen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser AI Engineering Academy-Lektion Code schreiben und ausführen?

Ja. Jede AI Engineering Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Dense- vs. Sparse-Retrieval: Abwägungen
  2. BM25-Keyword-Suche implementieren
  3. Reziproke Rangfusion zum Zusammenführen von Bewertungen
  4. Hybridsuche in Pinecone und pgvector
← Zurück zu AI Engineering Academy