Text-Einbettungsmodelle

Text-Einbettungsmodelle werden hauptsächlich verwendet, um die Vektorrepräsentation von Text zu berechnen. Hier bezieht sich der Begriff "Vektor" auf einen mathematischen Vektor, der auch als Merkmalsvektor bekannt ist. Als Entwickler müssen Sie lediglich wissen, dass ein Text-Einbettungsmodell den Merkmalsvektor eines Textstücks berechnen kann und dann mithilfe von Vektor-Ähnlichkeitsberechnungen Textinhalte mit ähnlichen Merkmalen identifizieren kann.

Tipp: Für grundlegende Kenntnisse über Text-Einbettungsmodelle lesen Sie bitte das Einführungstutorial zu Text-Einbettungsmodellen

Unterschied zwischen Vektorsuche und Schlüsselwortbasierten Suche

  • Die Vektorsuche basiert auf der semantischen Ähnlichkeit von Wortvektoren. Sie kann Ergebnisse finden, die semantisch mit der Abfrage verwandt sind, auch wenn die Abfrage-Wörter und die Wörter in den Ergebnissen nicht genau übereinstimmen. Bei der Vektorsuche werden Wörter auf einen hochdimensionalen Vektorraum abgebildet und die Ähnlichkeit zwischen Vektoren berechnet. Das bedeutet, dass selbst wenn die Wörter selbst nicht übereinstimmen, solange sie semantisch ähnlich sind, können verwandte Ergebnisse gefunden werden.
  • Die schlüsselwortbasierte Suche hingegen ist ein einfacher Zeichenkettenabgleich. Sie liefert nur Ergebnisse zurück, die exakt mit den Suchbegriffen übereinstimmen. Wenn ein Dokument unterschiedliche Wörter verwendet, auch wenn sie semantisch ähnlich sind, werden sie nicht abgeglichen.

Die Klasse "Einbettungen" ist eine Art Klasse, die speziell für die Interaktion mit Text-Einbettungsmodellen entwickelt wurde. Es gibt viele Anbieter von Einbettungsmodellen (wie OpenAI, Cohere, Hugging Face etc.), und das Design dieser Klasse ist so gestaltet, dass sie eine standardisierte Schnittstelle für alle Anbieter bereitstellt.

Die Klasse Einbettungen erstellt die Vektorrepräsentation des Textes. Mit der Vektorsuche können semantische Suchen durchgeführt werden, zum Beispiel die Suche nach den ähnlichsten Textausschnitten im Vektorraum.

Die grundlegende Klasse Einbettungen in LangChain stellt zwei Methoden zur Verfügung: eine zum Einbetten von Dokumenten und eine zum Einbetten von Abfragen. Die eine nimmt mehrere Texte als Eingabe entgegen, während die andere einen einzelnen Text als Eingabe erwartet. Der Grund, warum sie als zwei verschiedene Methoden behandelt werden, liegt darin, dass einige Einbettungsanbieter unterschiedliche Einbettungsmethoden für die zu durchsuchenden Dokumente und die Abfragen haben (die Suchanfragen selbst).

Schnellstart

Hier ist ein Beispiel zur Verwendung des Einbettungsmodells von OpenAI:

Konfiguration

Zuerst müssen wir das OpenAI-Python-Paket installieren. Da LangChain viele verschiedene Implementierungen von Text-Einbettungsmodellen hat, müssen Entwickler die Abhängigkeiten unterschiedlicher Modelle entsprechend ihrer Auswahl installieren:

pip install langchain-openai

Konfigurieren Sie den OpenAI-Schlüssel über Umgebungsvariablen:

export OPENAI_API_KEY="..."

Wenn Sie keine Umgebungsvariablen setzen möchten, können Sie den benannten Parameter openai_api_key direkt beim Initialisieren der OpenAI LLM-Klasse übergeben, um den Schlüssel zu übergeben:

from langchain_openai import OpenAIEmbeddings

einbettungsmodell = OpenAIEmbeddings(openai_api_key="...")

Andernfalls können Sie auch ohne Parameter initialisieren:

from langchain_openai import OpenAIEmbeddings

einbettungsmodell = OpenAIEmbeddings()

Dokumente einbetten

Berechnen Sie die Vektor-Merkmale einer Gruppe von Texten:

einbettungen = einbettungsmodel.embed_documents(
    [
        "Hallo!",
        "Oh, hallo!",
        "Wie ist dein Name?",
        "Meine Freunde nennen mich Welt",
        "Hallo Welt!"
    ]
)
len(einbettungen), len(einbettungen[0])
(5, 1536)

Abfrage einbetten

Diese Funktion berechnet die Vektor-Merkmal einer Abfrage. In der Regel besteht sie darin, die Frage, die gesucht werden soll, in einen Merkmalsvektor umzuwandeln und diesen Vektor dann zur Suche ähnlicher Texte in der Vektordatenbank zu verwenden.

eingebettete_abfrage = einbettungsmodel.embed_query("Wie war der Name, der im Gespräch erwähnt wurde?")
eingebettete_abfrage[:5]
[0.0053587136790156364,
 -0.0004999046213924885,
 0.038883671164512634,
 -0.003001077566295862,
 -0.00900818221271038]