top of page
Rechercher
  • Photo du rédacteurHerve Blanc

Comment personnaliser les LLMs comme ChatGPT avec vos propres données et documents

Dernière mise à jour : 16 avr.


Transformers and Multi-Head Attention

source de l'image: 123RF (avec modifications)


Les grands modèles de langage (LLM) tels que GPT-4 et ChatGPT peuvent générer du texte de haute qualité utile pour de nombreuses applications, notamment les chatbots, la traduction et la création de contenu. Cependant, l’utilisation de ces modèles est limitée à de l’information similaire à celle contenue dans leurs ensembles de données d’entrainement.


Si vous demandez à ChatGPT quelque chose contenu dans les documents de votre propre organisation, cela fournira une réponse inexacte. Cela peut être problématique si vous travaillez sur une application dont le langage est très technique ou spécifique à un domaine.


Pour résoudre ce problème, nous devons augmenter nos LLM avec nos propres documents personnalisés. Dans cet article, je vais vous montrer comment rajouter du contexte à ChatGPT ou GPT-4 (ou tout autre LLM) avec vos propres données en utilisant l’encodage de documents.



Fournir un contexte aux modèles de language (ChatGPT avec vos propres données)


Les modèles de langage sont sensibles au contexte. Si vous leur donnez une invite simple, ils répondront en fonction des connaissances qu’ils ont extraites de leurs données d’entraînement. Mais si vous ajoutez à votre invite des informations personnalisées, vous pouvez modifier leur comportement.


Par exemple, si vous posez à ChatGPT la question « Quels sont les risques liés à l’utilisation des charges d’exploitation? », cela fournira une réponse longue (qui n’est pas mal du tout).


Réponse générique par ChatGPT

Réponse générique par ChatGPT


Cependant, vous pouvez inviter ChatGPT à fournir la réponse à partir d’un document spécifique. Dans l’exemple suivant, je pose la même question à ChatGPT, mais je préfixe mon invite avec « Répondre à mes questions en fonction du document suivant: » suivi du texte d’un article d’Investopedia sur les charges d’exploitation. Cette fois, ChatGPT fournit une réponse différente, extraite du texte de l’article.


Donner du contexte à ChatGPT à partir d’un document

Donner du contexte à ChatGPT à partir d’un document



ChatGPT répond en fonction du contexte du document fournit

ChatGPT répond en fonction du contexte du document fournit


La valeur de cette technique est évidente, en particulier dans les applications où le contexte est très important. Toutefois, l’ajout manuel de contexte à vos invites n’est pas pratique, en particulier lorsque vous avez des milliers de documents.


Supposons que vous ayez un site Web contenant des milliers de pages avec un contenu riche sur des sujets financiers et que vous souhaitiez créer un chatbot basé sur l’API ChatGPT qui peut aider les utilisateurs à naviguer dans ce contenu. Vous avez besoin d’une approche systématique pour faire correspondre les invites des utilisateurs avec les bonnes pages et utiliser le LLM pour fournir des réponses contextuelles. C’est là que l’encodage de documents peut vous aider.



Utilisation de l’encodage pour capturer la sémantique


Avant de passer à l’encodage, fixons un cadre général à notre chatbot:


1- L’utilisateur entre une invite 2- Récupérer le meilleur document pertinent pour l’invite 3- Créer une nouvelle invite qui inclut la question de l’utilisateur ainsi que le contexte du document 4- Donner la nouvelle invite (incluant le contexte) au modèle de langage 5- Renvoyer la réponse à l’utilisateur


Fournir un contexte à ChatGPT

Fournir un contexte à ChatGPT


Du point de vue de la programmation, ce processus est simple, à l’exception de l’étape 2. Comment décidons-nous quel document est pertinent pour la requête de l’utilisateur ? Une réponse rudimentaire serait d’utiliser l’indexation classique et la recherche par mot-clé. Une meilleure solution consiste à utiliser l’encodage.


L’encodage est un vecteur numérique—une liste de numéros—qui capture les différentes caractéristiques d’une information. Plus l’encodage a de dimensions, plus il peut permettre d’apprendre des caractéristiques différentes.


Vous pouvez utiliser des encodages pour différents types de données. Par exemple, dans les tâches liées à l’image, les encodages peuvent représenter la présence ou l’absence de différents objets, l’intensité de différentes couleurs, la distance entre différents objets, etc.


Dans le texte, l’encodage capturent différents aspects sémantiques des textes. Par exemple, l’encodage de mots peut contenir des informations indiquant si le mot se rapporte à une ville ou à un pays, à une espèce d’animaux, à une activité sportive, à un concept politique, etc. Dans le même sens, l’encodage de phrases créent une représentation numérique du contenu d’une séquence de mots. En mesurant la distance entre deux vecteurs d’encodage, vous pouvez obtenir la similitude de leur contenu correspondant.


Vous créez des encodages en entraînant un modèle d’apprentissage automatique, généralement un réseau neuronal profond, sur un grand ensemble de données d’exemples. Dans de nombreux cas, le modèle d’encodage est une version modifiée du même modèle utilisé pour l’application finale (par exemple, la génération de texte ou la classification d’images).


API encodage document


Création d’une base de données d’encodages pour nos documents


Pour intégrer vos encodages dans votre flux de travail de chatbot, vous aurez besoin d’une base de données contenant les encodages de tous vos documents. Si vos documents sont déjà disponibles en texte brut dans une base de données, vous êtes prêt à créer les encodages. Sinon, vous devrez utiliser une sorte de technique telle que l’extraction de contenu Web avec Python (Beautiful Soup) pour récupérer le texte des pages Web. Si vos documents sont des fichiers PDF, tels que des documents de recherche, vous devrez en extraire le texte (vous pouvez le faire avec la bibliothèque Python PyPDF).


Pour créer des intégrations pour vos documents, vous pouvez utiliser un service en ligne tel que l’API Embeddings d’OpenAI. Vous fournissez à l’API le texte de votre document et elle renvoie son encodage. Les encodage d’OpenAI sont de 1 536 dimensions, ce qui est parmi les plus grands encodages. Vous pouvez également utiliser d’autres services d’intégration tels que Hugging Face ou votre propre modèle transformer personnalisé.


Une fois que vous avez vos intégrations, vous devez les stocker dans une « base de données vectorielle ». Les bases de données vectorielles sont spécialisées pour les intégrations et fournissent différentes fonctionnalités, telles que l’interrogation basée sur différentes mesures (Distance euclidienne, Similitude cosinus, etc.).


Faiss (de Facebook) est une base de données vectorielle open source populaire, qui fournit une riche bibliothèque Python pour héberger vos propres données d’intégration. Vous pouvez également utiliser Pinecone, un système de base de données vectorielles en ligne qui permet de faire abstraction de la complexité technique de stockage et de la récupération des encodages.


Vous avez maintenant tout ce dont vous avez besoin pour créer une application LLM personnalisée pour vos propres données propriétaires. Nous pouvons maintenant modifier la logique de l’application comme suit:


1- L’utilisateur entre une invite 2- Créer l’encodage pour l’invite utilisateur 3- Rechercher dans la base de données vectorielle le document le plus proche de l’encodage de l’invite utilisateur 4- Récupérer le texte réel du document 5- Créer une nouvelle invite qui inclut la question de l’utilisateur ainsi que le contexte du document 6- Donner la nouvelle invite (incluant le contexte) au modèle de langage 7- Renvoyer la réponse à l’utilisateur 8- Bonus: fournir un lien vers le document où l’utilisateur peut obtenir des informations supplémentaires



Utilisation d’encodages et d’une base de données vectorielle pour récupérer les documents pertinents

Utilisation d’encodages et d’une base de données vectorielle pour récupérer les documents pertinents


Pour éviter de créer l’intégralité du flux de travail manuellement, vous pouvez utiliser LangChain, une bibliothèque Python pour créer des applications LLM. LangChain supporte différents types de LLM et d’encodages, y compris OpenAI, Cohere, AI21 Labs, ainsi que des modèles open source. Il supporte également différentes bases de données vectorielles, notamment Pinecone et FAISS. Et il dispose de modèles prêts à l’emploi pour différents types d’applications, y compris les chatbots, la réponse aux questions et les agents actifs.


Considérations importantes pour l'encodages de documents


Pour utiliser correctement les encodages avec les LLMs, gardez à l’esprit les considérations suivantes :

– Restez cohérent dans l’infrastructure d’encodage que vous utilisez : Assurez-vous d’utiliser le même modèle d’encodage dans toute l’application. Par exemple, si vous avez choisi les encodages OpenAI, veillez à utiliser la même API et le même modèle pour créer les encodages de vos documents, les encodages d’invite utilisateur et effectuer des recherches dans votre base de données vectorielle. Sinon, vous obtiendrez des résultats incohérents.


– limitations en Token: Chaque LLM a une limite de Tokens (ou mots, par approximation). Par exemple, ChatGPT peut préserver le contexte jusqu’à 4 096 Token. GPT-4 a une limite de 8,000 et 32,000 Tokens. De nombreux modèles open source sont limités à 2 048 tokens. Cela inclut le contexte du document, l’invite utilisateur et la réponse du modèle. Par conséquent, vous devez vous assurer que vos données de contexte ne remplissent pas la mémoire du LLM. Une bonne règle de base est de limiter les documents à 1 000 tokens. Si votre document est plus long que cela, vous pouvez le diviser en plusieurs morceaux avec un peu de chevauchement (environ 100 jetons) entre chaque partie.


– Utilisation de plusieurs documents : Votre réponse ne doit pas nécessairement se limiter à un seul document. Vous pouvez récupérer plusieurs documents dont les encodages sont similaires à l’invite et les utiliser pour obtenir des réponses. Pour vous assurer que vous ne rencontrez pas de limites de tokens, vous pouvez interroger le modèle séparément pour chaque document.



Et pourquoi pas raffiner son propre modèle de langage ?


Pourquoi ne pas affiner le LLM au lieu d’utiliser des encodages contextuelles ? Le réglage fin peut être une bonne option, et son utilisation dépendra de votre application et de vos ressources. Avec un réglage fin approprié, vous pouvez obtenir de bons résultats de vos LLM sans avoir besoin de fournir des données contextuelles, ce qui réduit les coûts de tokens et d’inférence sur les API payantes. Cependant, le réglage fin peut être coûteux et compliqué. L’utilisation d’encodages contextuelles est une option facile qui peut être réalisée avec un minimum de coûts et d’efforts.


Eventuellement, si vous disposez d’un bon processus de collecte de données, vous pouvez améliorer votre système en réajustant un modèle en fonction de vos besoins.


Remerciements


Cet article "Comment personnaliser les LLMs comme ChatGPT avec vos propres données et documents" est la traduction française la plus fidèle possible de « How to customize LLMs like ChatGPT with your own data and documents » avec l'aimable permission de son auteur Ben Dickson



bottom of page