suchen
HeimBackend-EntwicklungPython-TutorialMit Knowledge Graphs durch die Welt von Harry Potter navigieren

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
Wie wirkt sich die Auswahl zwischen Listen und Arrays auf die Gesamtleistung einer Python -Anwendung aus, die sich mit großen Datensätzen befasst?Wie wirkt sich die Auswahl zwischen Listen und Arrays auf die Gesamtleistung einer Python -Anwendung aus, die sich mit großen Datensätzen befasst?May 03, 2025 am 12:11 AM

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

Erklären Sie, wie das Speicher für Listen gegenüber Arrays in Python zugewiesen wird.Erklären Sie, wie das Speicher für Listen gegenüber Arrays in Python zugewiesen wird.May 03, 2025 am 12:10 AM

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

Wie geben Sie den Datentyp der Elemente in einem Python -Array an?Wie geben Sie den Datentyp der Elemente in einem Python -Array an?May 03, 2025 am 12:06 AM

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

Was ist Numpy und warum ist es wichtig für das numerische Computing in Python?Was ist Numpy und warum ist es wichtig für das numerische Computing in Python?May 03, 2025 am 12:03 AM

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

Diskutieren Sie das Konzept der 'zusammenhängenden Speicherzuweisung' und seine Bedeutung für Arrays.Diskutieren Sie das Konzept der 'zusammenhängenden Speicherzuweisung' und seine Bedeutung für Arrays.May 03, 2025 am 12:01 AM

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

Wie schneiden Sie eine Python -Liste?Wie schneiden Sie eine Python -Liste?May 02, 2025 am 12:14 AM

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

Was sind einige gängige Operationen, die an Numpy -Arrays ausgeführt werden können?Was sind einige gängige Operationen, die an Numpy -Arrays ausgeführt werden können?May 02, 2025 am 12:09 AM

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

Wie werden Arrays in der Datenanalyse mit Python verwendet?Wie werden Arrays in der Datenanalyse mit Python verwendet?May 02, 2025 am 12:09 AM

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

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

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

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version

VSCode Windows 64-Bit-Download

VSCode Windows 64-Bit-Download

Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

mPDF

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),