Die Anwendungen großer Sprachmodelle haben in verschiedenen Bereichen einen Wandel bewirkt und eine neue Grenze in der Verarbeitung und dem Verständnis natürlicher Sprache geschaffen. LLMs, die dafür bekannt sind, menschenähnliche Texte zu generieren, haben Chatbots, die Erstellung von Inhalten und sogar komplexe Problemlösungsaufgaben revolutioniert.
Trotz ihrer beeindruckenden Fähigkeiten stehen LLMs jedoch vor erheblichen Herausforderungen, insbesondere im Hinblick auf die Kontexterkennung und die Aufrechterhaltung der Genauigkeit bei längeren Interaktionen. Eine häufige Gefahr ist ihre Neigung zu „ Halluzinationen “, bei denen der generierte Inhalt, obwohl er flüssig ist, in die Ungenauigkeit oder Irrelevanz abdriften kann.
Hier spielen Technologien wie Retrieval-Augmented Generation (RAG) und Vektordatenbanken eine entscheidende Rolle. Durch die Integration von LLMs mit RAG, das relevante Informationen dynamisch aus riesigen Datensätzen abruft, können wir diese Einschränkungen deutlich abmildern. Die Synergie zwischen LLMs und Vektordatenbanken, die strukturierte Vektordaten effizient verarbeiten und abrufen können, verspricht, LLM-Anwendungen ein neues Maß an Tiefe, Kontext und Zuverlässigkeit zu verleihen.
In diesem Blog erwartet die Leser:
Retrieval-Augmented Generation (RAG) ist ein innovatives Paradigma im Bereich der KI und der Verarbeitung natürlicher Sprache. Durch die Integration des Informationsabrufs in den Sprachgenerierungsprozess stellt es einen bedeutenden Wandel gegenüber herkömmlichen Sprachmodellen dar. Dieser hybride Ansatz verbessert die Fähigkeit von KI-Modellen, Antworten zu generieren, die nicht nur kontextgenau sind, sondern auch mit aktuellem Wissen aus externen Datenquellen angereichert sind.
Die Entstehung von RAG lässt sich auf das Bestreben zurückführen, die Einschränkungen von Standardsprachmodellen wie GPT (Generative Pre-trained Transformer) zu überwinden. Herkömmliche Modelle haben trotz ihrer Fähigkeit, kohärenten Text zu generieren, oft Schwierigkeiten, genaue, faktenbasierte Antworten zu liefern, insbesondere bei Fragen, die spezifisches Echtzeitwissen erfordern.
Hier finden Sie eine Beschreibung der Funktionsweise von Retrieval-Augmented Generation (RAG) mit Integration in eine Vektordatenbank:
Aufnahme und Indizierung : Der Workflow beginnt mit einer umfassenden Wissensdatenbank , die die Grundlage für die Intelligenz des Systems bildet. Bei dieser Wissensdatenbank handelt es sich in der Regel um einen großen Dokumentenkorpus, der die Informationen enthält, die von Benutzern abgefragt werden können. Diese Dokumente können alles sein, von FAQ-Blättern und Artikeln bis hin zu Datenbanken mit strukturierten Informationen. Bevor diese Dokumente verwendet werden können, durchlaufen sie einen Aufnahmeprozess, bei dem sie vorverarbeitet und in Einbettungen umgewandelt werden. Ein Einbettungsmodell – häufig ein hochentwickelter Algorithmus für maschinelles Lernen – wird verwendet, um die Textinformationen in Vektoreinbettungen umzuwandeln. Diese Einbettungen repräsentieren numerisch den semantischen Inhalt der Dokumente in einem mehrdimensionalen Raum, der für Ähnlichkeitsvergleiche optimal ist.
Kundeninteraktion : Alles beginnt damit, dass ein Kunde mit einer Anwendung interagiert und eine Anfrage stellt. Bei dieser Abfrage handelt es sich um eine Informationsanfrage oder eine Frage, deren Beantwortung der Kunde von der KI erwartet.
Abfrageeinbettung : Die Rohkundenanfrage wird dann von einem Einbettungsmodell verarbeitet. Dieses Modell wandelt die Textabfrage in einen Vektor um, bei dem es sich um eine numerische Darstellung handelt, die die semantische Bedeutung der Abfrage in einem hochdimensionalen Raum erfasst.
Vektordatenbanksuche : Der Abfragevektor wird an eine Vektordatenbank gesendet, eine spezielle Datenbank zur Verarbeitung hochdimensionaler Vektordaten. Die Datenbank führt eine Ähnlichkeitssuche durch, um die relevantesten Dokumenteinbettungen abzurufen. Diese Einbettungen stellen vorverarbeitetes Wissen aus einer Wissensdatenbank dar, das in das System aufgenommen wurde.
Kontextabfrage : Die abgerufenen Dokumenteinbettungen werden mit der ursprünglichen Abfrage kombiniert, um eine Eingabeaufforderung zu bilden, die sowohl die Abfrage als auch den relevanten Kontext enthält.
Sprachmodell-Antwortgenerierung : Diese angereicherte Eingabeaufforderung wird dann in ein Sprachlernmodell (Language Learning Model, LLM) eingespeist. Das LLM nutzt den Kontext der abgerufenen Dokumente, um eine Antwort zu generieren, die genau, informativ und kontextuell für die Anfrage des Kunden relevant ist.
Generative Antwort : Schließlich erzeugt das LLM eine generative Antwort, die über die App an den Kunden zurückgesendet wird. Diese Antwort basiert nicht nur auf dem vorab trainierten Wissen des Modells, sondern wird auch durch spezifische Informationen aus der Wissensdatenbank ergänzt, wodurch sie für die Anfrage des Benutzers von hoher Relevanz ist.
Vektordatenbanken speichern und verwalten Daten, die in numerische Vektorform umgewandelt wurden, häufig durch Prozesse wie das Einbetten von Modellen in maschinelles Lernen. Einbettungen sind numerische Darstellungen von Daten, oft hochdimensionale Vektoren, die die semantischen oder kontextuellen Merkmale der ursprünglichen Eingabe erfassen. Bei Textdaten werden durch Einbettungen Wörter, Sätze oder ganze Dokumente in eine Form umgewandelt, die ein Computer verarbeiten kann. Zur Generierung dieser Einbettungen werden maschinelle Lernmodelle, insbesondere neuronale Netze, verwendet, sodass ähnliche Bedeutungen im Vektorraum nahe beieinander liegen. Diese Datenbanken sind für die effiziente Durchführung von Ähnlichkeitssuchen konzipiert, bei denen Datenpunkte gefunden werden, die einem bestimmten Abfragevektor im Vektorraum am nächsten liegen.
Hier ist ein tieferer Einblick in den Prozess:
Datenspeicherung : Wenn Dokumente erfasst werden, wandelt ein Einbettungsmodell (z. B. ein neuronales Netzwerk) den Text in einen hochdimensionalen Vektor um. Jeder Vektor repräsentiert die semantische Bedeutung des Dokuments in numerischer Form. Diese Vektoren werden dann in der Vektordatenbank gespeichert.
Indizierung : Um einen schnellen Abruf zu ermöglichen, erstellt die Datenbank einen Index für diese Vektoren mithilfe von Algorithmen, die für hochdimensionale Räume geeignet sind, wie z. B. Inverted File Index (IVF) oder Hierarchical Navigable Small World (HNSW). Die Wahl des Indextyps sorgt für ein ausgewogenes Verhältnis zwischen Geschwindigkeit und Genauigkeit der Suche.
Ähnlichkeitssuche : Wenn eine Abfrage durchgeführt wird, wird diese mithilfe desselben Einbettungsmodells auch in einen Vektor umgewandelt. Die Vektordatenbank verwendet dann den Index, um schnell die Vektoren zu finden, die dem Abfragevektor am ähnlichsten sind. Die Ähnlichkeit wird durch Distanzmetriken wie die euklidische Distanz oder die Kosinusähnlichkeit bestimmt.
Vorteile von Einbettungen :
Semantische Ähnlichkeit : Einbettungen sind so konzipiert, dass semantisch ähnliche Elemente im Vektorraum näher beieinander liegen, sodass Systeme den Kontext und die Bedeutung verstehen können. Beispielsweise können im Bereich der Genomik Genexpressionsdaten als Einbettungen kodiert werden, um Muster aufzudecken, die auf Beziehungen zwischen verschiedenen Genen und Phänotypen hinweisen. Dies kann bei der Identifizierung von Biomarkern für Krankheiten hilfreich sein, die durch herkömmliche Analysen möglicherweise nicht erkennbar sind.
Komplexe Beziehungen : Sie können komplexe Beziehungen und Nuancen in den Daten erfassen, die bei herkömmlichen Darstellungen möglicherweise übersehen werden. Eine praktische Anwendung sehen Empfehlungssysteme, wie sie etwa bei Streaming-Diensten wie Netflix oder Spotify zum Einsatz kommen. Diese Plattformen nutzen Einbettungen, um Benutzerpräferenzen und Inhaltsfunktionen zu verstehen und so Filme oder Songs zu empfehlen, die Ähnlichkeiten mit den vorherigen Entscheidungen eines Benutzers aufweisen. Trotz der Vielfalt der Inhalte ermöglichen Einbettungen differenzierte Empfehlungen, die über Genre oder Künstler hinausgehen und tiefer liegende Muster im Nutzerkonsum berücksichtigen.
Einheitlichkeit : Einbettungen konvertieren unterschiedliche Datentypen in ein einheitliches Vektorformat und vereinfachen so Vorgänge wie Vergleich und Abruf.
Die Erstellung einer lokalen Entwicklungsumgebung für RAG und Vector DB ( Milvus ) umfasst mehrere wichtige Schritte.
Hier ist eine strukturierte Anleitung:
Voraussetzungen :
Stellen Sie sicher, dass Python 3.6+ auf Ihrem System installiert ist.
Zum Ausführen von Milvus ist Docker erforderlich.
Virtuelle Umgebung :
Erstellen Sie eine neue virtuelle Umgebung und nutzen Sie diese:
python3 -m venv rag-milvus-env source rag-milvus-env/bin/activate # Install supporting dependencies pip install transformers datasets faiss-cpu torch sentence-transformers pymilvus
Milvus mit Docker :
Rufen Sie das Milvus Docker-Image ab und führen Sie es aus: (Sie können auch andere Vektor-Datenbanken verwenden)
Sie können die folgenden Schritte ausführen oder der hier bereitgestellten Anleitung für die ersten Schritte folgen.
docker pull milvusdb/milvus:latest docker run -d --name milvus_cpu -p 19530:19530 -p 19121:19121 milvusdb/milvus:latest
Setup-Daten :
Versuchen wir nun, einige Beispieldaten herunterzuladen, Einbettungen zu erstellen und sie in eine Sammlung einzufügen.
import requests import csv url = "http://qim.fs.quoracdn.net/quora_duplicate_questions.tsv" # Download the file response = requests.get(url) response.raise_for_status() # This will raise an error if the download failed # Decode the content and split into lines lines = response.content.decode('utf-8').splitlines() questions = [] # Process the lines reader = csv.reader(lines, delimiter='\t') next(reader) # Skip the header row for row in reader: questions.extend([row[1], row[4]]) # Assuming the questions are in the 2nd and 3rd columns questions = questions[:10000]
Einbettungen erstellen
from sentence_transformers import SentenceTransformer # transformer to create embeddings model = SentenceTransformer('all-MiniLM-L6-v2') embeddings = model.encode(questions)
In Vektor-DB einfügen.
# connect to db connections.connect() embedding_size = 384 # Prepare the collection schema fields = [ FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True), FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=embedding_size) ] schema = CollectionSchema(fields, "questions") collection = Collection("questions", schema) # Insert the document embeddings mr = collection.insert([embeddings]) # to get document, in practice this would be some external DB. id_to_question = {str(mr.primary_keys[i]): questions[i] for i in range(len(questions))} # List all collections collections = list_collections() print(collections)
Indizieren Sie die Sammlung.
from pymilvus import Collection index_params = { "metric_type": "L2", "index_type": "HNSW", # Index of type HNSW, refer to docs for other types. "params": { "M": 16, # Example value, adjust as needed "efConstruction": 200 } } collection = Collection("questions") collection.create_index( field_name="embedding", index_params=index_params )
Dokumente abfragen
query = "What is artificial intelligence?" query_embedding = model.encode(query) collection.load() # Define search parameters search_params = {"metric_type": "L2", "params": {"nprobe": 10}} # Perform the search results = collection.search( data=[query_vector], anns_field="embedding", param=search_params, limit=10, expr=None, consistency_level="Strong" ) # Process results for result in results: milvus_id = str(result.id) # Convert ID to string for dictionary lookup original_question = id_to_question[milvus_id] print(f"Milvus ID: {milvus_id}, Similar Question: {original_question}")
Sobald wir semantisch ähnliche Dokumente von der Vektordatenbank erhalten, können wir diese Kontext- und Eingabeabfrage an LLMs übergeben, was zu viel besseren Ergebnissen führt, da LLMs jetzt über Kontext verfügen.
Zusammenfassend lässt sich sagen, dass die Integration von RAG mit Vektordatenbanken wie Milvus eine wirksame Lösung für einige der dringendsten Herausforderungen bei LLM-Anwendungen bietet – insbesondere solche, die ein tiefes Kontextverständnis und einen dynamischen Informationsabruf erfordern. Durch die Kombination der generativen Fähigkeiten von LLMs mit der Präzision und Effizienz von Vektordatenbanken können Unternehmen die Relevanz und Genauigkeit von KI-gesteuerten Antworten erheblich verbessern und Benutzern wertvolle und kontextbezogene Interaktionen bieten.
Während die KI immer weiter voranschreitet, stellt die Verschmelzung dieser Technologien nicht nur einen Schritt, sondern einen Sprung nach vorne dar und läutet eine Zukunft ein, in der KI anspruchsvollere, vielfältigere und differenziertere Anwendungen in allen Sektoren unterstützen kann. Dieser Blog bietet Innovatoren und Praktikern die Möglichkeit, mit diesen Tools zu experimentieren und die Grenzen dessen zu erweitern, was im Bereich der KI-Anwendungen für Unternehmen möglich ist.