Maison >développement back-end >Tutoriel Python >Naviguer dans le monde de Harry Potter avec les Knowledge Graphs

Naviguer dans le monde de Harry Potter avec les Knowledge Graphs

Susan Sarandon
Susan Sarandonoriginal
2024-12-22 00:13:19839parcourir

But

Ê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é.

Qu'est-ce qu'un graphe de connaissances

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.

De quoi avez-vous besoin

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.

Étapes de mise en place

Vous aurez besoin des éléments suivants :

  1. Ollama, et votre modèle LLM préféré
  2. un environnement python
  3. Néo4J

Ollama

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 !

Environnement Python

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

Configuration de 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

Construire le Knowledge Graph

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.

Navigating the world of Harry Potter with Knowledge Graphs

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

Navigating the world of Harry Potter with Knowledge Graphs

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

Navigating the world of Harry Potter with Knowledge Graphs

Ok, maintenant nous nous intéressons à ce dont Harry et Dumbledore ont parlé.

python -m venv harry-potter-rag

Navigating the world of Harry Potter with Knowledge Graphs

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.

Conclusion

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.

Post-scriptum

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn