


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:
- Ollama und dein Lieblings-LLM-Modell
- eine Python-Umgebung
- 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.
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
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
Ok, jetzt interessiert uns, was Harry und Dumbledore gesprochen haben.
python -m venv harry-potter-rag
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!

ForHandlinglargedatasetsinpython, Usenumpyarraysforbetterperformance.1) Numpyarraysarememory-Effiction und FasterFornumericaloperations.2) meidenunnötiger Anbieter.3) HebelVectorisationFecedTimeComplexity.4) ManagemememoryusageSageWithEffizienceDeffictureWitheseffizienz

Inpython, listEUSUutsynamicMemoryAllocationWithover-Accocation, whilenumpyarraysalcodeFixedMemory.1) ListSallocatemoremoryThanneded intellig, vereitelte, dass die sterbliche Größe von Zeitpunkte, OfferingPredictableSageStoageStloseflexeflexibilität.

Inpython, youcansspecthedatatypeyFelemeremodelerernspant.1) Usenpynernrump.1) Usenpynerp.dloatp.Ploatm64, Formor -Präzise -Preciscontrolatatypen.

NumpyisessentialfornumericalComputingInpythonduetoitsSpeed, GedächtnisEffizienz und kompetentiertemaMatematical-Funktionen.1) ITSFACTBECAUSPERFORMATIONSOPERATIONS.2) NumpyarraysSaremoremory-Effecthonpythonlists.3) iTofferSAgyarraysAremoremory-Effizieren

ContInuuousMemoryAllocationScrucialforAraysBecauseAltoLowsFofficy und Fastelement Access.1) iTenablesconstantTimeAccess, O (1), Duetodirectaddresscalculation.2) itimProvesefficienceByallowing -MultipleTeLementFetchesperCacheline.3) Es wird gestellt

SlicingPapythonListisDoneUsingthesyntaxlist [Start: Stop: Stufe] .here'Showitworks: 1) StartIndexoFtheFirstelementtoinclude.2) stopiStheIndexoFtheFirstelementtoexclude.3) StepisTheincrementBetweenelesfulFulForForforexcractioningPorporionsporporionsPorporionsporporesporsporsporsporsporsporsporsporsporionsporsPorsPorsPorsPorsporsporsporsporsporsporsAntionsporsporesporesporesporsPorsPorsporsPorsPorsporsporspors,

Numpyallowsforvariousoperationssonarrays: 1) BasicarithmeticliKeaddition, Subtraktion, Multiplikation und Division; 2) AdvancedoperationssuchasmatrixMultiplication;

Arraysinpython, insbesondere ThroughNumpyandpandas, areessentialfordataanalyse, öfterspeedandeffizienz.1) numpyarraysenableAnalysHandlingoflargedatasets und CompompexoperationslikemovingAverages.2) Pandasextendsnumpy'ScapaBilitiesWithDaTataforsForstruc


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version

VSCode Windows 64-Bit-Download
Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

SAP NetWeaver Server-Adapter für Eclipse
Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

mPDF
mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),
