Wie verwende ich Parent Document Retriever in LangChain?

Wie Verwende Ich Parent Document Retriever In Langchain



Das LangChain-Framework ermöglicht es den Entwicklern, große Sprachmodelle zu erstellen, die Texte in natürlicher Sprache verstehen und generieren können. Die LangChain-Modelle werden auf einer riesigen Datenmenge trainiert, sodass das Modell die Sprache verstehen kann, indem es die Daten in Vektorspeichern speichert. Es ermöglicht dem Benutzer außerdem, Retriever zu erstellen, die Daten aus der Datenbank oder Vektorspeichern mit allen für das Modell gespeicherten Daten extrahieren können.

In diesem Beitrag wird der Prozess der Verwendung des übergeordneten Dokument-Retrievers in LangChain demonstriert.

Wie verwende ich einen Parent Document Retriever in LangChain?

Der übergeordnete Dokument-Retriever in LangChain kann verwendet werden, indem die Dokumente in kleinere Teile aufgeteilt werden, damit sie beim Einbetten nicht ihre Bedeutung verlieren. Man kann sagen, dass das übergeordnete Dokument das gesamte Dokument ist oder der größere Teil, aus dem die kleineren Teile extrahiert werden.







Um den Prozess der Verwendung des übergeordneten Dokument-Retrievers in LangChain zu erfahren, schauen Sie sich einfach diese Anleitung an:



Schritt 1: Module installieren



Beginnen Sie zunächst mit der Verwendung des übergeordneten Dokument-Retrievers, indem Sie das LangChain-Framework mit dem Befehl pip installieren:





pip langchain installieren

Installieren Sie das Chroma-Datenbankmodul, um die Einbettungen des Dokuments zu speichern und Daten daraus abzurufen:



pip chromadb installieren

So installieren Sie tiktoken, einen Tokenizer, der die Token des Dokuments durch die Erstellung kleiner Blöcke erhält:

pip tiktoken installieren

Rufen Sie das OpenAI-Modul ab, indem Sie den folgenden Befehl auf dem Python-Notebook ausführen, um seine Abhängigkeiten und Bibliotheken abzurufen:

pip openai installieren

Schritt 2: Umgebung einrichten und Daten hochladen

Der nächste Schritt besteht darin Umgebung einrichten Verwenden des API-Schlüssels vom OpenAI-Konto:

importieren Du
importieren getpass

Du . etwa [ „OPENAI_API_KEY“ ] = getpass . getpass ( „OpenAI-API-Schlüssel:“ )

Laden Sie nun die Dokumente vom lokalen System hoch, nachdem Sie die Dateibibliothek importiert haben, und rufen Sie dann die Methode upload() auf:

aus Google. ET AL importieren Dateien
hochgeladen = Dateien. hochladen ( )

Schritt 3: Bibliotheken importieren

Der nächste Schritt enthält den Code zum Importieren der erforderlichen Bibliotheken für die Verwendung der übergeordneten Dokument-Retriever mithilfe des LangChain-Frameworks:

aus langchain. Retriever importieren ParentDocumentRetriever
aus langchain. Vektorstores importieren Chroma
aus langchain. Einbettungen importieren OpenAIEmbeddings
aus langchain. text_splitter importieren RekursiverCharacterTextSplitter
aus langchain. Lagerung importieren InMemoryStore
aus langchain. document_loaders importieren TextLoader

Laden Sie das Dokument zum Erstellen des Retrievers mithilfe der TextLoader()-Methoden mit dem Pfad der Dateien:

Lader = [
TextLoader ( 'Daten.txt' ) ,
TextLoader ( 'state_of_the_union.txt' ) ,
]
Dokumente = [ ]
für l In Lader:

Schritt 4: Vollständige Dokumente abrufen

Sobald die Dokumente/Dateien in das Modell geladen sind, erstellen Sie einfach die Einbettungen der Dokumente und speichern Sie sie in den Vektorspeichern:

child_splitter = RekursiverCharacterTextSplitter ( chunk_size = 400 )

vectorstore = Chroma (
Sammlungsname = „full_documents“ ,
Einbettungsfunktion = OpenAIEmbeddings ( )
)

speichern = InMemoryStore ( )
Retriever = ParentDocumentRetriever (
vectorstore = vectorstore ,
docstore = speichern ,
child_splitter = child_splitter ,
)

Rufen Sie nun die Methode add_documents() mit dem Retriever auf, um den Retriever zu den Dokumenten zu bringen:

Retriever. add_documents ( Dokumente , Ausweise = Keiner )

Der folgende Code extrahiert die Einbettungen der Dokumente, die in der Datenbank für die hochgeladenen Dateien gespeichert wurden:

Liste ( speichern. yield_keys ( ) )

Nachdem Sie die Einbettungen der Dokumente erhalten haben, rufen Sie die Methode „similarity_search()“ mit der Abfrage auf, um die kleinen Teile aus dem Dokument abzurufen:

sub_docs = vectorstore. Ähnlichkeitssuche ( „Justice Breyer“ )

Rufen Sie die Methode print() auf, um die im vorherigen Code aufgerufenen Blöcke basierend auf der Abfrage anzuzeigen:

drucken ( sub_docs [ 0 ] . Seiteninhalt )

Rufen Sie die Funktion „complete the Retriever()“ auf, um alle in der Datenbank gespeicherten Token mithilfe des folgenden Codes abzurufen:

abgerufene_Dokumente = Retriever. get_relevante_dokumente ( „Justice Breyer“ )

Das Drucken aller Dokumente würde viel Zeit und Rechenleistung in Anspruch nehmen. Ermitteln Sie daher einfach die Länge der zuvor abgerufenen Dokumente:

nur ( abgerufene_Dokumente [ 0 ] . Seiteninhalt )

Schritt 5: Größere Stücke abrufen

Bei diesem Schritt wird nicht das gesamte Dokument beansprucht. Es würde jedoch einen größeren Streifenhörnchen aus dem Dokument nehmen und einen kleineren Teil davon abrufen:

parent_splitter = RekursiverCharacterTextSplitter ( chunk_size = 2000 )
child_splitter = RekursiverCharacterTextSplitter ( chunk_size = 400 )
vectorstore = Chroma ( Sammlungsname = „split_parents“ , Einbettungsfunktion = OpenAIEmbeddings ( ) )
speichern = InMemoryStore ( )

Konfigurieren Sie den Retriever so, dass er das kleinere Token aus dem riesigen Datenpool erhält, der im „ vectorstore ” Variable:

Retriever = ParentDocumentRetriever (
vectorstore = vectorstore ,
docstore = speichern ,
child_splitter = child_splitter ,
parent_splitter = parent_splitter ,
)

Rufen Sie den Retriever auf, um mithilfe von die größeren Blöcke aus den Vektorspeichern abzurufen Dokumente Variable im Argument der Funktion:

Retriever. add_documents ( Dokumente )

Ermitteln Sie die Länge dieser Dokumente aus der Dokumente Variable über den folgenden Befehl:

nur ( Liste ( speichern. yield_keys ( ) ) )

Holen Sie sich einfach einen kleineren Teil von einem größeren, da der vorherige Screenshot zeigt, dass im Vektorspeicher 23 Dokumente gespeichert sind. Die Abfrage wird verwendet, um die relevanten Daten mithilfe der abzurufen Ähnlichkeitssuche() Methode zum Abrufen von Daten aus dem Vektorspeicher:

sub_docs = vectorstore. Ähnlichkeitssuche ( „Justice Breyer“ )

Drucken Sie die kleineren Blöcke mit der im vorherigen Code erwähnten Abfrage aus, um sie auf dem Bildschirm anzuzeigen:

drucken ( sub_docs [ 0 ] . Seiteninhalt )

Verwenden Sie nun den Retriever für den gesamten in der Datenbank gespeicherten Datensatz und verwenden Sie dabei die Abfrage als Argument der Funktion:

abgerufene_Dokumente = Retriever. get_relevante_dokumente ( „Justice Breyer“ )

Ermitteln Sie die Länge der kompletten erstellten und in der Datenbank gespeicherten Blöcke:

nur ( abgerufene_Dokumente [ 0 ] . Seiteninhalt )

Wir können nicht alle Chunks anzeigen, aber der erste Chunk mit der Indexnummer 0 wird mit dem folgenden Code angezeigt:

drucken ( abgerufene_Dokumente [ 0 ] . Seiteninhalt

Das ist alles über den Prozess der Verwendung des übergeordneten Dokument-Retrievers in LangChain.

Abschluss

Um den Parent Document Retriever in LangChain zu verwenden, installieren Sie einfach die Module und richten Sie die OpenAI-Umgebung mithilfe ihres API-Schlüssels ein. Anschließend importieren Sie die erforderlichen Bibliotheken aus LangChain für die Verwendung des übergeordneten Dokument-Retrievers und laden dann die Dokumente für das Modell. Der Benutzer kann übergeordnete Dokumente als gesamtes Dokument oder als großen Teil verwenden und mithilfe der Abfrage einen kleineren Teil abrufen. In diesem Beitrag wurde der Prozess der Verwendung des Parent Document Retrievers in LangChain näher erläutert.