Polydesk-logotype
Polydesk.ai — Header

Slot Filling

Le slot filling (remplissage de slots) est une tâche d’étiquetage de séquences en compréhension du langage naturel (NLU) qui consiste à identifier et extraire les paramètres pertinents (slots) dans un message utilisateur, en associant chaque mot ou groupe de mots à un type sémantique prédéfini comme une date, un lieu, un nom de produit ou un montant.

Slot Filling en bref
Catégorie
NLP / NLU / Systèmes de dialogue / Sequence Labeling
Type
Étiquetage de séquences (BIO tagging)
Approches
Joint BERT/DIET, BiLSTM-CRF, LLM extraction, CRF classique
Datasets
ATIS, SNIPS, MultiWOZ, CrossWOZ, xSID
Métriques
F1-score (slot-level), Joint Accuracy (intent + slots)
Lié à
Intent Classification, NER, Dialogue Management

Slot filling en contexte

Quand un utilisateur dit « Réserve-moi un vol Paris-Tokyo le 15 avril pour 2 personnes », l’intent classification identifie l’intention (book_flight). Le slot filling, lui, extrait les paramètres nécessaires pour exécuter cette action :

Mot/Groupe Slot Tag BIO
Réserve-moi O (outside) O
un O O
vol O O
Paris departure_city B-departure_city
Tokyo arrival_city B-arrival_city
le O O
15 avril departure_date B-departure_date I-departure_date
pour O O
2 num_passengers B-num_passengers
personnes O O

Sans slot filling, le chatbot sait que l’utilisateur veut réserver un vol, mais pas les détails. C’est comme si un agent de voyage entendait « je veux réserver » sans savoir où, quand, ni pour combien de personnes. Le slot filling comble ce manque en structurant l’information extraite du langage naturel.

Le schéma BIO et ses variantes

Le slot filling est formalisé comme un problème d’étiquetage de séquences (sequence labeling). Chaque token du message reçoit une étiquette selon le schéma BIO :

B-slot (Begin) : premier token d’une entité. « B-departure_city » marque le début d’une ville de départ.

I-slot (Inside) : tokens suivants de la même entité. « I-departure_date » pour le « avril » dans « 15 avril ».

O (Outside) : tokens qui ne font partie d’aucun slot.

Des variantes existent : BIO2 (identique à BIO mais avec des conventions plus strictes), BIOES (ajoute S pour single-token entities et E pour le dernier token), et BILOU (Begin, Inside, Last, Outside, Unit). En pratique, BIO est le plus utilisé car il offre le meilleur compromis simplicité/performance.

Slot filling vs. NER : quelle différence ?

Le slot filling est très proche de la reconnaissance d’entités nommées (NER), mais avec des différences importantes :

Aspect Slot Filling NER
Contexte Dialogue, requête utilisateur courte Documents, articles, texte long
Types d’entités Spécifiques au domaine (departure_city, num_passengers, cuisine_type) Génériques (PERSON, ORG, LOC, DATE)
Lié à Intent classification (modèle joint) Indépendant
Schéma Défini par le domaine applicatif Standards (CoNLL, OntoNotes)
Action Remplit les paramètres d’une action Structure l’information d’un document

En pratique, un NER générique peut servir de base pour le slot filling si les types d’entités correspondent. Mais les slots spécifiques à un domaine (type de cuisine, catégorie de produit, niveau de priorité) nécessitent un modèle entraîné sur des données spécifiques.

L’approche joint : intent + slots ensemble

La recherche montre clairement que traiter l’intent classification et le slot filling conjointement (joint model) produit de meilleurs résultats que de les traiter séparément. L’intuition est simple : savoir que l’intent est book_flight aide à identifier les slots (departure_city, arrival_city, date), et réciproquement, identifier les slots aide à confirmer l’intent.

Les architectures joint modernes partagent un encodeur commun (typiquement BERT) et utilisent deux têtes de sortie : une tête de classification pour l’intent (softmax sur le token [CLS]) et une tête d’étiquetage de séquences pour les slots (softmax par token). La loss est une combinaison pondérée des deux tâches.

Architectures joint de référence

JointBERT : l’approche fondatrice. BERT encodeur partagé + tête intent + tête slot. Simple, efficace, et le baseline que tout le monde compare. Atteint environ 97.5% d’accuracy d’intent et 96.1% de F1 de slots sur ATIS.

DIET (Dual Intent and Entity Transformer) : le modèle phare de Rasa. DIET est une architecture Transformer allégée conçue pour le NLU conversationnel, qui traite conjointement intent et slots avec des performances proches de BERT mais une inférence plus rapide. Son avantage : il peut combiner des embeddings pré-entraînés (BERT, GloVe) avec des features sparse (n-grammes) dans une architecture unifiée.

ESIE-BERT : publié dans ScienceDirect (2024), ce modèle résout un problème spécifique de BERT pour le slot filling. Le tokenizer WordPiece de BERT découpe les mots complexes en sous-tokens, créant un désalignement entre tokens et labels. ESIE-BERT utilise un Sub-word Attention Adapter pour exploiter explicitement l’information des sous-tokens, avec des gains mesurables sur ATIS et SNIPS.

Multichannel CNN-BiLSTM : un modèle publié en 2024 (PMC) qui combine des embeddings multiples (Word2Vec, fastText, BERT) via un CNN multi-canaux avec un BiLSTM pour capturer les features syntaxiques et sémantiques. Les résultats montrent des gains de 2 à 3 points de F1 en slot filling par rapport aux modèles BiLSTM-BERT classiques.

Graph-based models : des architectures utilisant des réseaux d’attention sur graphes (GAT) pour modéliser les interactions entre intents multiples et slots, particulièrement efficaces en multi-intent où un seul message contient plusieurs intentions avec des slots entrelacés.

Joint Accuracy : la métrique qui compte La métrique standard pour évaluer les modèles joint est la Joint Accuracy : le pourcentage de messages pour lesquels l’intent ET tous les slots sont correctement prédits simultanément. C’est une métrique sévère (une seule erreur de slot fait échouer tout le message), mais elle reflète la réalité en production : un chatbot qui identifie correctement l’intent mais se trompe sur la ville d’arrivée est inutile. Sur SNIPS, les meilleurs modèles atteignent environ 92-94% de Joint Accuracy.

LLMs pour le slot filling

Les grands modèles de langage transforment le slot filling en supprimant le besoin d’annotation BIO :

Extraction structurée par prompt : au lieu d’un modèle d’étiquetage de séquences, on demande au LLM d’extraire les slots en JSON. Cette approche est naturelle pour les LLMs qui excellent en sortie structurée.

Prompt :
"Extrayez les informations suivantes du message utilisateur :
- departure_city (ville de départ)
- arrival_city (ville d'arrivée)
- departure_date (date de départ, format YYYY-MM-DD)
- num_passengers (nombre de passagers)

Message : 'Je voudrais réserver un vol de Lyon à Berlin
le 22 mai pour 3 passagers'

Répondez uniquement en JSON."

Réponse LLM :
{
  "departure_city": "Lyon",
  "arrival_city": "Berlin",
  "departure_date": "2026-05-22",
  "num_passengers": 3
}

Function calling / Tool use : les LLMs modernes (GPT-5.4, Claude Opus 4.6) supportent nativement le function calling, qui est essentiellement du slot filling intégré au modèle. Vous définissez un schéma de fonction avec ses paramètres, et le LLM extrait automatiquement les valeurs à partir du message utilisateur. C’est la forme la plus moderne et la plus élégante de slot filling.

LLMs fine-tunés pour le NLU joint : des travaux récents (ACM Computing Surveys, 2025) montrent que les LLMs fine-tunés sur des datasets NLU surpassent les modules séparés et les LLMs non fine-tunés pour le joint intent + slot filling. L’approche CoF-CoT (Chain of Filling with Chain of Thought) décompose le NLU en étapes de raisonnement multiples, permettant au LLM de raisonner sur les slots à différentes granularités.

LLM vs. BERT pour le slot filling en production Les LLMs en zero-shot sont excellents pour le prototypage et les domaines à faible volume. Mais pour la production à haut débit (millions de messages/jour), BERT/DIET fine-tuné reste le choix dominant : latence 10-50x inférieure, coût 100x inférieur, et performances comparables ou supérieures quand les données d’entraînement sont suffisantes. Le function calling des LLMs est idéal pour les agents IA polyvalents qui doivent gérer des dizaines de domaines sans fine-tuning spécifique.

Datasets de référence

Dataset Intents Slot types Taille Domaine Particularité
ATIS 21 120 ~5 800 phrases Réservation aérienne Le classique, mono-domaine
SNIPS 7 72 ~14 000 phrases Assistant vocal (musique, météo, resto…) Multi-domaine, plus réaliste
MultiWOZ Multi Multi ~10 000 dialogues Multi-domaine Dialogues complets multi-tours
xSID 16 33 ~5 000/langue Assistant personnel Multilingue (13 langues)
CrossWOZ Multi Multi ~6 000 dialogues Tourisme (chinois) Cross-domain, chinois

ATIS (Air Travel Information System) est le dataset historique, utilisé depuis les années 1990. Il ne contient que des requêtes de réservation aérienne, ce qui le rend facile mais peu représentatif des cas réels. SNIPS est plus réaliste avec 7 domaines (musique, météo, restaurants, etc.) et une plus grande variété de formulations. MultiWOZ est le plus complet car il contient des dialogues multi-tours avec un suivi d’état (dialogue state tracking), pas seulement des requêtes isolées.

Évolution des méthodes

Ère CRF et HMM (2005-2015)

Les premiers systèmes de slot filling utilisaient des modèles séquentiels classiques : Hidden Markov Models (HMM) pour modéliser la séquence de slots, puis Conditional Random Fields (CRF) qui capturent les dépendances entre labels adjacents. Les CRF restent un composant utile comme couche de sortie dans les architectures modernes (JointBERT + CRF).

Ère RNN/BiLSTM (2015-2019)

Les réseaux récurrents bidirectionnels (BiLSTM) ont marqué un progrès majeur en capturant le contexte dans les deux sens. L’architecture BiLSTM-CRF (BiLSTM pour l’encodage + CRF pour le décodage) est devenue le standard, offrant le meilleur des deux mondes : représentations contextuelles apprises et contraintes structurelles sur les séquences de labels.

Ère Transformers (2019-aujourd’hui)

BERT et ses variantes ont remplacé le BiLSTM comme encodeur, apportant des représentations contextuelles pré-entraînées nettement supérieures. JointBERT (2019) a posé les bases. Les travaux ultérieurs (ESIE-BERT, SlotRefine, GL-GIN) ont raffiné l’architecture pour gérer les problèmes de sous-tokenisation, les interactions multi-intent/slot, et le transfer cross-lingue. Les modèles joints BERT atteignent 96-97% de F1 sur les slots ATIS et 95-96% sur SNIPS.

Ère LLMs (2023-aujourd’hui)

Les LLMs reformulent le slot filling comme une tâche de génération de texte structuré plutôt qu’un étiquetage de séquences. Le function calling et le JSON mode sont les mécanismes pratiques. Les LLMs fine-tunés pour le NLU joint montrent des gains par rapport aux modules séparés, surtout en scénario multi-domaine et multilingue. La tendance est aux systèmes hybrides où un DSL (Domain-Specific Language) sert d’interface entre le LLM et la logique métier.

Applications concrètes

Chatbots de service client : extraire automatiquement le numéro de commande, le nom du produit, la date d’achat et le type de problème à partir du message client. Chaque slot remplit un champ dans le CRM ou déclenche une requête API spécifique.

Assistants vocaux : « Mets de la musique jazz dans le salon » → slots : {genre: jazz, room: salon, action: play}. La vitesse d’extraction est critique (l’utilisateur attend une réponse immédiate).

Systèmes de réservation : hôtels, restaurants, transport. Les slots couvrent les dates, le nombre de personnes, les préférences (fenêtre/couloir, végétarien/non), le budget.

Formulaires conversationnels : au lieu de remplir un formulaire classique, l’utilisateur décrit sa demande en langage naturel et le système extrait les champs. C’est l’application qui se développe le plus avec les LLMs, car le function calling rend ce pattern trivial à implémenter.

Agents IA : les agents autonomes utilisent le slot filling (via function calling) pour extraire les paramètres nécessaires avant d’invoquer un outil ou une API. « Envoie un email à Marie avec le résumé du rapport Q3 » → slots : {recipient: Marie, content: résumé Q3, action: send_email}.

Implémentation pratique

# Option 1 : Hugging Face Token Classification
from transformers import pipeline

slot_filler = pipeline(
    "token-classification",
    model="dslim/bert-base-NER",  # NER générique comme base
    aggregation_strategy="simple"
)

result = slot_filler("Book a flight from Paris to Tokyo on April 15")
# → [{'entity_group': 'LOC', 'word': 'Paris', ...},
#    {'entity_group': 'LOC', 'word': 'Tokyo', ...}]

# Option 2 : LLM avec function calling (Claude/GPT)
# Définir les paramètres de la fonction
tools = [{
    "name": "book_flight",
    "description": "Réserve un vol",
    "input_schema": {
        "type": "object",
        "properties": {
            "departure_city": {"type": "string"},
            "arrival_city": {"type": "string"},
            "date": {"type": "string", "format": "date"},
            "passengers": {"type": "integer"}
        },
        "required": ["departure_city", "arrival_city", "date"]
    }
}]
# Le LLM extrait automatiquement les slots

Défis ouverts

Slots implicites : « Réserve pour demain » implique que la date est le lendemain de la date actuelle. Le système doit inférer et normaliser cette information. Les LLMs gèrent mieux les slots implicites que les modèles BIO classiques.

Multi-domaine et transfert : un modèle entraîné sur les réservations aériennes ne reconnaît pas les slots de réservation de restaurant. Le transfer learning cross-domaine et les modèles multilingues (xSID) adressent cette limitation.

Slots dans les dialogues multi-tours : « Je veux un vol pour Tokyo. Ah non, finalement Berlin. » Le système doit mettre à jour les slots au fil de la conversation, pas seulement les extraire d’un seul message. C’est le domaine du dialogue state tracking.

Sous-tokenisation : le tokenizer WordPiece de BERT découpe les mots rares en sous-tokens, créant un désalignement avec les labels BIO. Les solutions incluent ESIE-BERT (exploitation des sous-tokens) et l’alignement de labels post-tokenisation.

Verdict

Le slot filling est une tâche NLU mature avec des performances élevées sur les benchmarks (>96% F1 sur ATIS/SNIPS). L’approche joint (intent + slots dans un même modèle) est le standard, avec JointBERT et DIET (Rasa) comme solutions de référence. Les LLMs changent la donne non pas en améliorant les performances brutes, mais en simplifiant radicalement l’implémentation via le function calling, qui transforme le slot filling en un problème d’extraction structurée naturellement géré par le modèle.

Pour un projet concret : si vous construisez un chatbot dédié avec des données d’entraînement, Rasa avec DIET est le choix le plus robuste. Si vous construisez un agent IA polyvalent ou un prototype, le function calling de Claude ou GPT-5.4 est la voie la plus rapide et la plus flexible. Pour le français, les modèles multilingues (mBERT, XLM-RoBERTa) ou les LLMs multilingues fonctionnent bien sans données françaises spécifiques.


Questions fréquentes sur le slot filling

Quelle est la différence entre slot filling et NER ?

La NER identifie des entités génériques (personnes, lieux, organisations, dates) dans n’importe quel texte. Le slot filling identifie des paramètres spécifiques à un domaine (ville de départ, type de cuisine, numéro de commande) dans des requêtes utilisateur conversationnelles. Techniquement, les deux utilisent les mêmes algorithmes (BIO tagging, token classification), mais le slot filling est contextualisé par l’intent (les slots attendus dépendent de l’action identifiée) et fonctionne conjointement avec l’intent classification. Un NER générique peut servir de point de départ, mais les slots spécifiques à un domaine nécessitent un fine-tuning.

Le function calling des LLMs remplace-t-il le slot filling traditionnel ?

Fonctionnellement, oui : le function calling est une forme de slot filling intégrée au LLM. Vous définissez un schéma de fonction (paramètres + types), et le modèle extrait les valeurs à partir du message utilisateur. C’est plus simple à implémenter (pas d’annotation BIO, pas de modèle dédié) et plus flexible (changez le schéma sans ré-entraînement). Cependant, pour la production à haut volume, le coût et la latence des LLMs restent des contraintes. L’approche recommandée est d’utiliser le function calling pour le prototypage et les agents IA polyvalents, et BERT/DIET fine-tuné pour les chatbots à haut débit.

Pourquoi l’approche joint (intent + slots) est-elle meilleure ?

Parce que les deux tâches sont interdépendantes. Savoir que l’intent est book_hotel aide à interpréter « Paris » comme une destination (pas un nom de personne). Réciproquement, identifier des slots comme departure_date et arrival_city renforce la confiance sur l’intent book_flight. Les modèles joints partagent un encodeur qui apprend des représentations utiles aux deux tâches simultanément, ce qui améliore la Joint Accuracy de 2 à 5 points par rapport aux approches séparées.

Comment gérer le slot filling en français ?

Les options principales : (1) Rasa avec un modèle DIET entraîné sur des données françaises annotées en BIO. (2) XLM-RoBERTa ou mBERT fine-tuné sur le dataset xSID (qui inclut le français parmi ses 13 langues). (3) LLM multilingue (Claude, GPT-5.4, Mistral) avec function calling ou extraction JSON. (4) CamemBERT fine-tuné sur vos propres données. L’approche LLM est la plus rapide à mettre en place et ne nécessite aucune donnée annotée.

Combien de données d’entraînement faut-il pour un bon slot filling ?

Pour BERT/DIET fine-tuné : 50 à 200 exemples annotés par type de slot donnent des résultats solides (>90% F1). Pour les slots simples (dates, nombres, noms propres), moins d’exemples suffisent car le modèle transfère ses connaissances NER pré-entraînées. Pour les slots spécifiques au domaine (type de plan tarifaire, référence produit), plus d’exemples sont nécessaires. L’augmentation de données par LLM (générer des paraphrases annotées) peut multiplier un petit dataset par 5 à 10x avec des gains de performance mesurables.

Polydesk.ai — Footer