Heim >Backend-Entwicklung >Python-Tutorial >Mit Knowledge Graphs durch die Welt von Harry Potter navigieren

Mit Knowledge Graphs durch die Welt von Harry Potter navigieren

Susan Sarandon
Susan SarandonOriginal
2024-12-22 00:13:19839Durchsuche

Ziel

Sind Sie ein Harry-Potter-Fan und möchten alles über das Harry-Potter-Universum immer zur Hand haben? Oder möchten Sie Ihre Freunde einfach mit einer coolen Grafik beeindrucken, die zeigt, wie die verschiedenen Charaktere in Harry Potter zusammenkommen? Suchen Sie nicht weiter als nach Wissensgraphen.

Diese Anleitung zeigt Ihnen, wie Sie nur mit Ihrem Laptop und Ihrem Lieblingsbuch ein Wissensdiagramm in Neo4J erstellen.

Was ist ein Wissensgraph?

Laut Wikipedia:

Ein Wissensgraph ist eine Wissensdatenbank, die ein graphstrukturiertes Datenmodell oder eine Topologie verwendet, um Daten darzustellen und zu verarbeiten.

Was brauchen Sie

An Hardware benötigen Sie lediglich einen Computer, am besten einen mit einer Nvidia-Grafikkarte. Um völlig autark zu sein, werde ich ein lokales LLM-Setup verwenden, aber man könnte für den gleichen Zweck auch problemlos eine OpenAI-API verwenden.

Schritte zur Einrichtung

Sie benötigen Folgendes:

  1. Ollama und dein Lieblings-LLM-Modell
  2. eine Python-Umgebung
  3. Neo4J

Ollama

Da ich auf Ubuntu 24.04 in WSL2 programmiere, verwende ich Ollama Docker, damit jede GPU-Arbeitslast problemlos weitergeleitet werden kann. Das Ausführen von Ollama als Docker-Container ist so einfach wie die Installation des Nvidia-Container-Toolkits und dann Folgendes:

docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

Wenn Sie keine Nvidia-GPU haben, können Sie ein reines CPU-Ollama mit dem folgenden Befehl in der CLI ausführen:

docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

Sobald Sie fertig sind, können Sie Ihr Lieblings-LLM-Modell in Ollama ziehen. Die Liste der auf Ollama verfügbaren Modelle finden Sie hier. Wenn ich beispielsweise qwen2.5 abrufen möchte, kann ich den folgenden Befehl in der CLI ausführen:

docker exec -it ollama ollama run qwen2.5

Und du bist fertig mit Ollama!

Python-Umgebung

Sie möchten zunächst eine virtuelle Python-Umgebung erstellen, damit alle von Ihnen installierten Pakete oder von Ihnen vorgenommenen Konfigurationsänderungen auf die Umgebung beschränkt sind, anstatt sie global anzuwenden. Der folgende Befehl erstellt eine virtuelle Umgebung Harry-Potter-Rag:

python -m venv harry-potter-rag

Sie können die virtuelle Umgebung dann mit dem folgenden Befehl aktivieren:

source tutorial-env/bin/activate

Als nächstes installieren Sie mit pip die relevanten Pakete, hauptsächlich von LangChain:

%pip install --upgrade --quiet  langchain langchain-community langchain-openai langchain-experimental neo4j

Neo4J einrichten

Wir werden Neo4J als Docker-Container einrichten. Um die Einrichtung mit bestimmten Konfigurationen zu vereinfachen, verwenden wir Docker Compose. Sie können einfach Folgendes in eine Datei namens docker-compose.yaml kopieren und dann docker-compose up -d im selben Verzeichnis ausführen, um Neo4J einzurichten.

Dieses Setup stellt außerdem sicher, dass Daten, Protokolle und Plugins in lokalen Ordnern, d. h. /data, gespeichert bleiben. /logs und Plugins.

docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

Aufbau des Wissensgraphen

Wir können jetzt mit dem Aufbau des Knowledge Graph im Jupyter Notebook beginnen! Wir richten zunächst eine Ollama LLM-Instanz mit folgendem Befehl ein:

docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

Als nächstes verbinden wir unser LLM mit Neo4J:

docker exec -it ollama ollama run qwen2.5

Jetzt ist es an der Zeit, sich Ihren Lieblingstext von Harry Potter oder ein beliebiges Lieblingsbuch zu schnappen, und wir werden LangChain verwenden, um den Text in Abschnitte aufzuteilen. Chunking ist eine Strategie, um einen langen Text in Teile zu zerlegen. Anschließend können wir jeden Teil an das LLM senden, um ihn in Knoten und Kanten umzuwandeln und die Knoten und Kanten jedes Chunks in Neo4J einzufügen. Nur eine kurze Einführung: Knoten sind Kreise, die Sie in einem Diagramm sehen, und jede Kante verbindet zwei Knoten miteinander.

Der Code druckt auch den ersten Block aus, um eine schnelle Vorschau darauf zu erhalten, wie die Blöcke aussehen.

python -m venv harry-potter-rag

Jetzt ist es an der Zeit, die schwere Arbeit unserer GPU zu überlassen und den Text in Knowledge Graph umzuwandeln! Bevor wir tief in das gesamte Buch eintauchen, experimentieren wir mit Eingabeaufforderungen, um den LLM besser dabei zu unterstützen, ein Diagramm in der von uns gewünschten Weise zurückzugeben.

Eingabeaufforderungen sind im Wesentlichen Beispiele dafür, was wir erwarten, oder Anweisungen dafür, was in der Antwort erscheinen soll. Im Zusammenhang mit Wissensgraphen können wir das LLM anweisen, nur Personen und Organisationen als Knoten zu extrahieren und nur bestimmte Arten von Beziehungen angesichts der Entitäten zu akzeptieren. Beispielsweise können wir zulassen, dass die Ehegattenbeziehung nur zwischen einer Person und einer anderen Person stattfindet und nicht zwischen einer Person und einer Organisation.

Wir können jetzt den LLMGraphTransformer auf den ersten Textblock anwenden, um zu sehen, wie das Diagramm aussehen könnte. Dies ist eine gute Gelegenheit für uns, die Eingabeaufforderung zu optimieren, bis das Ergebnis unseren Wünschen entspricht.

Das folgende Beispiel erwartet Knoten, die eine Person oder eine Organisation sein können, und die erlaubten_Beziehungen geben die Arten von Beziehungen an, die zulässig sind. Damit LLM die Vielfalt des Originaltextes erfassen kann, habe ich strict_mode außerdem auf False gesetzt, sodass auch alle anderen Beziehungen oder Entitäten erfasst werden können, die unten nicht definiert sind. Wenn Sie strict_mode stattdessen auf „True“ setzen, können Entitäten und Beziehungen, die nicht den zulässigen Anforderungen entsprechen, entweder gelöscht oder in die zulässigen Werte gezwungen werden (was möglicherweise ungenau ist).

source tutorial-env/bin/activate

Sobald Sie mit der Feinabstimmung Ihrer Eingabeaufforderung zufrieden sind, ist es nun an der Zeit, sie in einen Knowledge Graph einzubinden. Beachten Sie, dass der Versuch – mit der Ausnahme, explizit jede Antwort zu verarbeiten, die nicht ordnungsgemäß in Neo4J eingefügt werden konnte – der Code so konzipiert ist, dass jeder Fehler protokolliert wird, die Schleife jedoch nicht daran gehindert wird, mit der Konvertierung nachfolgender Blöcke in Diagramme fortzufahren.

docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

Für die obige Schleife habe ich etwa 46 Minuten gebraucht, um „Harry Potter und der Stein der Weisen“, „Harry Potter und die Kammer des Schreckens“ und „Harry Potter und der Gefangene von Askaban“ aufzunehmen. Am Ende habe ich 4868 eindeutige Knoten! Eine kurze Vorschau finden Sie unten. Sie können sehen, dass die Grafik sehr überfüllt ist und es schwierig ist zu unterscheiden, wer mit wem sonst auf welche Weise verwandt ist.

Navigating the world of Harry Potter with Knowledge Graphs

Wir können jetzt Chiffrierabfragen nutzen, um uns beispielsweise Dumbledore anzusehen!

docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

Navigating the world of Harry Potter with Knowledge Graphs

Ok, jetzt haben wir nur noch Dumbledore selbst. Mal sehen, wie er mit Harry Potter verwandt ist.

docker exec -it ollama ollama run qwen2.5

Navigating the world of Harry Potter with Knowledge Graphs

Ok, jetzt interessiert uns, was Harry und Dumbledore gesprochen haben.

python -m venv harry-potter-rag

Navigating the world of Harry Potter with Knowledge Graphs

Wir können sehen, dass die Grafik immer noch sehr verwirrend ist und viele Dokumente durchgehen müssen, um wirklich zu finden, wonach wir suchen. Wir können sehen, dass die Modellierung von Dokumenten als Knoten nicht ideal ist, und es könnten weitere Arbeiten am LLMGraphTransformer durchgeführt werden, um die Verwendung des Diagramms intuitiver zu gestalten.

Abschluss

Sie können sehen, wie einfach es ist, einen Knowledge Graph auf Ihrem eigenen lokalen Computer einzurichten, ohne dass eine Verbindung zum Internet erforderlich ist.

Das Github-Repo, das auch den gesamten Knowledge Graph des Harry-Potter-Universums enthält, ist hier verfügbar.

Nachtrag

Um die harry_potter.graphml-Datei in Neo4J zu importieren, kopieren Sie die graphml-Datei in den neo4j-Ordner /import und führen Sie Folgendes im Neo4J-Browser aus:

source tutorial-env/bin/activate

Das obige ist der detaillierte Inhalt vonMit Knowledge Graphs durch die Welt von Harry Potter navigieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn