Application de la technologie des graphes sous LLM : Llama Index, un grand modèle de langage piloté par le graphe de connaissances

Le LLM bat son plein depuis plus de six mois, et divers grands modèles et cadres connexes ont progressivement pris forme, qui peuvent être appliqués à la pratique des affaires par tout le monde. Dans ce processus, nous pouvons rencontrer un type de problème : quelles données existantes et comment mieux se connecter avec LLM. Comme le graphe de connaissances que tout le monde utilise, comment le graphe actuel peut-il utiliser le grand modèle pour exercer une plus grande valeur ?

Dans cet article, je vais partager avec vous comment utiliser les graphes de connaissances pour créer de meilleures applications de grands modèles de langage d'apprentissage en contexte.

Cet article a été écrit à l'origine en anglais et j'ai demandé à ChatGPT de le traduire en anglais pour moi. Voici l'invite traduite :

"Dans ce fil, vous êtes un blogueur Chinese Tech pour aider à traduire mon blog en démarque de l'anglais vers le chinois, le style du blog est clair, amusant mais professionnel. Je vous collerai les chapitres en démarque et vous me renverrez la version traduite et peaufinée.

Paradigmes pour LLM appliqués

Une percée majeure dans l'intelligence cognitive, LLM a transformé de nombreuses industries, en automatisant, en accélérant et en permettant d'une manière à laquelle nous ne nous attendions pas. Nous voyons chaque jour de nouvelles applications LLN être créées, et nous découvrons toujours de nouvelles façons et des cas d'utilisation pour exploiter cette magie.

L'un des modèles les plus typiques d'introduction de LLM dans un processus consiste à demander à LLM de comprendre les choses en se basant sur des connaissances propriétaires / spécifiques à un domaine. Actuellement, nous pouvons ajouter deux paradigmes au LLM pour capturer ces connaissances : apprentissage fin - ajustement et apprentissage contextuel - apprentissage en contexte .

Le réglage fin fait référence à une formation supplémentaire du modèle LLM pour ajouter des connaissances supplémentaires ; tandis que l'apprentissage contextuel consiste à ajouter des connaissances supplémentaires aux conseils de requête.

Il a été observé que l'apprentissage contextuel est actuellement préféré au réglage fin car il est plus simple que le réglage fin, et ce phénomène est décrit dans cet article : https://arxiv.org/abs/2305.16938 .

Ci-dessous, je partage le travail que NebulaGraph a fait sur les méthodes d'apprentissage contextuel.

Llama Index : interface entre les données et le LLM

apprentissage contextuel

L'idée de base de l'apprentissage contextuel est d'utiliser des LLM existants (non mis à jour) pour gérer des tâches spéciales pour des ensembles de données de connaissances spécifiques .

Par exemple, pour construire une application qui peut répondre à n'importe quelle question sur une personne, ou même agir comme un avatar numérique d'une personne, nous pouvons appliquer l'apprentissage contextuel à un livre autobiographique et à un LLM. En pratique, l'application construira une invite en utilisant la question de l'utilisateur et certaines informations "recherchées" dans le livre, puis interrogera le LLM pour obtenir la réponse.

┌───────┐         ┌─────────────────┐         ┌─────────┐
│       │         │ Docs/Knowledge  │         │         │
│       │         └─────────────────┘         │         │
│ User  │─────────────────────────────────────▶   LLM   │
│       │                                     │         │
│       │                                     │         │
└───────┘                                     └─────────┘

Dans cette approche de recherche, l'un des moyens les plus efficaces d'obtenir des informations spécifiques à une tâche à partir de documents/connaissances (le livre dans l'exemple ci-dessus) consiste à tirer parti de l'intégration.

Intégration

Les intégrations font généralement référence à des méthodes de mappage d'objets du monde réel sur des vecteurs dans un espace multidimensionnel . Par exemple, nous pouvons mapper des images dans un espace dimensionnel (64 x 64), et si le mappage est suffisamment bon, la distance entre deux images peut refléter leur similitude.

Un autre exemple d'intégration est l'algorithme word2vec, qui mappe chaque mot dans un vecteur. Par exemple, si les plongements sont suffisamment bons, nous pouvons effectuer des opérations d'addition et de soustraction sur eux et obtenir le résultat suivant :

vec(apple) + vec(pie) ≈ vec("apple apie"), ou la mesure vectorielle vec(apple) + vec(pie) - vec("apple apie")se rapproche de 0 :

|vec(apple) + vec(pie) - vec("apple apie")| ≈ 0

De même, "poire" devrait être plus proche de "pomme" que de "dinosaure":|vec(apple) - vec(pear)| < |vec(apple) - vec(dinosaur)|

Avec cette base, nous pourrions théoriquement rechercher des fragments de livre plus pertinents pour une question donnée. Le processus de base est le suivant :

  • Divisez le livre en petits morceaux, créez des incrustations pour chaque morceau et rangez-les
  • Lorsqu'il y a une question, calculez l'intégration de la question
  • Trouvez le top K des plongements les plus similaires aux fragments de livre en calculant les distances
  • Créer des invites à l'aide de questions et de fragments de livre
  • Interroger LLM à l'aide d'invites
                  ┌────┬────┬────┬────┐                  
                  │ 1  │ 2  │ 3  │ 4  │                  
                  ├────┴────┴────┴────┤                  
                  │  Docs/Knowledge   │                  
┌───────┐         │        ...        │       ┌─────────┐
│       │         ├────┬────┬────┬────┤       │         │
│       │         │ 95 │ 96 │    │    │       │         │
│       │         └────┴────┴────┴────┘       │         │
│ User  │─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─▶   LLM   │
│       │                                     │         │
│       │                                     │         │
└───────┘    ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐  └─────────┘
    │          ┌──────────────────────────┐        ▲     
    └────────┼▶│  Tell me ....., please   │├───────┘     
               └──────────────────────────┘              
             │ ┌────┐ ┌────┐               │             
               │ 3  │ │ 96 │                             
             │ └────┘ └────┘               │             
              ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ 

Indice de lama

Llama Index est une boîte à outils open source qui nous aide à faire un apprentissage en contexte avec les meilleures pratiques :

  • Il fournit divers chargeurs de données pour sérialiser les documents/connaissances dans un format unifié, tel que PDF, Wikipédia, Notion, Twitter, etc., afin que nous n'ayons pas besoin de gérer nous-mêmes le prétraitement, la division des données en fragments, etc.
  • Cela nous aide également à créer des incorporations (et d'autres formes d'indexation) et à stocker les incorporations en mémoire ou dans des bases de données vectorielles avec une seule ligne de code.
  • Il a des astuces intégrées et d'autres implémentations d'ingénierie, nous n'avons donc pas besoin de créer et de rechercher à partir de zéro, par exemple, "Créer un chatbot sur des données existantes avec 4 lignes de code" .

Problèmes de segmentation et d'intégration de documents

L'intégration et la recherche de vecteurs fonctionnent bien dans de nombreux cas, mais il reste des défis dans certains cas, tels que : la perte de contexte global / contexte inter-nœuds.

Imaginez la requête "Veuillez me parler de l'auteur et foo", dans ce livre, supposons que les sections numérotées 1, 3, 6, 19-25, 30-44 et 96-99 se réfèrent toutes au sujet foo. Dans ce cas, alors, la simple recherche des top-k plongements liés aux fragments de livre peut ne pas être efficace, car à ce moment seuls les quelques fragments les plus pertinents (disons k = 3) sont pris en compte, et beaucoup d'informations contextuelles seront perdues.

┌────┬────┬────┬────┐
│ 1  │ 2  │ 3  │ 4  │
├────┴────┴────┴────┤
│  Docs/Knowledge   │
│        ...        │
├────┬────┬────┬────┤
│ 95 │ 96 │    │    │
└────┴────┴────┴────┘

La façon de résoudre et d'atténuer ce problème est de créer des index composites et des index complets dans le contexte de l'outil Llama Index .

Parmi eux, le stockage vectoriel (VectorStore) n'en est qu'une partie. En plus de cela, nous pouvons définir un index récapitulatif, un index arborescent, etc. pour acheminer différents types de questions vers différents index , en évitant de manquer le contexte global lorsque cela est nécessaire.

Cependant, avec les graphes de connaissances, nous pouvons adopter une approche plus intéressante :

carte des connaissances

Le terme graphe de connaissances a été inventé par Google en mai 2012 dans le cadre de sa pratique consistant à améliorer les résultats de recherche pour fournir aux utilisateurs des informations plus contextuelles. Les graphes de connaissances visent à comprendre les relations entre les entités et à fournir directement des réponses aux requêtes, plutôt que de simplement renvoyer une liste de pages Web connexes.

Un graphe de connaissances est un moyen d'organiser et de connecter des informations sous la forme d'une structure de graphe, où les nœuds représentent des entités et les arêtes représentent les relations entre les entités. Les structures de graphe permettent aux utilisateurs de stocker, de récupérer et d'analyser efficacement les données.

Sa structure est représentée sur la figure ci-dessous :

Maintenant, le problème arrive.Comme mentionné ci-dessus, la carte des connaissances peut aider à résoudre le problème de la segmentation et de l'intégration des documents. Alors, comment la carte des connaissances peut-elle nous aider ?

Combinaison d'intégration et de graphe de connaissances

L'idée de base ici est que, en tant que format d'information raffiné, la granularité des données qui peut être découpée par la carte des connaissances est plus fine et plus petite que celle de notre segmentation manuelle. En combinant les données à petite granularité du graphe de connaissances avec les données en masse précédemment traitées manuellement, nous pouvons mieux rechercher les requêtes qui nécessitent un contexte global/internœud.

Faisons une question : Veuillez regarder le diagramme ci-dessous, en supposant que la question est xliée à , 20 de tous les fragments de données sont xfortement liés à . Maintenant, en plus d'obtenir les 3 premiers fragments de document du contexte principal (tels que les fragments de document numérotés 1, 2 et 96), nous effectuons également deux requêtes de saut à partir du graphe de connaissances, puis le contexte complet comprendrax :

  • 问题:"Dites-moi des choses sur l'auteur et x"
  • Document original des fragments de document numéros 1, 2 et 96. Dans l'index Llama, ils sont appelés Node 1, Node 2 et Node 96.
  • Les 10 triplets du graphe de connaissances contenant "x" xsont obtenus en effectuant un parcours de graphe de profondeur à deux niveaux sur :
    • x -> y (du nœud 1)
    • x -> a (du nœud 2)
    • x -> m (du noeud 4 )
    • x <- b-> c (du noeud 95 )
    • x -> d (du nœud 96)
    • n -> x (du noeud 98 )
    • x <- z <- i (du nœud 1 et du nœud 3 )
    • x <- z <- b (du nœud 1 et du nœud 95 )
┌──────────────────┬──────────────────┬──────────────────┬──────────────────┐
│ .─.       .─.    │  .─.       .─.   │            .─.   │  .─.       .─.   │
│( x )─────▶ y )   │ ( x )─────▶ a )  │           ( j )  │ ( m )◀────( x )  │
│ `▲'       `─'    │  `─'       `─'   │            `─'   │  `─'       `─'   │
│  │     1         │        2         │        3    │    │        4         │
│ .─.              │                  │            .▼.   │                  │
│( z )◀────────────┼──────────────────┼───────────( i )─┐│                  │
│ `◀────┐          │                  │            `─'  ││                  │
├───────┼──────────┴──────────────────┴─────────────────┼┴──────────────────┤
│       │                      Docs/Knowledge           │                   │
│       │                            ...                │                   │
│       │                                               │                   │
├───────┼──────────┬──────────────────┬─────────────────┼┬──────────────────┤
│  .─.  └──────.   │  .─.             │                 ││  .─.             │
│ ( x ◀─────( b )  │ ( x )            │                 └┼▶( n )            │
│  `─'       `─'   │  `─'             │                  │  `─'             │
│        95   │    │   │    96        │                  │   │    98        │
│            .▼.   │  .▼.             │                  │   ▼              │
│           ( c )  │ ( d )            │                  │  .─.             │
│            `─'   │  `─'             │                  │ ( x )            │
└──────────────────┴──────────────────┴──────────────────┴──`─'─────────────┘

De toute évidence, ces informations raffinées (éventuellement précieuses) xliées au sujet proviennent d'autres nœuds et d'informations inter-nœuds, car nous introduisons le graphe de connaissances et peuvent être incluses dans l'invite d'apprentissage du contexte, surmontant ainsi les problèmes susmentionnés.

Avancées des graphiques de connaissances dans l'index des lamas

Initialement, William FH a introduit le concept abstrait de graphe de connaissances dans Llama Index, où les triplets du graphe de connaissances sont associés à des mots-clés et stockés dans des documents en mémoire, puis Logan Markewich a également ajouté l'intégration de chaque triplet.

Au cours des dernières semaines, j'ai travaillé avec la communauté Llama Index pour apporter le contexte de stockage "GraphStore" à Llama Index , ce qui apporte un stockage externe pour les graphes de connaissances. Le premier stockage externe du graphe de connaissances consiste à se connecter à la base de données de graphes distribués open source NebulaGraph, qui a été réalisée grâce à mes efforts.

Au cours de la mise en œuvre, plusieurs options de nombre de sauts pour parcourir le graphe et l'option de collecter plus d'entités clés dans les k nœuds supérieurs sont également introduites pour rechercher dans le graphe de connaissances un contexte plus global. Ces changements mentionnés ci-dessus sont toujours en cours.

Après avoir introduit GraphStore dans le grand modèle, l'apprentissage du contexte peut également être effectué à partir du graphe de connaissances existant et combiné avec d'autres index, ce qui est également très prometteur. Parce que les graphes de connaissances sont considérés comme ayant une densité d'informations plus élevée que les autres données structurées.

Cet article sert de début et décrit la relation entre certains graphes de connaissances et LLM. Dans les articles de suivi, je partagerai avec vous la carte des connaissances spécifiques et la pratique d'application du LLM en mettant l'accent sur le fonctionnement pratique.

--

Merci d'avoir lu cet article (///▽///)

Bienvenue sur GitHub pour lire le code source de NebulaGraph, ou essayez de l'utiliser pour résoudre vos problèmes d'entreprise ~ Adresse GitHub : https://github.com/vesoft-inc/nebula

Les 8 langages de programmation les plus demandés en 2023 : PHP est fort, la demande C/C++ ralentit Musk a annoncé que Twitter sera renommé X, et le logo sera changé pendant cinq ans, Cython 3.0 est officiellement sorti GPT-4 devient de plus en plus stupide ? Le taux de précision est passé de 97,6 % à 2,4 %. MySQL 8.1 et MySQL 8.0.34 ont été officiellement publiés. Le père de C# et de TypeScript a annoncé le dernier projet open source : TypeChat Meta Enlargement move : a publié un grand modèle de langage open source Llama 2, qui est gratuit pour un usage commercial. Le développeur principal de React, Dan Abramov, a annoncé sa démission de Meta. ChatGPT pour Android sera lancé la semaine prochaine. La préinscription commence maintenant . Besoin ? Peut-être que ce projet open source GitHub 5k star peut aider - MetaGPT
{{o.name}}
{{m.name}}

Je suppose que tu aimes

Origine my.oschina.net/u/4169309/blog/10090712
conseillé
Classement