Je posais des questions au fichier Excel à l’aide du LLM et j’observais alors que le texte retourné dans la réponse n’était pas propre, je voyais des bouts de HTML et d’autres symboles. Je regardais plus en détail mon fichier Excel pour voir qu’effectivement, le téléchargement de certains emails les rendaient illisibles car ils étaient faits en HTML et non de texte brut. Voilà une piste de réflexion !
Il me fallait nettoyer la donnée et augmenter sa qualité. J’appris alors l’un des piliers de l’interaction avec un modèle d’IA, la qualité de la donnée d’entrée. La qualité de la donnée en sortie en sera d’ailleurs inéluctablement impactée.
La prochaine étape était donc d’améliorer la donnée. En utilisant des librairies Python, et en utilisant du « essaie-erreur », (je faisais des corrections de bug et d’exclusion de caractères non souhaité à la main), j’arrivais enfin à récupérer un fichier avec des corps d’email propre, avec du texte lisible et compréhensible. Après des semaines de galères, j’effectuais enfin une deuxième batterie de test.
Résultat : beaucoup de progrès, des réponses plus précises, avec du contexte trouvé dans les emails que je considérais satisfaisant pour ce prototype. Je savais cependant que ce n’était pas suffisant.

Deux variables étaient encore modifiables pour affiner la récupération du contexte, le chunking et l’embedding, j’avais gardé jusqu’alors les paramètres par défaut. Pour rappel, le chunking (ou fragmentation) est un principe qui consiste à diviser un texte en plusieurs morceaux pour en faire une analyse plus facile, très utile dans le cas où le document est volumineux par exemple. D’après mes recherches, le chunking peut être spécifique au fichier d’entrée. Pour un fichier :
- Word/txt – la division peut se faire au niveau des paragraphes ou des phrases
- PDF – la division est plus complexe par rapport à leur format. Il peut être nécessaire d’utiliser des bibliothèques Python pour extraire le texte et/ou images puis appliquez un chunking basé sur les paragraphes ou les pages.
- Powerpoint – la division peut se faire pour chaque diapositive.
- Excel – et dans mon cas, la division d’un fichier tableur comme Excel peut se faire sur chaque ligne voire chaque cellule
Concernant l’embedding (ou la vectorisation), le choix du modèle dépend de la complexité et de la nature du chunk d’entrée. D’après mes recherches, des modèles comme Word2Vec, GloVe ou encore BERT sont populaires et sont efficaces pour capturer le contexte dans le texte. La dimension du vecteur peut aussi être affinée. Augmenter la dimension peut être utile pour améliorer les nuances et le contexte mais nécessitera plus de ressources. Avec un modèle comme BERT, il est également possible de spécifier la fenêtre de contexte pour capturer le sens des mots dans leur environnement.
Bon, ces 2 paramètres me donnaient déjà de quoi faire. J’essayais de jouer avec le paramètre de chunking pour commencer, et d’analyser les résultats. Après de multiples essais et de multiples fichiers plus tard, je constatais une amélioration du contexte retourné.
Ce n’était pas le jour et la nuit, mais une amélioration tout de même. Je m’attaqua alors à la partie embedding, qui fut de courte durée, puisque rien de convainquant sorti de mes tests, des erreurs de codes et de compréhension du modèle sans doute, m’ont poussé à revenir en arrière et utiliser une vectorisation par défaut. Je ne fus pas trop déçu puisque l’application retournait maintenant des informations convaincantes quant aux fichiers d’entrées.
Je poussais la réflexion un peu plus loin, était-ce la fin du paramétrage possible ? Avais-je vu la plupart des choses importantes ? Est-ce qu’il y avait seulement ces 2 paramètres à changer ? Est-ce qu’il n’existait pas des technologies de manipulation de fichier ?
Puisqu’encore une fois, la qualité de la donnée d’entrée est primordiale, je me demandais donc si le chunk ne pouvait pas être assigné à une partie d’un document déjà traité ? C’est ainsi que je tombais sur d’autres technologies, capable de traiter et de préparer le fichier en amont, améliorant ainsi l’efficacité des chunks et embedding.

« Layout analysis », « Table Structure Recognition » ou encore « Optical Character Recognition (OCR) » sont des technologies capables de décomposer et d’identifier les composants du fichier et ainsi d’en améliorer sa compréhension générale.
Rentrer dans ce niveau de détail était un vrai casse-tête. La compréhension et la mise en œuvre de ces technologies est toujours en cours à ce jour ! L’application est maintenant en état de marche, avec des résultats satisfaisant. Ce petit projet arrive donc à son terme.
Si je devais faire une rétrospection, je dirais que ce milieu de l’intelligence artificielle est vaste et passionnant. Il faut se plonger dedans pour espérer comprendre et trier le vrai(état de l’art actuel basé sur les faits) du faux(le marketeur foufou qui promet l’intelligence artificielle générale d’ici 6 mois, tous les 6 mois). La construction d’une application n’est pas si difficile techniquement, surtout avec les outils d’aujourd’hui eux aussi basé sur l’IA, mais l’appréhension de ce sujet demande un certain effort.
Il est quand même bon de constater que l’IA actuelle, pour la première fois dans l’informatique, est un outil sur lequel nous ne pouvons pas avoir 100% confiance. Ce qui en fait, pour moi, un outil qui ne fonctionne pas ! Tout du moins, je pense que son utilisation doit être mûrement réfléchi et utilisé dans des cas très précis, avec une réelle valeur ajoutée, basé sur des données métiers spécifiques.
Sur ces paroles, je vous laisse, en espérant vous retrouver pour une prochaine histoire.
