Maison >développement back-end >Tutoriel Python >Naviguer dans le monde de Harry Potter avec les Knowledge Graphs
Êtes-vous un fan d'Harry Potter et souhaitez-vous avoir tout sur l'univers Harry Potter à portée de main ? Ou voulez-vous simplement impressionner vos amis avec un tableau sympa montrant comment les différents personnages de Harry Potter se réunissent ? Ne cherchez pas plus loin que les graphiques de connaissances.
Ce guide vous montrera comment créer un graphique de connaissances dans Neo4J avec uniquement votre ordinateur portable et votre livre préféré.
D'après Wikipédia :
Un graphe de connaissances est une base de connaissances qui utilise un modèle de données ou une topologie structurée par graphe pour représenter et exploiter les données.
En termes de matériel, tout ce dont vous avez besoin est un ordinateur, de préférence équipé d'une carte graphique Nvidia. Pour être totalement autonome, j'opterai pour une configuration LLM locale, mais on pourrait facilement également utiliser une API OpenAI dans le même but.
Vous aurez besoin des éléments suivants :
Comme je code sur Ubuntu 24.04 dans WSL2, pour que toute charge de travail GPU puisse passer facilement, j'utilise le docker Ollama. Exécuter Ollama en tant que conteneur Docker est aussi simple que d'installer d'abord la boîte à outils du conteneur Nvidia, puis ce qui suit :
docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
Si vous n'avez pas de GPU Nvidia, vous pouvez exécuter un Ollama uniquement CPU à l'aide de la commande suivante dans CLI :
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
Une fois que vous avez terminé, vous pouvez intégrer votre modèle LLM préféré dans Ollama. La liste des modèles disponibles sur Ollama est ici. Par exemple, si je veux extraire qwen2.5, je peux exécuter la commande suivante en CLI :
docker exec -it ollama ollama run qwen2.5
Et vous en avez fini avec Ollama !
Vous souhaiterez d'abord créer un environnement virtuel Python, de sorte que tous les packages que vous installez ou toutes les modifications de configuration que vous avez apportées soient limités à l'environnement, au lieu de les appliquer globalement. La commande suivante créera un environnement virtuel harry-potter-rag :
python -m venv harry-potter-rag
Vous pouvez ensuite activer l'environnement virtuel à l'aide de la commande suivante :
source tutorial-env/bin/activate
Ensuite, utilisez pip pour installer les packages concernés, principalement depuis LangChain :
%pip install --upgrade --quiet langchain langchain-community langchain-openai langchain-experimental neo4j
Nous allons configurer Neo4J en tant que conteneur Docker. Pour faciliter la mise en place avec des configurations spécifiques, nous utilisons docker compose. Vous pouvez simplement copier ce qui suit dans un fichier appelé docker-compose.yaml, puis exécuter docker-compose up -d dans le même répertoire pour configurer Neo4J.
Cette configuration garantit également que les données, les journaux et les plugins sont conservés dans les dossiers locaux, c'est-à-dire /data. /logs et plugins.
docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
Nous pouvons maintenant commencer à créer le Knowledge Graph dans Jupyter Notebook ! Nous avons d’abord configuré une instance Ollama LLM en utilisant ce qui suit :
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
Ensuite, nous connectons notre LLM à Neo4J :
docker exec -it ollama ollama run qwen2.5
Maintenant, il est temps de récupérer votre texte Harry Potter préféré, ou n'importe quel livre préféré, et nous utiliserons LangChain pour diviser le texte en morceaux. Le chunking est une stratégie pour diviser un long texte en parties, et nous pouvons ensuite envoyer chaque partie au LLM pour les convertir en nœuds et arêtes, et insérer les nœuds et arêtes de chaque morceau dans Neo4J. Juste un petit aperçu, les nœuds sont des cercles que vous voyez sur un graphique, et chaque arête relie deux nœuds ensemble.
Le code imprime également le premier morceau pour un aperçu rapide de l'apparence des morceaux.
python -m venv harry-potter-rag
Maintenant, il est temps de laisser notre GPU faire le gros du travail et de convertir le texte en Knowledge Graph ! Avant de plonger profondément dans l'ensemble du livre, expérimentons des invites pour mieux guider le LLM dans la restitution d'un graphique comme nous le souhaitons.
Les invites sont essentiellement des exemples de ce que nous attendons, ou des instructions de ce que nous voulons voir apparaître dans la réponse. Dans le contexte des graphes de connaissances, nous pouvons demander au LLM d'extraire uniquement les personnes et les organisations en tant que nœuds, et de n'accepter que certains types de relations étant donné les entités. Par exemple, nous pouvons permettre que la relation de conjoint se produise uniquement entre une personne et une autre personne, et non entre une personne et une organisation.
Nous pouvons maintenant utiliser le LLMGraphTransformer sur le premier morceau de texte pour voir comment le graphique pourrait se développer. C'est une bonne occasion pour nous de modifier l'invite jusqu'à ce que le résultat soit à notre goût.
L'exemple suivant s'attend à des nœuds qui pourraient être une personne ou une organisation, et Allowed_relationships spécifie les types de relations autorisées. Afin de permettre à LLM de capturer la variété du texte original, j'ai également défini strict_mode sur False, afin que toute autre relation ou entité non définie ci-dessous puisse également être capturée. Si vous définissez plutôt strict_mode sur True, les entités et les relations qui ne sont pas conformes à ce qui est autorisé pourraient être soit supprimées, soit forcées d'adopter ce qui est autorisé (ce qui peut être inexact).
source tutorial-env/bin/activate
Une fois que vous êtes satisfait d'avoir peaufiné votre invite, il est maintenant temps d'ingérer dans un Knowledge Graph. Notez que l'essai - sauf pour gérer explicitement toute réponse qui n'a pas pu être correctement insérée dans Neo4J - le code est conçu de manière à ce que toute erreur soit enregistrée, mais n'empêche pas la boucle de continuer avec la conversion des morceaux suivants en graphique. 🎜>
docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
La boucle ci-dessus m'a pris environ 46 minutes pour ingérer Harry Potter et la pierre philosophale, Harry Potter et la Chambre des secrets et Harry Potter et le Prisonnier d'Azkaban. Je me retrouve avec 4868 nœuds uniques ! Un aperçu rapide est disponible ci-dessous. Vous pouvez voir que le graphique est vraiment encombré et qu'il est difficile de distinguer qui est lié à qui d'autre et de quelle manière.
Nous pouvons désormais tirer parti des requêtes chiffrées pour examiner, par exemple, Dumbledore !
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
Ok, maintenant nous avons juste Dumbledore lui-même. Voyons quel est son lien avec Harry Potter.
docker exec -it ollama ollama run qwen2.5
Ok, maintenant nous nous intéressons à ce dont Harry et Dumbledore ont parlé.
python -m venv harry-potter-rag
On voit que le graphique est encore très confus, avec de nombreux documents à parcourir pour vraiment trouver ce qu'on cherche. Nous pouvons voir que la modélisation des documents sous forme de nœuds n'est pas idéale, et des travaux supplémentaires pourraient être effectués sur le LLMGraphTransformer pour rendre le graphique plus intuitif à utiliser.
Vous pouvez voir à quel point il est facile de configurer un Knowledge Graph sur votre propre ordinateur local, sans même avoir besoin de vous connecter à Internet.
Le dépôt github, qui contient également l'intégralité du Knowledge Graph de l'univers Harry Potter, est disponible ici.
Pour importer le fichier harry_potter.graphml dans Neo4J, copiez le fichier graphml dans le dossier neo4j /import et exécutez ce qui suit sur le navigateur Neo4J :
source tutorial-env/bin/activate
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!