Nous présenterons lors de la journée GANESHs du 15 avril (qui fait suite à celle-ci) la version alpha d’une plateforme développée dans le cadre du programme d’expérimentation GANESHs IA (présenté ici) . Nous souhaitons en partager prochainement le code et ouvrir le développement à de nouvelles collaborations.
Un aperçu de l’utilisation du modèle Gliner sur un texte non balisé
Objectifs
Cet outil, en phase de développement, est destiné à tester les possibilités de modèles de langue légers et Open Source pour des tâches comme la détection d’entités nommées, la recherche sémantique, la classification de textes… Les modèles choisis peuvent fonctionner sur un ordinateur classique (en CPU) et sans connexion internet, ce qui nous garantit la maîtrise des données, sans frais d’abonnement ni autre dépense que l’investissement matériel.
Notre parti pris est donc résolument low tech, et s’appuie sur deux constats: d’abord celui d’une imperfection ou d’une faillibilité fondamentale des modèles proposés par les géants de l’IA. Derrière les miroirs aux alouettes du remplacement de l’humain, il y a toujours un travail de vérification des outputs. La question est donc celle du ratio entre le temps de vérification et celui gagné par l’usage (payant) du modèle en ligne. Deuxième constat : il y a des alternatives, certainement moins efficaces, mais dont nous pouvons contrôler la mise en oeuvre (sans parler de la production de nos propres modèles).
Ces alternatives, couplées avec des outils de correction collaborative comme Doccano ou Argilla, peuvent produire des résultats suffisamment intéressants pour nous faire gagner du temps sur certaines tâches fastidieuses. Outre la gratuité, la sobriété énergétique et la maîtrise des données, l’utilisation ‘en local’ de ces modèles assure une reproductibilité des tests et une meilleure compréhension de leurs biais et autres limitations, alors que les APIs et webservices bien connus sont à la fois opaques et en évolution constante.
Enfin, nous avons également planifié l’ouverture d’un serveur GPU à l’Université, ce qui rendra possibles des tâches plus complexes (production de résumés de documents, interrogation de ces résumés en ‘langage naturel’, génération de graphes de connaissances), via la même application et avec les mêmes garanties de sécurité, et toujours le souci d’une sobriété énergétique maximale.
Scénarios d’utilisation
Un premier scénario d’utilisation (déjà implémenté) est celui de l’import d’un corpus en XML, pour repérer des types d’information et les baliser automatiquement, corriger les annotations dans la plateforme Argilla, puis exporter le résultat dans un format compatible avec l’outil de textométrie TXM (1) . Ce scénario peut correspondre à plusieurs opérations de recherche comme la fouille de texte, l’indexation pour une publication en TEI, ou encore la pseudonymisation d’entretiens ou de documents d’archives.
Import d’un fichier XML, correction dans Argilla puis export XML
La plateforme est installée avec quatre modèles par défaut : deux modèles de la librairie Spacy, un modèle basé sur ModernBERT adapté au français, et le modèle Gliner. Celui-ci permet de définir arbitrairement des types d’information : alors que les modèles classiques détectent 4 types d’entités (personnes, lieux, organisations, autres [‘misc’]), il devient possible de demander au modèle de repérer des références bibliographiques, des activités professionnelles, des informations géographiques (par exemple, il est possible de distinguer ville et pays, comme le montre la 1re vidéo)…
Un autre scénario serait de pré-annoter un corpus d’entretiens ou d’articles de presse pour l’importer ensuite dans un outil d’annotation qualitative comme QualCoder. Dans ce scénario, on utilise dans un premier temps la recherche sémantique pour sélectionner des extraits représentatifs puis, dans un second temps, on réalise l’entraînement d’un mini-classifieur à partir de cette sélection. Les segments pré-annotés peuvent ensuite être récupérés dans QualCoder.
La vidéo ci-dessous montre comment créer un vector store à partir de deux fichiers XML : dans un premier temps il est nécessaire de calculer des embeddings (ici avec un ModernBERT adapté pour le français) et d’importer les paragraphes dans la base de données (ici Chroma avec LangChain). Cette opération est plus ou moins longue selon le volume de texte et la puissance CPU. Pour donner un ordre d’idée, le processus d’import/vectorisation prend 19 secondes pour un corpus d’environ 90k signes, soit une soixantaine de pages, avec un processeur Intel i7 de 16 coeurs et 32 Go de RAM.
Dans un 2nd temps, le corpus — composé d’une centaine de paragraphes tirés d’un article sur Victor Hugo et d’un autre sur Napoléon III — devient interrogeable. Et ce, sans connaître le lexique au préalable : on peut formuler une question rédigée en ‘langage naturel’, ou une requête thématique simple, pour identifier les passages les plus pertinents, sans savoir a priori quels mots chercher dans le corpus (N. B.: la pertinence est définie via un simple calcul de similarité entre les embeddings de la question et ceux des paragraphes stockés dans Chroma).
Cette approche basée sur des modèles de langue légers vient donc compléter l’approche textométrique classique et lui adjoint un traitement préalable appréciable — puisqu’il n’est plus nécessaire de dégager par tâtonnements itératifs des mots-clés caractérisant une thématique : les résultats de la recherche sémantique et Gliner donnent en quelques clics un lexique très utile qu’il est difficile d’obtenir avec les outils classiques.
Enfin, un module graphique d’annotation permet de sélectionner des passages pour réaliser ensuite l’entraînement d’un classifieur basé sur FlauBERT (en cours d’implémentation). La sélection des segments de texte peut se faire en utilisant un jeu de tags prédéfinis mais il est possible de le personnaliser à volonté (cf. dernière partie de la vidéo).
Modèles et modules
La structure de la plateforme se compose d’un frontend JavaScript (Vue3) et de modules python gérés par FastApi. Elle communique également avec la plateforme Argilla (qui peut s’installer très facilement grâce à une image Docker).
Cette architecture permet d’installer facilement de nouveaux modèles, et devrait permettre la réutilisation rapide de modules python. Par exemple, j’ai commencé les tests pour la fonctionnalité de recherche sémantique en utilisant un modèle basé sur CamemBERT, que j’ai pu optimiser au format ONNX Q-int8 avec la VM GPU dont nous disposons sur Lyse Cloud. Mais un modèle plus récent, basé sur ModernBERT, est à la fois plus rapide et capable de traiter un contexte plus grand (8192 tokens contre 512). Le remplacement de l’ancien modèle par le nouveau se fait en une dizaine de lignes de code — et pourra être implémenté dans l’interface si besoin.
Il s’agit donc à l’heure actuelle d’un bac à sable qui nous donne la possibilité de tester des modèles pour différents types de corpus sur des tâches de recherche d’information, d’indexation et de représentation de connaissances, mais aussi de développer rapidement de nouvelles fonctionnalités en reprenant la trame des modules existants. La prochaine étape du développement sera la production de mini-modèles de classification entraînés à partir des exemples sélectionnés.
- Dans cette vidéo, je reprends l’exemple de l’article de Wikipedia sur Victor Hugo, préalablement transformé en XML. Le modèle Gliner est chargé avec les mêmes catégories que dans la première vidéo. On récupère ensuite les annotations de Gliner dans Argilla, où l’on peut les corriger. On peut également sélectionner les passage les plus proches sémantiquement : je conserve les 10 premiers résultats de la rercherche sémantique, dont les annotations sont enfin ajoutées dans une copie du fichier XML initial. Ces annotations étant marquées par la balise <span ref=”…”>, elles deviennent interrogeables dans TXM avec la requête : [ _.span_ref=”…” ]. ↩︎



