AI Personal Learning
und praktische Anleitung

Wie man das beste Einbettungsmodell für RAG-Anwendungen auswählt

Die Vektoreinbettung ist das Herzstück der aktuellen Retrieval Augmented Generation (RAG) Anwendungen. Sie erfassen semantische Informationen über Datenobjekte (z. B. Text, Bilder usw.) und stellen sie als Zahlenreihen dar. In aktuellen generativen KI-Anwendungen werden diese Vektor-Embedding in der Regel durch Embedding-Modelle erzeugt. Wie wählt man das richtige Einbettungsmodell für eine RAG-Anwendung? Insgesamt hängt dies vom spezifischen Anwendungsfall und den spezifischen Anforderungen ab. Als Nächstes wollen wir die einzelnen Schritte aufschlüsseln, um sie einzeln zu betrachten.


 

01. spezifische Anwendungsfälle identifizieren

Wir betrachten die folgenden Fragen auf der Grundlage der RAG-Anwendungsanforderungen:

Erstens: Ist das allgemeine Modell für die Bedürfnisse ausreichend?

Zweitens: Gibt es besondere Anforderungen? Zum Beispiel Modalität (z.B. nur Text oder Bild, für multimodale Einbettungsoptionen siehe dieWie man das richtige Einbettungsmodell wählt"), bestimmte Bereiche (z. B. Recht, Medizin usw.)

In den meisten Fällen wird ein allgemeines Modell für die gewünschten Modi gewählt.

 

02. die Auswahl der generischen Modelle

Der Massive Text Embedding Benchmark (MTEB) in HuggingFace listet eine Vielzahl aktueller proprietärer und quelloffener Texteinbettungsmodelle auf, und für jedes Einbettungsmodell listet der MTEB eine Reihe von Metriken auf, darunter Modellparameter, Speicher, Einbettungsdimensionen, maximale Anzahl von Token und ihre Ergebnisse bei Aufgaben wie Retrieval und Zusammenfassung.

Die folgenden Faktoren müssen bei der Auswahl eines Einbettungsmodells für eine RAG-Anwendung berücksichtigt werden:

MandateOben auf dem MTEB-Leaderboard sehen wir verschiedene Registerkarten für Aufgaben. Für eine RAG-Anwendung müssen wir uns vielleicht mehr auf die Aufgabe "Abrufen" konzentrieren, wo wir wählen können Wiederaufnahmeverfahren Diese Registerkarte.

MehrsprachigkeitRAG: Basierend auf der Sprache des Datensatzes, in dem die RAG angewendet wird, um das Einbettungsmodell für die entsprechende Sprache auszuwählen.

ErgebnisBenchmark: Gibt die Leistung des Modells bei einem bestimmten Benchmark-Datensatz oder mehreren Benchmark-Datensätzen an. Je nach Aufgabe werden unterschiedliche Bewertungsmetriken verwendet. In der Regel nehmen diese Metriken Werte zwischen 0 und 1 an, wobei höhere Werte eine bessere Leistung anzeigen.

Modellgröße und SpeichernutzungDiese Metriken geben uns eine Vorstellung von den für die Ausführung des Modells erforderlichen Rechenressourcen. Während sich die Abrufleistung mit der Modellgröße verbessert, ist es wichtig zu beachten, dass die Modellgröße sich auch direkt auf die Latenzzeit auswirkt. Außerdem können größere Modelle überangepasst sein und eine geringe Generalisierungsleistung aufweisen, so dass sie in der Produktion schlecht abschneiden. Daher müssen wir ein Gleichgewicht zwischen Leistung und Latenzzeit in einer Produktionsumgebung finden. Im Allgemeinen können wir mit einem kleinen, leichtgewichtigen Modell beginnen und die RAG-Anwendung zunächst schnell aufbauen. Nachdem der der Anwendung zugrunde liegende Prozess ordnungsgemäß funktioniert, können wir zu einem größeren, leistungsfähigeren Modell wechseln, um die Anwendung weiter zu optimieren.

Dimensionen einbettenLänge des Einbettungsvektors: Dies ist die Länge des Einbettungsvektors. Während größere Einbettungsdimensionen feinere Details in den Daten erfassen können, sind die Ergebnisse nicht unbedingt optimal. Brauchen wir zum Beispiel wirklich 8192 Dimensionen für Dokumentendaten? Wahrscheinlich nicht. Andererseits ermöglichen kleinere Einbettungsdimensionen eine schnellere Inferenz und sind effizienter in Bezug auf die Speicherung und den Speicherplatz. Daher müssen wir ein gutes Gleichgewicht zwischen der Erfassung des Dateninhalts und der Ausführungseffizienz finden.

Maximale Anzahl von Token: gibt die maximale Anzahl von Token für ein einzelnes Embedding an. Für gewöhnliche RAG-Anwendungen ist die beste Größe für ein Embedding normalerweise ein einzelner Absatz. In diesem Fall sollte ein Embedding-Modell mit einer maximalen Token-Anzahl von 512 ausreichend sein. In einigen speziellen Fällen können wir jedoch Modelle mit einer größeren Anzahl von Token benötigen, um längere Texte zu verarbeiten.

 

03. die Bewertung von Modellen in RAG-Anwendungen

Wir können zwar generische Modelle in den MTEB-Ranglisten finden, aber wir müssen ihre Ergebnisse mit Vorsicht behandeln. Wenn man bedenkt, dass diese Ergebnisse von den Modellen selbst angegeben werden, ist es möglich, dass einige Modelle ihre Leistung aufblähen, weil sie möglicherweise die MTEB-Datensätze in ihre Trainingsdaten aufgenommen haben, die ja öffentlich zugänglich sind. Außerdem kann es sein, dass der Datensatz, den das Modell für das Benchmarking verwendet, nicht genau die Daten repräsentiert, die in unserer Anwendung verwendet werden. Daher müssen wir die Embedding-Modelle anhand unserer eigenen Datensätze bewerten.

3.1 Datensätze

Wir können aus den von der RAG-Anwendung verwendeten Daten einen kleinen getaggten Datensatz erzeugen. Nehmen wir den folgenden Datensatz als Beispiel.

Sprache Beschreibung
C/C++ Eine allgemeine Programmiersprache, die für ihre Leistung und Effizienz bekannt ist. Sie bietet Low-Level-Speicher-Manipulationsmöglichkeiten und wird Sie wird häufig in der System-/Softwareentwicklung, der Spieleentwicklung und bei Anwendungen, die eine hohe Leistung erfordern, eingesetzt.
Java Eine vielseitige, objektorientierte Programmiersprache, die darauf ausgelegt ist, so wenig wie möglich von der Implementierung abhängig zu sein. Aufgrund ihrer Portabilität und Robustheit wird sie häufig für die Entwicklung von Unternehmensanwendungen, mobilen Anwendungen (insbesondere Android) und Webanwendungen eingesetzt.
Python Eine interpretierte High-Level-Programmiersprache, die für ihre Lesbarkeit und Einfachheit bekannt ist. Sie unterstützt mehrere Programmierparadigmen und ist weit verbreitet. Sie unterstützt mehrere Programmierparadigmen und wird häufig in den Bereichen Webentwicklung, Datenanalyse, künstliche Intelligenz, wissenschaftliche Berechnungen und Automatisierung eingesetzt.
JavaScript Eine dynamische High-Level-Programmiersprache, die hauptsächlich für die Erstellung interaktiver und dynamischer Inhalte im Web verwendet wird. Sie ist eine wesentliche Technologie für die Sie ist eine wesentliche Technologie für die Front-End-Web-Entwicklung und wird zunehmend auf der Server-Seite mit Umgebungen wie Node.js verwendet.
C# Es wird für die Entwicklung einer breiten Palette von Anwendungen, einschließlich Web-, Desktop-, Mobil- und Spieleanwendungen, insbesondere innerhalb des Microsoft-Ökosystems verwendet. Es wird für die Entwicklung einer breiten Palette von Anwendungen, einschließlich Web, Desktop, Mobile und Spiele, vor allem innerhalb des Microsoft-Ökosystems verwendet.
SQL Eine domänenspezifische Sprache für die Programmierung und Verwaltung relationaler Datenbanken, die für die Abfrage, Aktualisierung und Verwaltung von Daten in Datenbanken unerlässlich ist. Sie ist für die Abfrage, Aktualisierung und Verwaltung von Daten in Datenbanken unverzichtbar und wird häufig für Datenanalysen und Business Intelligence verwendet.
PHP Es ist in HTML eingebettet und wird häufig für die Erstellung dynamischer Webseiten und Anwendungen verwendet, mit einer starken Präsenz in Content-Management-Systemen wie WordPress. Anwendungen, mit einer starken Präsenz in Content-Management-Systemen wie WordPress.
Golang Eine von Google entwickelte statisch typisierte, kompilierte Programmiersprache, die für ihre Einfachheit und Effizienz bekannt ist und für die Entwicklung skalierbarer und leistungsstarker Anwendungen, insbesondere in Cloud-Diensten und verteilten Systemen, verwendet wird. Anwendungen, insbesondere in Cloud-Diensten und verteilten Systemen.
Rost Eine auf Sicherheit und Gleichzeitigkeit ausgerichtete Systemprogrammiersprache, die Speichersicherheit ohne Garbage-Collector bietet und für die Erstellung von Software verwendet wird. Sie bietet Speichersicherheit, ohne einen Garbage Collector zu verwenden, und wird für die Erstellung zuverlässiger und effizienter Software verwendet, insbesondere bei der Systemprogrammierung und der Web-Assemblierung.

3.2 Einbettung erstellen

Als nächstes verwenden wir diepymilvus [Modell]Für den obigen Datensatz wird der entsprechende Vektor Embedding erzeugt. über die pymilvus [Modell] Für die Verwendung, siehe https://milvus.io/blog/introducing-pymilvus-integrations-with-embedding-models.md

def gen_embedding(model_name).
    openai_ef = model.dense.OpenAIEmbeddingFunction(
        model_name=model_name, api_key=os.environ.
        api_key=os.environ["OPENAI_API_KEY"]
    )

    docs_embeddings = openai_ef.encode_documents(df['description'].tolist())

return docs_embeddings, openai_ef

Anschließend wird die erzeugte Einbettung in der Sammlung von Milvus hinterlegt.

def save_embedding(docs_embeddings, collection_name, dim):
    data = [
        {"id": i, "vector": docs_embeddings[i].data, "text": row.language}
        for i, row in df.iterrows()
    ]

    if milvus_client.has_collection(collection_name=collection_name).
        milvus_client.drop_collection(collection_name=collection_name)
    milvus_client.create_collection(collection_name=collection_name, dimension=dim)

    res = milvus_client.insert(sammlung_name=sammlung_name, daten=daten)

3.3 Abfragen

Wir definieren Abfragefunktionen, um den Abruf der Vektoreinbettung zu erleichtern.

def query_results(query, collection_name, openai_ef).
    query_embeddings = openai_ef.encode_queries(query)
    res = milvus_client.search(
        collection_name=collection_name,
        data=abfrage_einbettungen,
        limit=4,
        output_fields=["text"],
    )

result = {}
    for items in res.
        for item in items: result[item.get("entity")]=item.get('distance')
            result[item.get("entity").get("text")] = item.get("distance")

Ergebnis zurückgeben

3.4 Bewertung der Leistung des Einbettungsmodells

Wir verwenden zwei Embedding-Modelle von OpenAI.text-einbettung-3-klein im Gesang antworten text-einbettung-3-großfür die folgenden zwei Abfragen verglichen werden. Es gibt viele Bewertungsmetriken wie Genauigkeit, Wiederaufruf, MRR, MAP, usw. Hier verwenden wir Genauigkeit und Wiederaufruf.

Präzision Bewertet den Prozentsatz der wirklich relevanten Inhalte in den Suchergebnissen, d. h. wie viele der zurückgegebenen Ergebnisse für die Suchanfrage relevant sind.

Genauigkeit = TP / (TP + FP)

In diesem Fall sind die "True Positives" (TP) diejenigen, die wirklich relevant für die Suchanfrage sind, während die "False Positives" (FP) sich auf diejenigen beziehen, die in den Suchergebnissen nicht relevant sind.

Der Rückruf bewertet die Anzahl der relevanten Inhalte, die erfolgreich aus dem gesamten Datensatz abgerufen wurden.

Rückruf = TP / (TP + FN)

Falsche Negative (FN) beziehen sich auf alle relevanten Elemente, die nicht in der endgültigen Ergebnismenge enthalten sind.

Eine genauere Erläuterung dieser beiden Konzepte finden Sie unter

Anfrage 1::automatische Müllabfuhr

Verwandte Themen: Java, Python, JavaScript, Golang

Rang text-einbettung-3-klein text-einbettung-3-groß
1 ❎ Rost ❎ Rost
2 ❎ C/C++ ❎ C/C++
3 ✅ Golang ✅ Java
4 ✅ Java ✅ Golang
Präzision 0.50 0.50
Rückruf 0.50 0.50

Anfrage 2::Suite für Web-Backend-Server-Entwicklung

Verwandte Themen: Java, JavaScript, PHP, Python (Antworten beinhalten subjektive Beurteilung)

Rang text-einbettung-3-klein text-einbettung-3-groß
1 ✅ PHP ✅ JavaScript
2 ✅ Java ✅ Java
3 ✅ JavaScript ✅ PHP
4 ❎ C# ✅Python
Präzision 0.75 1.0
Rückruf 0.75 1.0

Bei diesen beiden Abfragen haben wir die beiden Einbettungsmodelle anhand der Genauigkeit und der Wiedererkennung verglichen text-einbettung-3-klein im Gesang antworten text-einbettung-3-groß Das Embedding-Modell kann als Ausgangspunkt verwendet werden. Wir können dies als Ausgangspunkt nutzen, um die Anzahl der Datenobjekte im Datensatz sowie die Anzahl der Abfragen zu erhöhen, damit das Embedding-Modell effektiver evaluiert werden kann.

 

04. Zusammenfassung

Bei Retrieval Augmented Generation (RAG)-Anwendungen ist die Auswahl geeigneter Vektoreinbettungsmodelle entscheidend. In diesem Beitrag wird gezeigt, dass nach der Auswahl eines generischen Modells aus MTEB anhand der tatsächlichen Geschäftsanforderungen die Genauigkeit und der Abruf zum Testen des Modells auf der Grundlage eines geschäftsspezifischen Datensatzes verwendet werden, um das am besten geeignete Einbettungsmodell auszuwählen, was wiederum die Abrufgenauigkeit der RAG-Anwendung effektiv verbessert.

Der vollständige Code ist als Download verfügbar

Verwandte Dokumente Download-Adresse
© Download-Ressourcen Urheberrecht gehört dem Autor; alle Ressourcen auf dieser Website sind aus dem Netz, nur für Lernzwecke, bitte unterstützen Sie die ursprüngliche Version!
Darf nicht ohne Genehmigung vervielfältigt werden:Chef-KI-Austauschkreis " Wie man das beste Einbettungsmodell für RAG-Anwendungen auswählt

Chef-KI-Austauschkreis

Der Chief AI Sharing Circle konzentriert sich auf das KI-Lernen und bietet umfassende KI-Lerninhalte, KI-Tools und praktische Anleitungen. Unser Ziel ist es, den Nutzern dabei zu helfen, die KI-Technologie zu beherrschen und gemeinsam das unbegrenzte Potenzial der KI durch hochwertige Inhalte und den Austausch praktischer Erfahrungen zu erkunden. Egal, ob Sie ein KI-Anfänger oder ein erfahrener Experte sind, dies ist der ideale Ort für Sie, um Wissen zu erwerben, Ihre Fähigkeiten zu verbessern und Innovationen zu verwirklichen.

Kontaktieren Sie uns
de_DE_formalDeutsch (Sie)