Il est difficile de passer à côté de toutes ces applications qui prétendent remplacer le médecin, l’avocat ou votre notaire, et ce, pour une somme très modique. Dans le domaine du droit, de nombreux entrepreneurs se sont récemment découvert une vocation de juriste, promettant, entre autres, de révolutionner la profession d’avocat. Ce phénomène est amplifié par la mise à disposition de contenus juridiques abondants et gratuits via le portail Légifrance.
Ces applications reposent toutes sur le même principe : elles ajoutent une connaissance externe, consultable et analysable par un modèle de langage qui va pouvoir traiter les informations pour fournir une réponse finale. C’est comme si vous faisiez passer les résultats de Google à travers une application chargée de les résumer ou de sélectionner la bonne réponse à la question de l’utilisateur. Cette technique porte le doux nom de RAG, pour Retrieval Augmented Generation (proposée originellement en 2020 : https://arxiv.org/abs/2005.11401). Cette approche n’est pas apparue avec ChatGPT mais a connu un essor considérable depuis novembre 2022, car elle vient pallier le caractère figé des paramètres du modèle. C’est ce procédé que l’on retrouve dans les GPTs d’OpenAI, entre autres.
La mauvaise nouvelle est que cette technique, étant relativement accessible, va probablement conduire à l’émergence de centaines d’applications dans les prochains mois, prétendant remplacer toute une série de professions liées au domaine du savoir.
Mais il existe aussi de bonnes nouvelles :
- Construire un service fiable à partir de ces techniques est beaucoup plus compliqué qu’il n’y paraît, voire impossible dans certains cas, compte tenu de l’état de l’art. Le recours à un professionnel est indispensable notamment dans la phase d’évaluation.
- L’accessibilité joue également en faveur des professionnels qui peuvent à leur tour s’emparer de cette technique pour développer leurs propres applications internes ou externes.
Compte tenu de l’ampleur du sujet, je vous propose de faire une série de quatre articles qui aborderont différents thèmes, plus ou moins techniques. Le premier s’intéresse aux principes d’architecture (comment cela fonctionne), à ses composants (la base de connaissances, l’interrogation, les réponses), et fournit un bon aperçu de la mise en œuvre et des moyens techniques à disposition.
Le second décrira l’implémentation concrète d’une base de connaissances simple et opérationnelle.
Le troisième article abordera des techniques plus avancées pour améliorer la chaîne de traitement RAG, mais également pour introduire un agent autonome capable de décomposer un problème juridique et d’utiliser les outils à sa disposition pour résoudre différents cas.
Enfin, le quatrième article traitera de la question cruciale de l’évaluation du système. J’y aborderai des aspects tels que le périmètre de l’évaluation, les objectifs, ainsi que les méthodes à l’état de l’art.
Avant d’aborder les composants et la stratégie d’implémentation, intéressons nous aux motivations sous-jacentes à ce type système et leur intérêt.
Motivations :
- Les modèles de langage sont entraînés sur de vastes corpus généralistes et ne sont pas spécifiquement adaptés à un métier particulier.
- La capacité à utiliser les connaissances acquises (« zero-shot« ) lors de l’entraînement est limitée par les biais intrinsèques des modèles et notamment les hallucinations.
- Il est nécessaire de contrôler la connaissance et son utilisation via un mécanisme d’évaluation fiable.
- La plupart des organisations ne disposent pas d’un budget de plusieurs millions de dollars pour entraîner un modèle à partir de rien.
- De même, souvent on ne dispose pas de compétences internes requises pour adapter un modèle de base existant (affinage, ou « finetuning », et apprentissage par renforcement à partir d’exemples humains, ou « RLHF »).
Approches :
- Utiliser les aptitudes des modèles à manipuler le langage (analyser une demande, écrire des résumés, identifier des mots clés…) pour améliorer l’efficacité de la base de connaissance.
- Injecter des connaissances métier spécifiques (modèles de clauses, bonnes pratiques formalisées, codes, textes de référence, etc.) dans une base de données accessible à la fois pour le modèle et pour l’utilisateur.
- Mettre en place des outils d’évaluation automatique pour améliorer la pertinence et la fiabilité du système.
Les stratégies d’implémentations
Comment ça marche ?
Le processus est assez simple et est utilisé quotidiennement lorsqu’on effectue une recherche via un moteur de recherche, tel que Google. L’utilisateur formule une requête, et le service recherche dans son index les résultats les plus pertinents, qu’il renvoie ensuite à l’utilisateur. Dans une approche simple, le modèle intervient en bout de chaîne pour traiter les documents trouvés et fournir le résultat final.
Prenons un exemple : supposons que je formule une recherche sur le thème « Qu’est-ce que la faillite personnelle ? ».
Le moteur de recherche va trouver 5 documents traitant de ce sujet (2 articles du Code de commerce, 3 jurisprudences). Le modèle est ensuite chargé de synthétiser ces documents pour fournir une réponse finale à l’utilisateur. Vous pourriez réaliser une démarche similaire en copiant ces résultats dans ChatGPT avec une instruction du type ‘Résume-moi ces documents en 300 mots’. Dans notre approche, cette instruction existe mais est dissimulée à l’utilisateur. Seul le traitement final est affiché.
- Les documents. Ils peuvent être de nature variée, soit structurés (comme une base de données ou un tableau Excel), soit déstructurés (comme un simple texte, tel qu’un contrat ou une lettre).
- L’index. Il s’agit d’un dictionnaire qui référence tous les documents avec un numéro de série associé, ainsi qu’un ensemble de métadonnées qui enrichissent le document (auteur, date, titre, nombre de pages, thèmes, mots-clés, etc.). Le composant clé de l’index est le stockage d’un vecteur qui fournit une représentation du contenu.
- Le stockage. Pour que l’information soit accessible de manière permanente, elle doit être stockée. On utilise des bases de données spécifiques à cette tâche, que l’on appelle des VectorStores. Il existe de très nombreuses offres, propriétaires et libres, sur le marché : https://vdbs.superlinked.com/.
- Interrogation. L’utilisateur formule une recherche, et le service va explorer ces métadonnées pour retrouver l’information la plus pertinente.
- Évaluation et surveillance. À chaque étape, il est possible de mettre en place des outils d’évaluation qui mesurent la pertinence de la réponse, les biais ou la rapidité du processus.
Architecture
Notre architecture doit répondre à trois enjeux :
- fournir un ensemble de documents métiers ;
- permettre d’indexer et de rechercher dans ces documents ;
- effectuer un traitement des résultats pour les présenter à l’utilisateur.
Pour l’ensemble de documents, nous allons réunir un corpus de textes traitant des procédures collectives (code de commerce – Livre IV – Des difficultés des entreprises).
L’indexation et l’orchestration globale du service seront assurées par une librairie python nommée Llamaindex. Enfin, le traitement final de la recherche sera prise en charge par GPT 4 d’OpenAI.
Source documentaire : le portail Legifrance
Nous allons l’utiliser pour rapatrier un ensemble de textes concernant les procédures collectives. L’objectif est de bâtir un outil dans un domaine technique et très spécialisé, permettant de procéder à des tests d’évaluation poussés, notamment en évaluant la capacité de notre système à répondre à des questions complexes et, éventuellement, à raisonner à partir de cas d’espèce.
Pour obtenir nos documents, il y a deux stratégies :
La librairie pylegifrance
Cette librairie python simplifie l’interrogation des contenus de Légifrance en créant des fonctions Python prêtes à l’emploi pour la recherche ou la consultation de textes légaux et réglementaires.
Elle permet de rapatrier des articles de code ou de textes précis (loi, ordonnance, décret, arrêté) et de les utiliser pour nos traitements. L’avantage est que nous pouvons rapatrier des articles individuellement identifiés avec leur structure hiérarchique, ce qui permet d’organiser de manière très fine nos stratégies d’indexation et de recherche. Cette approche sort du cadre de cet article.
La génération de pdf ou de fichiers textes
Une autre méthode, plus simple, pour constituer notre base est de se rendre sur le site de Légifrance et d’utiliser la fonctionnalité permettant de copier au format texte les résultats d’une recherche.
Il nous faut maintenant un outil capable de traiter ce corpus documentaire en les indexant et en permettant la recherche.
La librairie python Llamaindex
LlamaIndex se définit comme un « data framework » écrit en Python, permettant de construire rapidement des solutions complexes à partir des Large Language Models (LLM).
Plus précisément, cette librairie facilite la gestion d’ensembles documentaires complexes en les organisant sous forme d’index, qui peuvent prendre différentes formes. Dans cette perspective, les LLM constituent une composante clé de traitement tout au long de la chaîne, comme nous allons le voir.
Elle fait partie d’un ensemble plus vaste de librairies qui, à l’instar de LangChain, fournissent une intégration aisée avec les LLM. D’ailleurs, LlamaIndex inclut plusieurs fonctions de LangChain. Ces librairies présentent l’avantage de permettre de construire très rapidement des solutions complexes. En quelques lignes de code, vous pouvez élaborer un système complet, allant du prétraitement des documents à la recherche sémantique, puis au traitement final.
Mais si vous souhaitez aller plus loin, il est tout à fait possible de rendre l’application très détaillée pour une personnalisation optimale. Dans sa version la plus récente, le code a été restructuré pour mettre en exergue ces différents niveaux de complexité.
C’est la librairie que j’utilise pour organiser ma veille documentaire. Elle permet de déployer toute sorte d’applications :
- organisation de base de connaissances interne ;
- veille légale ;
- analyse de documents (classification, extraction de clauses, audit, etc.).
… et bien d’autres solutions imaginables…
La documentation étant très complète, je vous présente ici un résumé des fonctionnalités ainsi que les grands principes, avec un exemple sur l’indexation des normes en matière d’IA.
Les grandes fonctionnalités
Cette librairie propose nativement :
- des connecteurs de données pour intégrer les sources et formats de données existants (APIs, PDFs, documents, SQL, etc.) ;
- des moyens de structurer les données (indices, graphes) afin que ces données puissent être facilement utilisées avec les LLMs ;
- une interface de recherche/requête avancée sur les données (cf. troisième article) ;
- une intégration facile avec des applications externes comme LangChain, Flask, Docker, ChatGPT, etc.
Le dernier composant est le modèle de langage.
Les modèles de langage
Les modèles de langage peuvent intervenir à plusieurs étapes :
- En amont, un modèle va prendre des extraits de nos documents pour créer une représentation vectorielle du contenu.
- Pendant le traitement, le modèle nous servira pour réaliser des tâches spécifiques telles que l’analyse d’une requête, l’extraction de mots-clés, le résumé d’un document, etc.
- Enfin, en bout de chaîne, le modèle sera utilisé pour formater le résultat final ou évaluer le traitement.
Pour des raisons de simplicité et de performance, j’ai opté pour le standard du domaine, à savoir GPT-4. Ce choix n’est pas le plus recommandé en termes de gestion des données sensibles, notamment des données personnelles. Il est retenu ici uniquement à titre de démonstration.
Par ailleurs, LlamaIndex intègre nativement GPT-4, tout comme d’autres fournisseurs tels que HuggingFace.
Maintenant que nous avons choisi notre triptyque – documents, outils de recherche et de traitement – il faut concrètement mettre en place ces différents composants. C’est ce que nous verrons dans le prochain article.