Vektordatenbanken in KI- und LLM-Anwendungsfällen – KDnuggets

Vektordatenbanken in KI- und LLM-Anwendungsfällen – KDnuggets

Quellknoten: 2551895

Vektordatenbanken in KI- und LLM-Anwendungsfällen
Bild erzeugt mit Ideogram.ai
 

Vielleicht hören Sie alle diese Vektordatenbank-Begriffe. Manche verstehen es vielleicht, andere vielleicht nicht. Machen Sie sich keine Sorgen, wenn Sie nichts davon wissen, denn Vektordatenbanken sind erst in den letzten Jahren zu einem immer wichtigeren Thema geworden.

Vektordatenbanken erfreuen sich dank der Einführung der generativen KI in der Öffentlichkeit, insbesondere im LLM, zunehmender Beliebtheit. 

Viele LLM-Produkte wie GPT-4 und Gemini unterstützen unsere Arbeit, indem sie Textgenerierungsfunktionen für unsere Eingaben bereitstellen. Nun, Vektordatenbanken spielen in diesen LLM-Produkten tatsächlich eine Rolle.

Aber wie funktionierte Vector Database? Und welche Relevanz haben sie im LLM? 

Die obige Frage möchten wir in diesem Artikel beantworten. Nun, lassen Sie uns sie gemeinsam erkunden.

Eine Vektordatenbank ist ein spezieller Datenbankspeicher zum Speichern, Indizieren und Abfragen von Vektordaten. Es ist oft für hochdimensionale Vektordaten optimiert, da es normalerweise die Ausgabe für das maschinelle Lernmodell, insbesondere LLM, ist.

Im Kontext einer Vektordatenbank ist der Vektor eine mathematische Darstellung der Daten. Jeder Vektor besteht aus einer Reihe numerischer Punkte, die die Datenposition darstellen. Vektoren werden im LLM häufig zur Darstellung von Textdaten verwendet, da Vektoren einfacher zu verarbeiten sind als Textdaten.

Im LLM-Bereich verfügt das Modell möglicherweise über eine Texteingabe und könnte den Text in einen hochdimensionalen Vektor umwandeln, der die semantischen und syntaktischen Eigenschaften des Textes darstellt. Diesen Vorgang nennen wir Einbettung. Einfacher ausgedrückt ist das Einbetten ein Prozess, der Text in Vektoren mit numerischen Daten umwandelt.

Beim Einbetten wird im Allgemeinen ein neuronales Netzwerkmodell namens Einbettungsmodell verwendet, um den Text im Einbettungsraum darzustellen. 

Nehmen wir einen Beispieltext: „I Love Data Science“. Ihre Darstellung mit dem OpenAI-Modell text-embedding-3-small würde einen Vektor mit 1536 Dimensionen ergeben.

[0.024739108979701996, -0.04105354845523834, 0.006121257785707712, -0.02210472710430622, 0.029098540544509888,...]

 

Die Zahl innerhalb des Vektors ist die Koordinate innerhalb des Einbettungsraums des Modells. Zusammen würden sie eine einzigartige Darstellung der aus dem Modell stammenden Satzbedeutung bilden.

Die Vektordatenbank wäre dann für die Speicherung dieser Einbettungsmodellausgaben verantwortlich. Der Benutzer kann den Vektor dann nach Bedarf abfragen, indizieren und abrufen.

Vielleicht ist das ja genug Einführung, und lasst uns zu einer technischeren Praxis übergehen. Wir würden versuchen, Vektoren mit einer Open-Source-Vektordatenbank namens zu erstellen und zu speichern Weben

Weaviate ist eine skalierbare Open-Source-Vektordatenbank, die als Framework zum Speichern unseres Vektors dient. Wir können Weaviate in Instanzen wie Docker ausführen oder Weaviate Cloud Services (WCS) nutzen. 

Um Weaviate nutzen zu können, müssen wir die Pakete mit dem folgenden Code installieren:

pip install weaviate-client

 

Zur Vereinfachung würden wir einen Sandbox-Cluster von WCS als Vektordatenbank verwenden. Weaviate stellt einen 14-tägigen kostenlosen Cluster zur Verfügung, mit dem wir unsere Vektoren speichern können, ohne eine Zahlungsmethode zu registrieren. Dazu müssen Sie sich dort registrieren WCS-Konsole anfänglich.

Sobald Sie sich auf der WCS-Plattform befinden, wählen Sie „Cluster erstellen“ und geben Sie Ihren Sandbox-Namen ein. Die Benutzeroberfläche sollte wie im Bild unten aussehen.
 

Vektordatenbanken in KI- und LLM-Anwendungsfällen
Bild vom Autor
 

Vergessen Sie nicht, die Authentifizierung zu aktivieren, da wir auch über den WCS-API-Schlüssel auf diesen Cluster zugreifen möchten. Nachdem der Cluster bereit ist, suchen Sie den API-Schlüssel und die Cluster-URL, die wir für den Zugriff auf die Vector-Datenbank verwenden.

Sobald die Dinge fertig sind, simulieren wir die Speicherung unseres ersten Vektors in der Vektordatenbank.

Für das Speicherbeispiel der Vektordatenbank würde ich die verwenden Büchersammlung Beispieldatensatz von Kaggle. Ich würde nur die obersten 100 Zeilen und 3 Spalten (Titel, Beschreibung, Einleitung) verwenden.

import pandas as pd
data = pd.read_csv('commonlit_texts.csv', nrows = 100, usecols=['title', 'description', 'intro'])

 

Legen wir unsere Daten beiseite und stellen eine Verbindung zu unserer Vektordatenbank her. Zuerst müssen wir mithilfe des API-Schlüssels und Ihrer Cluster-URL eine Remote-Verbindung einrichten.

import weaviate
import os
import requests
import json


cluster_url = "Your Cluster URL"
wcs_api_key = "Your WCS API Key"
Openai_api_key ="Your OpenAI API Key"

client = weaviate.connect_to_wcs(
    cluster_url=cluster_url,
    auth_credentials=weaviate.auth.AuthApiKey(wcs_api_key),
    headers={
        "X-OpenAI-Api-Key": openai_api_key
    }
)

 

Sobald Sie Ihre Client-Variable eingerichtet haben, stellen wir eine Verbindung zum Weaviate Cloud Service her und erstellen eine Klasse zum Speichern des Vektors. Klasse in Weaviate ist die Datensammlung oder Analogie zum Tabellennamen in einer relationalen Datenbank.

import weaviate.classes as wvc

client.connect()
book_collection = client.collections.create(
    name="BookCollection",
    vectorizer_config=wvc.config.Configure.Vectorizer.text2vec_openai(),  
    generative_config=wvc.config.Configure.Generative.openai()  
)

 

Im obigen Code stellen wir eine Verbindung zum Weaviate-Cluster her und erstellen eine BookCollection-Klasse. Das Klassenobjekt verwendet außerdem das OpenAI-Einbettungsmodell text2vec, um die Textdaten und das generative OpenAI-Modul zu vektorisieren. 

Versuchen wir, die Textdaten in einer Vektordatenbank zu speichern. Dazu können Sie den folgenden Code verwenden.

sent_to_vdb = data.to_dict(orient='records')
book_collection.data.insert_many(sent_to_vdb)

 

Vektordatenbanken in KI- und LLM-Anwendungsfällen
Bild vom Autor
 

Wir haben unseren Datensatz gerade erfolgreich in der Vector-Datenbank gespeichert! Wie einfach ist das? 

Nun sind Sie vielleicht neugierig auf die Anwendungsfälle für die Verwendung von Vektordatenbanken mit LLM. Das werden wir als nächstes besprechen.

Einige Anwendungsfälle, in denen LLM mit Vector Database angewendet werden kann. Lassen Sie uns sie gemeinsam erkunden.

Semantische Suche

Bei der semantischen Suche handelt es sich um einen Prozess der Suche nach Daten, bei dem die Bedeutung der Abfrage genutzt wird, um relevante Ergebnisse abzurufen, anstatt sich ausschließlich auf die herkömmliche schlüsselwortbasierte Suche zu verlassen.

Der Prozess umfasst die Nutzung des LLM-Modells zur Einbettung der Abfrage und die Durchführung einer Einbettungs-Ähnlichkeitssuche in unserem in der Vektordatenbank eingebetteten Speicher. 

Versuchen wir, Weaviate zu verwenden, um eine semantische Suche basierend auf einer bestimmten Abfrage durchzuführen. 

book_collection = client.collections.get("BookCollection")

client.connect()
response = book_collection.query.near_text(
      query="childhood story,
      limit=2
  )

 

Im obigen Code versuchen wir, eine semantische Suche mit Weaviate durchzuführen, um die beiden Bücher zu finden, die am ehesten mit der gesuchten Kindheitsgeschichte in Zusammenhang stehen. Die semantische Suche verwendet das zuvor eingerichtete OpenAI-Einbettungsmodell. Das Ergebnis können Sie unten sehen.

{'title': 'Act Your Age', 'description': 'A young girl is told over and over again to act her age.', 'intro': 'Colleen Archer has written for nHighlightsn. In this short story, a young girl is told over and over again to act her age.nAs you read, take notes on what Frances is doing when she is told to act her age. '}

{'title': 'The Anklet', 'description': 'A young woman must deal with unkind and spiteful treatment from her two older sisters.', 'intro': "Neil Philip is a writer and poet who has retold the best-known stories from nThe Arabian Nightsn for a modern day audience. nThe Arabian Nightsn is the English-language nickname frequently given to nOne Thousand and One Arabian Nightsn, a collection of folk tales written and collected in the Middle East during the Islamic Golden Age of the 8th to 13th centuries. In this tale, a poor young woman must deal with mistreatment by members of her own family.nAs you read, take notes on the youngest sister's actions and feelings."}

 

Wie Sie sehen, sind im obigen Ergebnis keine direkten Worte zu Kindheitsgeschichten enthalten. Das Ergebnis ist jedoch immer noch eng mit einer Geschichte verbunden, die sich an Kinder richtet.

Generative Suche

Die Generative Suche könnte als Erweiterungsanwendung für die Semantische Suche definiert werden. Die generative Suche oder Retrieval Augmented Generation (RAG) nutzt die LLM-Eingabeaufforderung mit der semantischen Suche, die Daten aus der Vektordatenbank abruft.

Mit RAG wird das Ergebnis der Abfragesuche an LLM verarbeitet, sodass wir sie in der gewünschten Form anstelle der Rohdaten erhalten. Versuchen wir eine einfache Implementierung des RAG mit Vector Database.

response = book_collection.generate.near_text(
    query="childhood story",
    limit=2,
    grouped_task="Write a short LinkedIn post about these books."
)

print(response.generated)

 

Das Ergebnis ist im folgenden Text zu sehen.

Excited to share two captivating short stories that explore themes of age and mistreatment. "Act Your Age" by Colleen Archer follows a young girl who is constantly told to act her age, while "The Anklet" by Neil Philip delves into the unkind treatment faced by a young woman from her older sisters. These thought-provoking tales will leave you reflecting on societal expectations and family dynamics. #ShortStories #Literature #BookRecommendations 📚

 

Wie Sie sehen, ist der Dateninhalt derselbe wie zuvor, wurde jedoch jetzt mit OpenAI LLM verarbeitet, um einen kurzen LinkedIn-Beitrag bereitzustellen. Auf diese Weise ist RAG nützlich, wenn wir die Daten in einer bestimmten Form ausgeben möchten.

Beantwortung von Fragen mit RAG

In unserem vorherigen Beispiel haben wir eine Abfrage verwendet, um die gewünschten Daten abzurufen, und RAG hat diese Daten in die beabsichtigte Ausgabe verarbeitet.

Wir können die RAG-Funktion jedoch in ein Frage-Antwort-Tool verwandeln. Dies können wir erreichen, indem wir sie mit dem LangChain-Framework kombinieren.

Lassen Sie uns zunächst die erforderlichen Pakete installieren.

pip install langchain 
pip install langchain_community 
pip install langchain_openai

 

Versuchen wir dann, die Pakete zu importieren und die Variablen zu initiieren, die wir benötigen, damit die Qualitätssicherung mit RAG funktioniert.

from langchain.chains import RetrievalQA
from langchain_community.vectorstores import Weaviate
import weaviate
from langchain_openai import OpenAIEmbeddings
from langchain_openai.llms.base import OpenAI

llm = OpenAI(openai_api_key = openai_api_key, model_name = 'gpt-3.5-turbo-instruct', temperature = 1)

embeddings = OpenAIEmbeddings(openai_api_key = openai_api_key )

client = weaviate.Client(
    url=cluster_url, auth_client_secret=weaviate.AuthApiKey(wcs_api_key)
)

 

Im obigen Code richten wir das LLM für die Textgenerierung, das Einbettungsmodell und die Weaviate-Client-Verbindung ein. 

Als nächstes stellen wir die Weaviate-Verbindung zur Vector-Datenbank ein.

weaviate_vectorstore = Weaviate(client=client, index_name='BookCollection', text_key='intro',by_text = False, embedding=embeddings)
retriever = weaviate_vectorstore.as_retriever()

 

Machen Sie im obigen Code die Weaviate Database BookCollection zum RAG-Tool, das bei Aufforderung die „Intro“-Funktion durchsucht.

Dann würden wir mit dem folgenden Code eine Frage-Antwort-Kette aus der LangChain erstellen.

qa_chain = RetrievalQA.from_chain_type(
    llm=llm, chain_type="stuff", retriever = retriever
)

 

Jetzt ist alles fertig. Probieren wir die Qualitätssicherung mit RAG anhand des folgenden Codebeispiels aus.

response = qa_chain.invoke(
    "Who is the writer who write about love between two goldfish?")
print(response)

 

Das Ergebnis ist im folgenden Text dargestellt.

{'query': 'Who is the writer who write about love between two goldfish?', 'result': ' The writer is Grace Chua.'}

 

Mit der Vector-Datenbank als Ort zum Speichern aller Textdaten können wir RAG implementieren, um eine Qualitätssicherung mit LangChain durchzuführen. Wie ordentlich ist das?

Eine Vektordatenbank ist eine spezielle Speicherlösung zum Speichern, Indizieren und Abfragen von Vektordaten. Es wird häufig zum Speichern von Textdaten verwendet und in Verbindung mit Large Language Models (LLMs) implementiert. In diesem Artikel wird eine praktische Einrichtung der Vector Database Weaviate versucht, einschließlich Beispielanwendungsfällen wie semantischer Suche, Retrieval-Augmented Generation (RAG) und Fragebeantwortung mit RAG.
 
 

Cornellius Yudha Wijaya ist stellvertretender Manager und Datenautor im Bereich Data Science. Während er Vollzeit bei Allianz Indonesia arbeitet, teilt er gerne Python- und Datentipps über soziale Medien und Schreibmedien. Cornellius schreibt über eine Vielzahl von Themen zu KI und maschinellem Lernen.

Zeitstempel:

Mehr von KDnuggets