GraphRAG contre Vector RAG : pourquoi la recherche vectorielle échoue à grande échelle
Vector RAG rencontre des difficultés avec l’isolation des blocs de texte, le raisonnement inter-documents et l’échelle. Découvrez comment GraphRAG crée des communautés et des résumés pour y remédier, ainsi que quand choisir l’un ou l’autre.
Sources: GraphRAG: Why Vector Search Fails at Scale (And How Knowledge Graphs Fix It)
La génération augmentée par la récupération permet à un modèle de langage de travailler avec des données sur lesquelles il n’a jamais été entraîné. La version classique divise les documents en fragments, stocke leurs embeddings dans une base de données vectorielle, et, au moment de la question, récupère les fragments les plus proches de la requête pour les intégrer dans le prompt. Pour des systèmes de réponse à des questions simples sur une petite collection de données, cela fonctionne bien. Cependant, face à des données d’entreprise complexes, ce système commence à montrer des limites.
Le problème ne réside ni dans l’étape de récupération ni dans l’étape de génération. Il provient de la manière dont les données sont représentées une fois transformées en vecteurs.
Où le RAG vectoriel classique échoue
Les fragments deviennent des îlots
Lorsqu’un document est divisé en fragments, chaque fragment flotte isolément dans l’espace vectoriel. Il est coupé des paragraphes qui l’entourent ainsi que du matériel similaire présent dans d’autres documents, et toute structure que possédait l’original disparaît. Lors de la récupération, le contexte environnant important reste en arrière, et le LLM peut confondre un fait partiel avec la vérité complète. La rupture de ces liens logiques oblige le modèle à évaluer le texte sans tenir compte du contexte d’origine.
Aucun raisonnement entre documents
Certaines questions ne peuvent pas être répondues par un seul passage. Pensez à des questions comme « Quelles tendances et thèmes apparaissent dans tous nos rapports financiers trimestriels ? » ou « Un employé peut-il demander le remboursement des coûts de Wi-Fi engagés avant sa date d’embauche ? » Microsoft Research qualifie de telles questions des requêtes de compréhension du sens. Elles sont larges et nécessitent un système capable d’analyser, de combiner et de résumer les relations au sein d’un ensemble de données, plutôt que d’extraire un fait déjà existant.
La recherche vectorielle repose sur des correspondances sémantiques locales : les fragments dont les vecteurs se trouvent les plus proches du vecteur de la requête. Cela est excellent pour les questions locales, mais échoue lorsque la réponse est dispersée sur plusieurs fragments et documents. Supposons que la réponse nécessite de relier le fait A dans un document au fait B dans un autre, et le fait C dans un troisième. Chaque fragment est récupéré de manière indépendante, en fonction de sa similarité avec la requête ; ainsi, un fait intermédiaire ayant un faible score de similarité est exclu, même si la réponse en dépend. La chaîne de raisonnement est alors rompue.
La précision diminue à mesure que les données augmentent
Tout système RAG qui passe du stade de prototype à celui de production voit son corpus s’agrandir, et cette croissance révèle un défaut : la précision de la récupération des informations commence à diminuer. Plus de documents élargissent la gamme de sujets que le système peut couvrir, mais ils affaiblissent également la précision. Lorsqu’un index passe de quelques centaines de fragments à des milliers, la proportion de fragments pertinents pour une question donnée continue de diminuer. Ceux qui sont pertinents sont noyés au milieu de fragments semblables sur le plan sémantique mais inutiles dans le contexte. Plus de documents signifient une couverture plus large mais aussi une précision de récupération plus faible en même temps.
GraphRAG comme solution
Microsoft Research a introduit GraphRAG en 2024 pour remédier à ces faiblesses. Au lieu d’utiliser des vecteurs non connectés, il conserve les relations structurées présentes dans le texte en passant à un graphe de connaissances. Un graphe de connaissances représente les faits du monde réel sous forme de nœuds, qui correspondent à des entités telles que des personnes, des lieux ou des concepts, reliés entre eux par des arêtes indiquant la nature de leurs relations. Cette base permet au système de raisonner sur l’ensemble d’un ensemble de données plutôt que de ne effectuer que des recherches locales.
L’idée principale
GraphRAG transforme des documents dispersés en une carte connectée d’idées et résume les données en allant des thèmes généraux aux détails. Comme ces liens sont créés à l’avance, le LLM dispose à la fois d’une vue d’ensemble du corpus et d’un accès à un contexte détaillé. Il existe quatre étapes :
- Construire le graphe. Un LLM crée un graphe de connaissances dans lequel les nœuds représentent les entités clés du corpus et les arêtes les relations entre elles.
- Identifier les communautés. Le graphe est divisé en clusters imbriqués, allant de petits groupes locaux jusqu’à des thèmes concernant l’ensemble des données. Une communauté est un ensemble de nœuds étroitement connectés entre eux et seulement faiblement liés au reste du réseau.
- Résumer de bas en haut. Un LLM rédige un résumé pour chaque communauté, couvrant ses entités, faits et relations. Les résumés sont générés selon la hiérarchie : les communautés de niveau supérieur intègrent ceux des niveaux inférieurs, ce qui permet d’obtenir une vue d’ensemble structurée de l’ensemble des données.
Le flux de travail en détail
Comme le RAG traditionnel, GraphRAG comporte deux phases : l’indexation et la requête.
Indexation, effectuée hors ligne
Documents en morceaux. Le processus commence par la division des documents en morceaux, généralement d’environ 600 tokens, taille choisie pour maximiser le nombre d’entités identifiées.
Morceaux en entités et relations. Le LLM lit chaque morceau à tour de rôle et extrait les entités importantes ainsi que les relations entre elles, accompagnées de brèves descriptions de chacune. Il peut également extraire des affirmations, qui sont des faits notables concernant les entités tels que des dates, des événements et des interactions avec d’autres entités.
Vers un graphe de connaissances. Toutes les extractions sont consolidées. Les entités deviennent des nœuds et les relations deviennent des arêtes. Afin de réduire la redondance, les variantes d’une même entité sont fusionnées et leurs descriptions sont condensées en une seule entrée. Les mentions répétées d’une relation augmentent le poids de son arête, indiquant ainsi une connexion plus forte, et les affirmations sont associées aux nœuds et arêtes pertinents.
Du graphe aux communautés. Un algorithme hiérarchique de détection de communautés, généralement Leiden, divise le réseau en clusters de nœuds étroitement connectés. Le résultat est une hiérarchie à plusieurs niveaux, avec des clusters petits et détaillés au niveau le plus bas et des regroupements couvrant l’ensemble du domaine au niveau le plus élevé.
Des communautés aux résumés. En partant des clusters les plus petits et les plus détaillés pour monter en niveau, le LLM rédige un résumé pour chaque étape de la hiérarchie. Cela permet de répondre à des questions d’ordre global tout en permettant aux utilisateurs de naviguer des thèmes larges jusqu’aux détails les plus fins. Afin de respecter les limites de contexte, les résumés de niveau le plus bas sont générés en classant les données brutes du graphe par importance et en remplissant l’instruction avec les entités, relations et affirmations les plus connectées jusqu’à épuisement d’espace. Les résumés de niveau supérieur sont construits directement à partir de ceux qui se trouvent en dessous d’eux, ce qui constitue une accumulation d’accumulations.
Interrogation en temps de exécution
Le RAG standard traite chaque demande en utilisant la même méthode de recherche de similarité. GraphRAG envoie une requête le long de l’un de deux chemins en fonction de l’intention. La recherche globale permet d’obtenir une interprétation large à l’échelle de l’ensemble des données. La recherche locale s’occupe des questions spécifiques centrées sur des entités qui nécessitent plusieurs étapes de traitement. Pour une entreprise disposant d’une politique de remboursement, une requête globale pourrait porter sur les principaux risques de conformité et les règles d’approbation applicables à tous les programmes de remboursement. Une requête locale pourrait demander si un employé peut demander le remboursement d’une dépense Internet engagée avant la date officielle d’embauche.
Requêtes globales. Au lieu de scanner des millions de fragments bruts, le système interroge les résumés communautaires précalculés à l’aide d’un pipeline map-reduce.
- Choisir un niveau de hiérarchie, allant des super-communautés larges aux clusters locaux détaillés (niveau 0, 1, 2, etc.), en fonction de l’étendue à laquelle la réponse doit couvrir.
- Carte : lancer la question en même temps pour chaque résumé de communauté au niveau correspondant. Un LLM évalue chacun indépendamment et produit une réponse intermédiaire de la communauté accompagnée d’une note de pertinence allant de 0 à 100.
- Filtrage et classement : éliminer les réponses peu pertinentes et classer les autres en points prioritaires.
- Réduction : transmettre les idées les mieux classées à l’LLM dans une seule fenêtre de contexte, qui les synthétise en une réponse complète et sans répétitions, avec des citations.
Recherches locales. GraphRAG ne jette pas les vecteurs. Il change leur utilisation. Dans la recherche locale, les vecteurs servent uniquement à localiser les entités d’ancrage dans le graphe. Une fois ces points d’entrée trouvés, la recherche vectorielle s’arrête et c’est la parcours du graphe qui prend le relais. Comme condition préalable, des embeddings pour les descriptions des entités doivent être générés et stockés dans une base de données vectorielle.
Cela représente une véritable différence. Dans le RAG traditionnel, la similarité vectorielle est le principal moyen d’obtenir des extraits de texte bruts. Dans GraphRAG, il s’agit d’une recherche ciblée qui associe la question à des entités pertinentes, lesquelles ne servent que de points d’accès au graphe. Selon la configuration, la recherche locale peut également intégrer et rechercher des unités de texte ou des affirmations en tant que points d’entrée.
- Effectuer une recherche de similarité vectorielle sur les embeddings des descriptions d’entités afin de trouver des points d’entrée.
- Associer ces entités à leurs documents sources et à leurs extraits de texte, parcourir le graphe pour collecter les nœuds voisins et les descriptions des arêtes, récupérer des covariables telles que des affirmations, des URL et des dates, ainsi que les résumés des communautés locales auxquelles appartiennent les entités, ce qui ajoute un peu de contexte environnant.
- Faire en sorte qu’un LLM classe chacune de ces associations en fonction de sa pertinence par rapport à la question, en éliminant celles qui sont moins pertinentes.
- Ajoutez le contexte classé à la demande pour générer une réponse fondée.
Lequel choisir
Aucune approche n’est meilleure dans tous les cas. Elles conviennent à des questions et à des données différentes. Le choix dépend de la complexité du jeu de données, des requêtes à gérer et du budget disponible.
Choisissez vector RAG lorsque vous souhaitez récupérer rapidement et à moindre coût des faits isolés à partir de documents indépendants, où la réponse se trouve dans un seul paragraphe ou page. Choisissez GraphRAG lorsque vos sources sont denses et interconnectées, et que les questions exigent une synthèse à travers plusieurs documents, une analyse des tendances sur l’ensemble du jeu de données ou l’identification des relations entre des entités dans des domaines tels que le droit, la recherche et la politique.
Une façon simple de s’en souvenir : vector RAG cherche l’aiguille dans la meule de foin, tandis que GraphRAG cartographie d’abord toute la meule de foin avant de procéder à la recherche.
Vector RAG a changé la manière dont les LLM traitent les connaissances externes, mais pour s’adapter à des données d’entreprise complexes, il faut plus que des recherches semantiquement similaires. En organisant le texte en un graphe de connaissances avec des résumés hiérarchiques de communautés, GraphRAG relie des recherches ciblées à un raisonnement sur l’ensemble des données.
Si vous souhaitez en savoir plus, l’article original est disponible à l’adresse https://arxiv.org/abs/2404.16130 et la conception de la recherche locale est décrite à https://microsoft.github.io/graphrag/query/local_search/.