Note : Ce contenu faisait auparavant partie du site web ouimaisjellm.ca. Il a été importé ici pour archivage.
On m’a posé une question sur l’organisation des procès-verbaux d’une association. En gros, comment l’IA générative peut-elle (ou non) aider à structurer l’historique des résolutions au fil des années ? Est-ce que c’est mieux d’utiliser de l’IA générative ou un moteur de recherche ici ?
🌘 Définissons le problème
Avant d’utiliser un RAG ou un moteur de recherche, voyons d’abord ce qu’on cherche vraiment à accomplir.
Nous avons une archive de documents non structurés, par exemple, des documents texte au format Word. C’est notre point de départ. Nous souhaitons comme résultat un tableau avec toutes les résolutions proposées, la date, le résultat du vote et un lien vers le procès-verbal concerné.
Nous faisons face à un problème assez typique de science des données. Est-ce que l’approche RAG (Retrieval Augmented Generation) que je présente dans la formation Utiliser des chatbots LLM localement et protéger ses données est appropriée ici.
Rapidement, ma réponse est… pas tout de suite. Mais, ça peut être utile en complément d’une approche par moteur de recherche et une utilisation plus en mode programmée d’un modèle de langage. L’essentiel du travail se fait avant même d’utiliser l’IA générative textuelle en mode conversation.
Le RAG va extraire des éléments sémantiquement similaires d’un corpus d’extraits de textes découpés grossièrement pour les ajouter au prompt utilisé pour appeler un modèle de langage. Ici, comme on parle de contenu à portée légale, l’exactitude est importante. On sait tous à quel point il y a toujours quelqu’un pour jouer avec les virgules dans ce genre de rencontres.
Ces algorithmes ont du mal avec les doubles négations et les sous-entendus. Dans les rencontres délibératives, les arguments reposent souvent sur des connaissances préalables non écrites ou inaccessibles. Un modèle d’IA générative n’a généralement pas accès à ces informations et ne peut donc pas offrir de réponses personnalisées.
Alors, ce qu’on a besoin, c’est davantage un moteur de recherche. Cependant, ces outils, tels que OpenSearch, TypeSense ou MeiliSearch (voir cet article) nécessitent des données bien formatées en entrée pour créer leur index.
On utilisera l’IA générative textuelle pour transformer les documents en données pour le moteur de recherche. On privilégiera un moteur de recherche traditionnel (index inversé) et on pourra utiliser la recherche hybride si elle est disponible.
🌘 Comment l’IA générative et un moteur de recherche peuvent aider à structurer tes documents ?
🌘 Étape 1 : Transformer les documents en texte
Voici les étapes pour un document. Ensuite, on pourra construire une mécanique d’automatisation du procédé avec soit un script dans le langage Python ou un outil de développement sans code, tel que n8n.
La première étape est de convertir le document en texte. Un outil comme pandoc pourra convertir tous les textes au format Markdown qui est bien compris par les différents modèles d’IA générative textuelle.
🌘 Étape 2 : Extraire les données clés avec l’IA
La seconde étape est d’utiliser l’IA générative textuelle pour faire l’extraction des entités nommées qui décrivent la résolution :
- Titre de la résolution
- Numérotation de la résolution, s’il y a lieu
- Texte de la résolution
- Résultat du vote
- Date du vote (mentionner le format souhaité, par exemple ISO-8601 sous la forme yyyy-mm-dd pour avoir des dates indexées par le moteur de recherche par la suite)
- Qui a proposé et secondé le texte original
- Un historique des amendements, s’il y a lieu
On crée maintenant un prompt qui extrait ces éléments spécifiques et les retourne dans un fichier normalisé au format JSON. Idéalement, on fournit un exemple de fichier en entrée et en sortie pour que le modèle puisse généraliser.
-
- « Extrait toutes les résolutions de ce document de procès-verbal, incluant les champs suivants : (énumérer les champs ici) et retourne-les au format JSON. Voici un exemple de résolution que tu pourras retrouver dans le document, ainsi que le format de données que je souhaite en sortie … (insérer l’exemple en JSON ici) ».
- On pourra ensuite ajouter une URL vers le document à ce fichier JSON.
🌘 Étape 3 : Créer un moteur de recherche interne
Maintenant que les données sont prêtes, on peut enfin penser à l’indexation. Un moteur de recherche va nous permettre d’indexer les documents individuels extraits par l’IA générative textuelle et permettre de les retrouver.
C’est important ici de choisir un moteur de recherche qui peut être utilisé comme source vectorielle si on veut utiliser de la recherche sémantique ou du RAG. Il faut aussi, si on utilise un outil sans code tel que Flowise, s’assurer qu’il y a les modules d’intégration. Ce n’est pas le cas pour Typesense, par exemple, en ce moment.
- Dans un moteur de recherche tel que OpenSearch, on crée un index pour recevoir les résolutions avec le même modèle JSON que l’on a proposé au modèle de langage précédent.
- On active ensuite la recherche en plein texte et la recherche sémantique, puis on indexe les documents de résolutions un par un dans le moteur de recherche.
- Une résolution ici, c’est un document. Donc chaque document Word source peut produire un ou plusieurs documents de résolution.
- L’IA générative textuelle va probablement retourner un seul document sous forme d’une liste. Il faut alors penser à itérer sur chacun des éléments avec du code.
- Une fois que les résolutions sont indexées, on peut ensuite utiliser le moteur de recherche directement pour obtenir des résultats sur des termes précis.
Pas besoin nécessairement de coder : ces étapes peuvent aussi être automatisées avec un outil sans code comme n8n ou Make.
🌘 Étape 4 (optionnel) : Un RAG pour poser des questions ouvertes
On peut utiliser un moteur de recherche comme source de données pour un RAG dans un flux de traitement IA comme Flowise.
Le RAG est une solution approximative avec une composante aléatoire, sans capacité de réflexion ou de combinaison logique. Il donne des résultats plus précis et utiles que de poser des questions à un modèle de langage sans contexte, mais ne remplace pas la recherche. Il résume l’information et aide à comprendre un sujet dans une masse de documents, mais pas pour la recherche précise. Il ne peut servir de référence sans consulter ses sources, qui peuvent être moins précises qu’un moteur de recherche indexé, selon la question.
🌘 IA générative, ou moteur de recherche ?
Selon le besoin de précision ou de généralisation, il peut ne pas être nécessaire d’aller au-delà de la recherche dans le moteur de recherche choisi. Pour les décisions par résolution, je préfère un moteur de recherche utilisant des documents extraits par un index inversé plutôt que le RAG, car les algorithmes génératifs peuvent créer des hallucinations lorsqu’ils manquent de contexte externe. Quitte à devoir faire un peu plus de lecture !
Le RAG peut être utile pour orienter la recherche ou du moins savoir s’il pourrait exister une réponse à notre question dans les documents. Si le premier résultat n’a pas trop rapport, le reste n’en aura pas plus !
🌘 TL;DR – En résumé
Les procès-verbaux d’une association forment souvent un ensemble de fichiers non structurés, difficiles à exploiter. En combinant IA générative et moteur de recherche, on transforme ces documents en base de données consultable :
- L’IA sert à extraire automatiquement les champs utiles : titre, date, résultat du vote, participants, amendements.
- Le moteur de recherche (ex. OpenSearch, TypeSense, MeiliSearch) permet ensuite de retrouver rapidement une résolution en particulier par mots-clés ou filtres.
- L’approche RAG (Retrieval-Augmented Generation) peut s’ajouter pour résumer des ensembles de textes, sans remplacer la recherche exacte.
- En clair : l’IA prépare la donnée, le moteur de recherche la rend exploitable. C’est une combinaison gagnante pour rendre les archives d’un conseil d’administration plus facile d’accès sans perdre la rigueur juridique des procès-verbaux originaux.
🌘 Pose-moi ta question
Tu souhaites que je réponde à la question techno qui te trotte dans la tête en ce moment ? Je vais répondre à une question reçue en public à chaque mois, et je réponds à toutes les autres questions reçues dans l’infolettre privée ou par podcast privé ! Je répondrai aux questions reçues en novembre, au début du mois de décembre.