Code2Text

Générer des libellés pour de la codification automatique

Matéo Morin
mateo.morin@insee.fr

Insee, SSP Lab

19 mai 2026

1️⃣ Contexte

La codification automatique de libellés

Text2Code

Objectif initial : codifier des libellés dans une nomenclature.

  • NAF/NACE, COICOP, …
  • La nomenclature peut être très vaste (plusieurs centaines de codes différents).

On détient une notice associée à la nomenclature :

  • La notice est exhaustive ;
  • Elle contient souvent les champs code, titre, includes, excludes.

On détient parfois déjà des paires libellés/code issues de données réelles.

La codification automatique n’est pas évidente

Plusieurs difficultés majeures à l’apprentissage :

  • Défaut de couverture des données d’entraînement ;
  • Actualisation possible de la nomenclature ;
  • Bruit sémantique : fautes d’orthographe, infos personnelles, typos, …
  • Bruit d’annotation : mauvais code pour le libellé ;
  • Possible manque de données : passage à l’anglais, nouvelle nomenclature, …

→ Sans génération de données synthétiques, la codification automatique peut être imprécise, voire impossible.

2️⃣ La génération de données synthétiques

Le cas particulier de notre contexte

La génération de données habituelle repose sur la donnée entrante uniquement :

  • Sans LLM : reproduire une distribution avec des garde-fous ;
  • Avec LLM : donner le plus de contexte et des exemples few-shot ;
  • La donnée générée n’apporte pas d’innovation à la donnée d’entraînement.

Dans notre cas, on détient une notice pour la nomenclature :

  • Information supplémentaire exhaustive ;
  • Adaptée pour les LLM : on fournit des éléments de la notice en contexte.

Objectifs recherchés

Objectifs généraux pour la génération de donnée :

  • Augmenter/diversifier/générer la donnée d’entraînement des classifieurs ;
  • Pouvoir partager la donnée sans fuite du dataset original, tout en rendant compte de son format, de sa distribution, et de la sémantique des libellés ;
  • Créer des scripts de génération agnostiques de la nomenclature.

Les objectifs ne convergent pas forcément autour d’un unique outil :

  • Améliorer les performances d’un classifieur par la donnée, c’est rarement reproduire la distribution originale ;
  • Risque de se rapprocher de données bruitées indésirables.

Evaluation de la génération

Axes majeurs à explorer :

  • Performances du classifieur selon la construction du jeu d’entraînement (données synthétiques plus ou moins présentes) ;
  • Diversité de la génération : utilisation de scores d’embeddings (DCScore, IMMD, …), ou des rapprochements sémantiques (Jaccard Similarity, Self-BLEU, …) ;
  • Viser la distribution sémantique originale : soit avec les mêmes méthodes que pour la diversité, soit avec l’utilisation d’un discriminateur IA/humain.

On recherche de bonnes performances dans ces trois domaines indépendamment du code derrière les libellés générés.

3️⃣ Naive Code2Text

Génération augmentée par la notice

Principe général de Naive Code2Text

Naive Code2Text

Passage à l’échelle : parallélisation

On prend le schéma précédent, et on l’adapte pour lancer des requêtes API en parallèle :


Naive Code2Text with parallel configuration

Premiers résultats

Points positifs :

  • La génération est très fidèle à la notice ;
  • Grande diversité dans les thématiques (grâce à la diversité dans la notice) ;
  • Génération plutôt rapide (environ 100 000 libellés/heure).

Point négatif majeur : la donnée est “trop parfaite”

  • Ton professionnel ;
  • Syntaxe et grammaire irréprochables ;
  • Vocabulaire proche de la notice.

→ Données peu exploitables

4️⃣ Code2ReText

Ajouter un niveau de profondeur

LabelGuard : Discrimination des libellés

Entraînement d’un discriminateur IA/humain sur les embeddings des libellés (dim = 4096) :

  • Benchmarking de plusieurs modèles via MLFlow ;
  • Grid Search rapide sur les hyperparamètres ;
  • Choix du modèle avec le meilleur FPR (val).

Résultat : MLP (4096 → 1024 → 256 → 1) avec dropout initial (0.3)

  • FPR : 0.69 %
  • Accuracy : 99.4 %

→ Déploiement sur une API : https://labelguard.lab.sspcloud.fr/

Rappel : Naive Code2Text

Naive Code2Text - agent version

Code2Retext : discriminateur in the loop

Code2ReText - loop

Autre structure possible (version agentic)

Code2ReText - agentic

5️⃣ Perspectives

Travail futur

Améliorer Code2ReText

  • Prendre en compte systématiquement LabelGuard ;
  • Eviter les hallucinations ou autres dérives (recopier le même libellé, tromper le discriminateur, …).

Passer au Supervised Fine Tuning (SFT)

  • Idée : mimer la distribution sémantique originale ;
  • Grand enjeu de stabilité au cours des itérations ;
  • Passer à un paradigme tourné RLHF si inefficace.

Parvenir à un outil exploitable et performant

Evaluer précisément les générateurs (benchmark final)

  • Performances du classifieur avec la donnée synthétique ;
  • Comparer diversité intrinsèque // similarité avec la donnée originale.

Mettre en production le générateur performant

  • API pour la NAF ;
  • Déployer pour la NACE en traduisant ?
  • Code pour les autres nomenclatures.

Planning

Planning du stage

📖 Retour au Rapport