Polydesk-logotype
Polydesk.ai — Header

Intent Classification

L’intent classification (classification d’intention) est une tâche de compréhension du langage naturel (NLU) qui consiste à identifier automatiquement l’objectif ou l’action souhaitée derrière un message utilisateur, en l’assignant à une catégorie d’intention prédéfinie comme « réserver un vol », « suivre une commande » ou « réinitialiser un mot de passe ».

Intent Classification en bref
Catégorie
NLP / NLU / Systèmes de dialogue
Type
Classification multi-classe (single-intent ou multi-intent)
Approches
BERT/DIET fine-tuné, LLM zero-shot/few-shot, SetFit, SVM + embeddings
Datasets
CLINC150, BANKING77, SNIPS, ATIS, HWU64
Frameworks
Rasa, Dialogflow, Amazon Lex, Hugging Face
Métriques
Accuracy, F1-score (macro), taux OOS
Lié à
Slot Filling, Dialogue Management, Conversational AI

Le rôle central de l’intent classification

Quand un utilisateur écrit « Je veux annuler ma réservation » à un chatbot, le système doit comprendre que l’intention est cancel_booking, pas make_booking ni check_status. Cette identification de l’intention est la première étape critique d’un système de dialogue orienté tâche : sans une bonne classification d’intention, le chatbot ne peut pas déclencher la bonne action, extraire les bonnes entités (slot filling) ni produire la bonne réponse.

L’intent classification est au cœur de tous les assistants conversationnels : chatbots de service client, assistants vocaux (Alexa, Siri, Google Assistant), IVR (serveurs vocaux interactifs), et de plus en plus les agents IA autonomes qui routent les requêtes vers les bons outils ou APIs. Gartner estime que l’automatisation conversationnelle permettra de réduire les coûts de main-d’œuvre des centres de contact de 80 milliards de dollars d’ici 2026, et l’intent classification en est la brique fondamentale.

Intent classification dans le pipeline NLU

L’intent classification ne fonctionne pas seule. Elle fait partie d’un pipeline NLU qui comprend :

1. Prétraitement : tokenisation, normalisation (minuscules, correction de fautes), suppression du bruit (emojis, ponctuation excessive).

2. Intent classification : assignation du message à une catégorie d’intention.

3. Slot filling (extraction d’entités) : extraction des paramètres nécessaires à l’action. Pour book_flight, les slots sont la ville de départ, la ville d’arrivée, la date, le nombre de passagers.

4. Dialogue management : gestion de l’état de la conversation, demande de slots manquants, confirmation.

Certaines architectures traitent l’intent classification et le slot filling conjointement dans un même modèle (approche « joint »), ce qui améliore les performances car les deux tâches partagent des features utiles. Le modèle DIET (Dual Intent and Entity Transformer) de Rasa est l’exemple le plus connu de cette approche conjointe.

Défis spécifiques

Détection out-of-scope (OOS)

Un système de production ne reçoit pas que des messages correspondant à ses intents prédéfinis. Les utilisateurs posent des questions hors périmètre, font des erreurs, ou formulent des requêtes ambiguës. Le système doit reconnaître ces messages et les router vers un agent humain ou un fallback. Le dataset CLINC150 inclut spécifiquement une catégorie out-of-scope pour évaluer cette capacité.

La détection OOS est un défi majeur pour les classifieurs traditionnels qui ont tendance à forcer chaque message dans un intent connu, même quand la confiance est faible. Les LLMs, grâce à leur compréhension sémantique plus large, gèrent mieux la détection OOS, mais leur performance est fortement influencée par la taille de l’espace d’intents et la formulation du prompt. Des travaux récents (arXiv, 2025) proposent d’utiliser les représentations internes du LLM pour améliorer la détection OOS de plus de 5% en F1.

Multi-intent

« Je veux annuler ma réservation et demander un remboursement » contient deux intents distincts : cancel_booking et request_refund. Les systèmes single-intent échouent sur ces cas. Les approches multi-intent utilisent des classifieurs multi-label ou décomposent le message en sous-requêtes avant classification.

Ambiguïté et variabilité linguistique

« C’est quoi le tarif ? » peut correspondre à ask_pricing, check_plan ou compare_products selon le contexte. Les utilisateurs expriment le même intent de dizaines de manières différentes : « combien ça coûte », « quel est le prix », « c’est payant ? », « je veux savoir les tarifs », « pricing ? ». Un bon classifieur doit être robuste à cette variabilité tout en distinguant les intents proches.

Les grandes approches

Approche 1 : règles et mots-clés

L’approche la plus simple : des règles if/else basées sur la présence de mots-clés. « annuler » → cancel, « prix » → pricing. Rapide à mettre en place, facile à comprendre et à débugger. Mais fragile face aux synonymes, aux fautes d’orthographe et aux formulations imprévues. Ne convient que pour des prototypes ou des cas avec très peu d’intents (<5).

Approche 2 : ML classique (TF-IDF + classifieur)

Représenter chaque message en TF-IDF et entraîner un SVM ou une régression logistique. C’est le baseline historique, encore compétitif pour les domaines avec beaucoup de données d’entraînement. L’implémentation Rasa NLU (sklearn intent classifier) utilise cette approche. Les performances atteignent 90-95% d’accuracy sur les datasets standards quand le nombre d’intents est raisonnable (30 par intent).

Approche 3 : Transformers fine-tunés

Le fine-tuning de BERT, RoBERTa ou DistilBERT sur des données d’intent classification est l’état de l’art en production. Les performances atteignent 95-98% d’accuracy sur les benchmarks, et un chatbot médical basé sur BERT a atteint 98% de précision d’intent classification.

DIET (Dual Intent and Entity Transformer) : le modèle phare de Rasa, conçu spécifiquement pour le NLU conversationnel. DIET traite conjointement l’intent classification et le slot filling dans une seule architecture Transformer, avec des performances compétitives avec BERT mais une inférence plus rapide grâce à une architecture allégée.

SetFit Open Source : pour les situations few-shot (peu d’exemples par intent), SetFit de Hugging Face atteint des performances proches de BERT fine-tuné avec seulement 8 à 16 exemples par intent. C’est le choix optimal pour le bootstrapping de nouveaux intents.

Approche 4 : LLMs zero-shot / few-shot

Les grands modèles de langage peuvent classifier des intents sans données d’entraînement (zero-shot) ou avec quelques exemples dans le prompt (few-shot). L’intégration Rasa Labs propose un LLMIntentClassifier qui utilise un LLM via API avec du RAG (retrieval augmented generation) pour l’intent detection.

Avantages des LLMs pour l’intent classification : pas besoin de données d’entraînement pour démarrer, capacité à suggérer de nouvelles catégories d’intents à partir de requêtes réelles, gestion native du multilingue, et meilleure compréhension des formulations complexes ou ambiguës.

Limites : coût par requête plus élevé (problématique pour des millions de messages/jour), latence supérieure (1-5 secondes vs. <50 ms pour BERT), consistance moindre (le même message peut être classé différemment entre deux appels), et difficulté à auditer et débugger les décisions.

Hybride LLM + SetFit : le meilleur des deux mondes Des travaux récents (arXiv, 2025) proposent un système hybride avec routage basé sur l’incertitude : les messages pour lesquels le classifieur SetFit est confiant sont traités localement (rapide, peu coûteux), tandis que les messages ambigus sont routés vers un LLM pour une analyse plus fine. Cette architecture combine la vitesse du classifieur spécialisé avec la compréhension contextuelle du LLM, avec des gains de performance de plus de 5% sur la détection OOS.

Comparaison des approches

Approche Accuracy typique Données nécessaires Latence Coût OOS detection
Règles / mots-clés 60-80% 0 (règles manuelles) < 1 ms Gratuit Manuelle
SVM + TF-IDF 90-95% 30+ exemples/intent < 5 ms Très faible Faible
BERT fine-tuné 95-98% 50+ exemples/intent ~30-50 ms Faible (GPU) Moyenne
DIET (Rasa) 94-97% 30+ exemples/intent ~20-40 ms Faible Moyenne
SetFit 90-95% 8-16 exemples/intent ~30 ms Faible Bonne
LLM zero-shot 80-92% 0 exemples 1-5 s Élevé (API) Bonne
Hybride SetFit + LLM 95-98% 8-16 exemples/intent Variable Moyen Excellente

Datasets de référence

Dataset Nb intents Nb exemples Domaine Particularité
CLINC150 150 + OOS ~23 700 10 domaines Inclut out-of-scope ; le plus complet
BANKING77 77 ~13 000 Banque Fine-grained ; intents très proches
SNIPS 7 ~14 000 Assistant vocal Include slot annotations ; peu d’intents
ATIS 21 ~5 800 Réservation aérienne Classique ; inclut slot filling
HWU64 64 ~25 700 Assistant personnel Couvre 21 domaines

CLINC150 est le benchmark le plus exigeant et le plus utilisé en recherche : 150 intents répartis sur 10 domaines, avec une catégorie OOS explicite. BANKING77 est le plus difficile en termes de discrimination entre intents proches (par exemple, « card_not_working » vs. « card_payment_not_working »). SNIPS est le plus simple (7 intents) mais inclut des annotations de slots, utiles pour évaluer des modèles joints.

Cas d’usage

Chatbots et assistants de service client

Le cas d’usage originel. Chaque message entrant est classifié en un intent qui déclenche un flux de conversation spécifique : track_order → « Quel est votre numéro de commande ? », cancel_subscription → « Êtes-vous sûr de vouloir annuler ? », speak_to_human → transfert vers un agent. Les plateformes comme Rasa, Dialogflow (Google), Amazon Lex et Azure Bot Service intègrent l’intent classification comme composant central.

Assistants vocaux

Alexa, Siri, Google Assistant utilisent l’intent classification après la transcription speech-to-text. « Allume la lumière du salon » → smart_home_control avec slots {device: lumière, location: salon, action: allumer}. La contrainte de latence est plus stricte qu’en texte (l’utilisateur attend une réponse en temps réel).

Routage d’emails et de tickets

Classifier automatiquement les emails entrants par intention (demande d’information, réclamation, demande de devis, candidature) pour les router vers le bon service. C’est une application directe de l’intent classification dans un contexte non conversationnel.

Les moteurs de recherche et les systèmes de search AI utilisent l’intent classification pour comprendre si l’utilisateur veut naviguer (intent navigationnel), trouver une information (intent informationnel) ou acheter (intent transactionnel). Cette classification influence le type de résultats affichés.

Routage d’agents IA

Dans les architectures d’agents IA, l’intent classification détermine quel outil ou quelle API l’agent doit invoquer. « Traduis ce texte en espagnol » → outil traduction, « Génère un graphique de ventes » → outil data viz, « Envoie un email à Marie » → outil email. Le function calling des LLMs est une forme d’intent classification intégrée au modèle.

Augmentation de données par LLM

Le manque de données d’entraînement est le frein principal en intent classification. Les LLMs offrent une solution élégante : générer des paraphrases et des variantes de chaque exemple d’entraînement. Une étude publiée dans Applied Intelligence (Taylor & Francis, 2024) montre que l’augmentation par LLM améliore significativement la précision des classifieurs en scénarios low-data, en générant des exemples divers et réalistes qui couvrent mieux l’espace sémantique de chaque intent.

En pratique, vous fournissez 5 à 10 exemples d’un intent au LLM et lui demandez d’en générer 50 variantes. Cela transforme un problème de few-shot en un problème de full-shot, permettant d’entraîner un classifieur BERT standard avec des performances proches de celles obtenues avec un vrai dataset de grande taille.

Implémentation pratique

# Option 1 : Pipeline Hugging Face (zero-shot)
from transformers import pipeline

classifier = pipeline("zero-shot-classification",
                      model="facebook/bart-large-mnli")

result = classifier(
    "Je veux suivre ma commande",
    candidate_labels=["track_order", "cancel_order",
                      "return_product", "contact_support"]
)
print(result["labels"][0])  # → "track_order"

# Option 2 : SetFit (few-shot, 8 exemples par intent)
from setfit import SetFitModel, SetFitTrainer

model = SetFitModel.from_pretrained(
    "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2"
)
# Entraîner avec 8-16 exemples par intent
# → Accuracy ~92-95% sur CLINC150

# Option 3 : Rasa (production)
# config.yml :
# pipeline:
#   - name: WhitespaceTokenizer
#   - name: CountVectorsFeaturizer
#   - name: DIETClassifier
#     epochs: 100

Comment choisir son approche

Prototype rapide (jours) → LLM zero-shot via API. Zéro donnée d’entraînement nécessaire. Coût acceptable pour le test.

MVP avec peu de données (semaines) → SetFit avec 8-16 exemples par intent. Performances solides, déploiement local.

Production sérieuse (mois) → BERT fine-tuné ou DIET (Rasa) avec 50+ exemples par intent, augmentés par LLM. Latence faible, coût maîtrisé, auditabilité.

Production à très haut volume → SVM + embeddings pour le routage initial (ultra-rapide), BERT pour la confirmation, LLM pour les cas OOS.

Besoin multilingue immédiat → LLM zero-shot ou SetFit avec modèle multilingue. Pas de données annotées par langue nécessaires.

L’erreur classique : trop d’intents Un des problèmes les plus fréquents est de définir trop d’intents trop proches sémantiquement. Si « change_password » et « reset_password » sont deux intents distincts mais que les utilisateurs utilisent les mêmes formulations pour les deux, le classifieur échouera. Fusionnez les intents qui ne déclenchent pas des actions différentes. Si le même flux de conversation s’applique, c’est le même intent. Le dataset BANKING77 avec ses 77 intents très proches illustre parfaitement cette difficulté.

Verdict

L’intent classification est une tâche mature avec des solutions éprouvées pour tous les niveaux de maturité projet. BERT/DIET fine-tuné reste le sweet spot pour la production (95-98% d’accuracy, latence faible, coût maîtrisé). Les LLMs ont démocratisé le démarrage en supprimant le besoin de données annotées, et leur capacité à suggérer de nouveaux intents et à gérer le OOS est un atout majeur.

Pour le français, Rasa avec un modèle multilingue (ou CamemBERT), ou un LLM en zero-shot (Claude Sonnet 4.6, GPT-5.4) sont les meilleures options. L’architecture hybride SetFit + LLM est la direction la plus prometteuse pour combiner vitesse, précision et robustesse OOS.


Questions fréquentes sur l’intent classification

Quelle est la différence entre intent classification et text classification ?

L’intent classification est une forme spécifique de text classification appliquée aux messages utilisateurs dans un contexte conversationnel. La différence principale est le contexte d’usage : l’intent classification est conçue pour des entrées courtes (une phrase, une question), dans un dialogue interactif, avec des classes représentant des actions (pas des thèmes). Elle est étroitement liée au slot filling et au dialogue management, alors que la text classification générique est une tâche autonome.

Combien d’exemples faut-il par intent ?

Cela dépend de l’approche. Zero-shot avec LLM : 0 exemple. SetFit : 8 à 16 exemples suffisent pour des performances solides. BERT/DIET fine-tuné : 30 à 100 exemples par intent est la plage recommandée. SVM + TF-IDF : 50 à 200 exemples. L’augmentation de données par LLM permet de multiplier un petit dataset par 5 à 10x tout en améliorant les performances. En pratique, commencez avec 10 exemples par intent, augmentez par LLM, puis itérez en ajoutant les messages réels mal classés à vos données d’entraînement (active learning).

Comment gérer les messages hors périmètre (out-of-scope) ?

Trois stratégies principales : (1) Seuil de confiance : si aucun intent n’a une probabilité supérieure au seuil (typiquement 0.5-0.7), le message est classé OOS. (2) Intent OOS explicite : entraîner le classifieur avec des exemples OOS (le dataset CLINC150 inclut cette catégorie). (3) Détection d’anomalies sur les embeddings : si le message est trop éloigné de tous les centroides d’intents dans l’espace d’embeddings, il est OOS. Les LLMs sont naturellement meilleurs en détection OOS car ils comprennent que « quel temps fait-il ? » n’est pas une requête bancaire, même sans entraînement explicite.

Rasa ou Dialogflow : lequel choisir ?

Rasa est open source, auto-hébergeable, et offre un contrôle total sur le pipeline NLU (DIET, BERT, etc.). C’est le choix pour les entreprises soucieuses de la souveraineté des données, de la personnalisation avancée et du déploiement on-premise. Dialogflow (Google) est un service cloud managé, plus simple à démarrer, avec une bonne intégration Google Cloud et des features de maintenance plus accessibles. Pour le français, les deux fonctionnent, mais Rasa offre plus de flexibilité pour fine-tuner des modèles francophones comme CamemBERT. Pour un prototype rapide, Dialogflow. Pour une production exigeante, Rasa.

Les LLMs vont-ils remplacer les classifieurs d’intents ?

Pas entièrement, mais ils changent l’architecture. Pour les chatbots à faible volume ou les domaines très dynamiques (où les intents changent souvent), les LLMs en zero-shot sont déjà une alternative viable. Pour la production à haut volume (millions de messages/jour), le coût et la latence des LLMs restent prohibitifs. L’architecture hybride (classifieur rapide + LLM pour les cas ambigus) est la tendance dominante. La fonctionnalité de function calling des LLMs est, techniquement, une forme d’intent classification intégrée au modèle, ce qui brouille la frontière entre les deux approches.

Polydesk.ai — Footer