HyperAI
Back to Headlines

Comment Optimiser les Requêtes avec des Graphes de Connaissances et des Modèles de Langue Large (LLMs)

il y a 16 jours

Création et Interrogation de Graphes de Connaissance avec les LLMs Introduction Les Graphes de Connaissance peuvent être définis comme une représentation structurée de l'information qui relie des concepts, des entités et leurs relations de manière à imiter la compréhension humaine. Ils sont souvent utilisés pour organiser et intégrer des données provenant de diverses sources, permettant aux machines d'inférer, de raisonner et de récupérer des informations pertinentes plus efficacement. Dans cet article, nous explorerons comment utiliser des graphes de connaissance pour améliorer les performances des LLMs (Large Language Models) dans les applications de génération augmentée par la recherche (Retrieval Augmented Generation, ou RAG). Nous nous pencherons également sur la construction et l'utilisation d'un Graphe de Connaissance en utilisant une approche basée sur les graphes, que j'appelle GraphRAG. Problèmes avec l'Approche Standard RAG L'approche traditionnelle RAG repose sur la similarité vectorielle (et parfois sur une recherche hybride) dans le but de récupérer des morceaux d'information (des extraits de documents) similaires à l'entrée de l'utilisateur, selon une certaine mesure de similarité comme le cosinus ou la distance euclidienne. Ces extraits sont ensuite transmis à un LLM, qui est invité à les utiliser comme contexte pour générer une réponse pertinente à la requête de l'utilisateur. Mon argument est que le plus grand point faible de ces applications est la recherche de similarité basée sur des mentions explicites dans la base de connaissances (au niveau interne des documents), laissant le LLM aveugle aux croisements de références entre les documents ni même aux références implicites et contextuelles. En bref, le LLM est limité car il ne peut pas raisonner au niveau inters-documents. Avantages des Graphes de Connaissance Les graphes offrent une manière plus complète de structurer la base de connaissances en extrayant des concepts de chaque morceau de texte et en gardant une trace des relations entre les informations. C'est particulièrement utile pour les documents contenant des croisements de références et des mentions implicites, ce qui se produit fréquemment dans les organisations et les entreprises. Passage des Représentations Vectorielles aux Graphes de Connaissance Pour transformer une représentation vectorielle en un Graphe de Connaissance, nous devons : 1. Choisir un corpus de documents cohérent (par exemple, des manuels médicaux, des documents de codage, ou des articles de presse). 2. Ingestionner et traiter ces documents. 3. Extraire des concepts en utilisant un LLM. 4. Émbedder chaque morceau de document. 5. Enregistrer les embeddings dans le Graphe de Connaissance. Tech Stack Utilisé Python: Version 3.12, la principale langue de développement. Neo4j: Base de données graphiques et stockage des embeddings vectoriels. Cypher est son langage de requêtes. LangChain: Cadre d'agent pour coordonner les interactions des LLMs avec divers outils et entrées utilisateur. LLMs et Embeddings: Utilisés localement via Ollama ou via des API en ligne comme Groq. Streamlit: Bibliothèque Python pour construire des interfaces utilisateur légères et rapides, adaptée aux démonstrations. Docker: Outil de conteneurisation pour faciliter le développement et le déploiement locaux. Processus d'Ingestion Chargement des fichiers: L'ingesteur infère le type MIME de chaque fichier. Il utilise des chargeurs de documents différents en fonction du format (PDF, DOCX, TXT, HTML). Nettoyage et découpage du contenu: Nettoyage et découpage du document en tronçons de texte (chunks). Taille des tronçons, chevauchement et autres configurations peuvent être ajustées selon le domaine. Extraction des Concepts Graphiques: Un agent LLM extrait un graphe de concepts pour chaque tronçon, avec une option pour fournir une ontologie décrivant les types d'entités et de relations possibles. Émbedding des Tronçons: Utilisation de modèles d'embedding pour obtenir une représentation vectorielle du texte des tronçons. Sauvegarde dans le Graphe de Connaissance: Création de nœuds et relations dans Neo4j. Découverte et enregistrement de communautés de nœuds via des techniques de clustering hiérarchique. Interrogation du Graphe de Connaissance Enhanced RAG: Utilisation classique de la recherche de similarité sur les embeddings des tronçons. Enrichissement du contexte avec des tronçons voisins pour des réponses plus détaillées et contextualisées. Community Reports: Utilisation de rapports de communauté générés par un LLM après le clustering. Réponses basées sur des résumés combinant des informations intradocumentaires et inters-documents. Requêtes Cypher: Instruction du LLM avec le schéma du graphe pour écrire des requêtes Cypher. Recherche de nœuds, entités et relations basés sur les questions de l'utilisateur. Community Subgraph: Combinaison des approches Community Report et Cypher. Extraction de sous-graphes de communautés pour des réponses plus détaillées, mais encore en cours de développement. Cypher + RAG: Combinaison de l'Enhanced RAG et de la génération de requêtes Cypher. Réponses exhaustives et cohérentes, avec une stratégie de secours en cas d'échec dans la génération de requêtes. Comparaison des Stratégies d'Interrogation | Stratégie | Précision | Coût | Vitesse | Extensibilité | |-------------------|-----------|------|---------|--------------| | Enhanced RAG | Bonne | Faible | Rapide | Élevée | | Community Reports | Exellente | Moyenne | Moyenne | Moyenne | | Requêtes Cypher | Très bonne | Faible | Moyenne | Moyenne | | Community Subgraph | Inconstante | Faible | Lente | Faible | | Cypher + RAG | Excellente | Moyenne | Rapide | Élevée | Conclusion Dans cet article, nous avons exploré le pipeline completpour la création et l'utilisation de graphes de connaissance avec des LLMs. Nous avons vu comment structurer des données en graphes plutôt que de simples vecteurs permet de mieux capturer les contextes inters-documents et d'améliorer significativement la pertinence des réponses. Le code source de cette démonstration est disponible sur mon GitHub, où vous trouverez des guides détaillés pour lancer l'application, ingérer des documents, et interroger le graphe. Si vous trouvez ce projet utile, avez des idées pour de nouvelles fonctionnalités, ou souhaitez aider à améliorer les composants existants, n'hésitez pas à ouvrir des tickets ou à envoyer des pull requests. Informations Complémentaires Projet GitHub: Disponible pour exploration et contribution. Corpus de Documents: Fichiers PDF de la section presse de la Commission Européenne, utilisés pour tester et jouer avec le code. LangChain: Facilite la coordination entre LLMs, index vectoriels, et graphes de connaissance. Neo4j: Offre des fonctionnalités avancées de gestion de graphes et de vecteurs. Streamlit: Parfait pour des démos et prototypes, mais nécessite une refonte pour une utilisation en production. Ce guide est destiné à ceux qui cherchent à construire des systèmes de recherche plus intelligents, offrant des explications détaillées et claires sur chaque étape du processus. Je suis impatient d'entendre vos avis et suggestions ! Evaluation de Professionnels de l'Industrie Les professionnels de l'industrie s'accordent à dire que l'approche GraphRAG offre un potentiel considérable en matière d'optimisation des systèmes de génération augmentée par la recherche. Elle permet non seulement d'améliorer la pertinence des réponses mais aussi de capturer des relations complexes qui peuvent exister entre les documents. Cette méthode est particulièrement prometteuse pour les organisations qui gèrent de grandes bases de données hétérogènes. Profil de l'Entreprise La Commission Européenne, qui fournit les documents de test pour ce projet, est une institution clé de l'Union Européenne, responsable de la proposition et de la mise en œuvre de politiques. Son site de presse offre une vaste collection de documents pertinents pour explorer les capacités des graphes de connaissance dans le traitement de l'information gouvernementale.

Related Links