Wird geladen

Beim Aufbau von RAG-Pipelines wirst du schnell feststellen, dass semantische Suche allein nicht immer die besten Ergebnisse liefert. Manchmal benötigst du exakte Begriffsübereinstimmungen, die die semantische Suche übersehen könnte. Die Lösung besteht darin, semantische Suche mit lexikalischer Suche zu kombinieren, indem du eine Technik namens BM25 verwendest.

Das Problem mit semantischer Suche allein

Nehmen wir an, du suchst in einem Dokument nach einer bestimmten Vorfall-ID wie „INC-2023-Q4-011". Während semantische Suche darin glänzt, Kontext und Bedeutung zu verstehen, könnte sie Abschnitte zurückgeben, die semantisch verwandt sind, aber den exakten Begriff, nach dem du suchst, gar nicht enthalten.

Im obigen Beispiel gab die semantische Suche den Cybersicherheitsabschnitt zurück (der tatsächlich die Vorfall-ID enthält), aber auch einen Finanzanalyseabschnitt, der den Vorfall überhaupt nicht erwähnt. Dies passiert, weil sich semantische Suche auf konzeptuelle Ähnlichkeit konzentriert und nicht auf exakte Begriffsübereinstimmung.

Hybride Suchstrategie

Die Lösung besteht darin, sowohl semantische als auch lexikalische Suchen parallel auszuführen und dann die Ergebnisse zusammenzuführen. Das gibt dir das Beste aus beiden Welten:

  • Semantische Suche findet konzeptuell verwandte Inhalte mithilfe von Embeddings
  • Lexikalische Suche findet exakte Begriffsübereinstimmungen mithilfe klassischer Textsuche
  • Zusammengeführte Ergebnisse kombinieren beide Ansätze für bessere Genauigkeit

Wie BM25 funktioniert

BM25 (Best Match 25) ist ein beliebter Algorithmus für lexikalische Suche in RAG-Systemen. So verarbeitet er eine Suchanfrage:

Schritt 1: Die Anfrage tokenisieren Zerlege die Frage des Nutzers in einzelne Begriffe. Zum Beispiel wird „a INC-2023-Q4-011" zu ["a", "INC-2023-Q4-011"].

Schritt 2: Begriffshäufigkeit zählen Schau, wie oft jeder Begriff in all deinen Dokumenten vorkommt. Häufige Wörter wie „a" könnten 5-mal vorkommen, während spezifische Begriffe wie „INC-2023-Q4-011" möglicherweise nur einmal vorkommen.

Schritt 3: Begriffe nach Wichtigkeit gewichten Begriffe, die seltener vorkommen, erhalten höhere Wichtigkeitswerte. Das Wort „a" erhält eine niedrige Wichtigkeit, weil es häufig ist, während „INC-2023-Q4-011" eine hohe Wichtigkeit erhält, weil es selten ist.

Schritt 4: Beste Übereinstimmungen finden Gib Dokumente zurück, die mehr Instanzen der höher gewichteten Begriffe enthalten.

So richtest du ein grundlegendes BM25-Suchsystem ein:

python
# 1. Teile deinen Text in Abschnitte auf
chunks = chunk_by_section(text)

# 2. Erstelle einen BM25-Store und füge Dokumente hinzu
store = BM25Index()
for chunk in chunks:
    store.add_document({"content": chunk})

# 3. Durchsuche den Store
results = store.search("What happened with INC-2023-Q4-011?", 3)

# Ergebnisse ausgeben
for doc, distance in results:
    print(distance, "\n", doc["content"][:200], "\n----\n")

Wenn du diese Suche ausführst, erhältst du deutlich bessere Ergebnisse als mit semantischer Suche allein. Der BM25-Algorithmus priorisiert Abschnitte, die tatsächlich deine spezifischen Suchbegriffe enthalten, besonders seltene Begriffe wie Vorfall-IDs.

Beachte, wie die Ergebnisse nun korrekt den Abschnitt Software-Engineering und den Abschnitt Cybersicherheit priorisieren – beide enthalten tatsächlich die Vorfall-ID, nach der du suchst.

Warum das besser funktioniert

BM25 glänzt beim Finden exakter Übereinstimmungen, weil es:

  • seltenen, spezifischen Begriffen höheres Gewicht gibt
  • häufige Wörter ignoriert, die keinen Suchwert hinzufügen
  • sich auf Begriffshäufigkeit statt auf semantische Bedeutung konzentriert
  • besonders gut für technische Begriffe, IDs und spezifische Phrasen funktioniert

Die zentrale Erkenntnis ist, dass beide Suchmethoden sich ergänzende Stärken haben. Semantische Suche versteht Kontext und Bedeutung, während lexikalische Suche sicherstellt, dass du keine exakten Begriffsübereinstimmungen verpasst. Durch ihre Kombination schaffst du ein robusteres Suchsystem, das sowohl konzeptuelle Anfragen als auch spezifische Nachschlagevorgänge effektiv bewältigt.

Im nächsten Schritt lernst du, wie du Ergebnisse aus beiden Suchsystemen zusammenführst, um eine einheitliche hybride Sucherfahrung zu schaffen.