Polydesk-logotype
Polydesk.ai — Header

Topic Modeling (Modélisation de Thèmes)

Le topic modeling est une technique de NLP non supervisée qui découvre automatiquement les thèmes (topics) latents présents dans un corpus de documents, sans catégories prédéfinies. Chaque topic est représenté par un groupe de mots qui co-apparaissent fréquemment et caractérisent un sujet distinct.

Imaginez 50 000 avis clients. Un humain mettrait des semaines à les lire et les catégoriser. Un algorithme de topic modeling les analyse en quelques minutes et vous dit : « Topic 1 : livraison (mots-clés : délai, colis, retard, transporteur), Topic 2 : qualité produit (mots-clés : défaut, cassé, matériau, solidité), Topic 3 : service client (mots-clés : réponse, attente, remboursement, assistance) ». C’est la capacité à faire émerger une structure thématique d’un texte brut, sans supervision humaine, qui rend le topic modeling indispensable en text mining.

Topic Modeling en bref
Catégorie
NLP / Text Mining
Type
Apprentissage non supervisé
Algorithme classique
LDA (Latent Dirichlet Allocation, 2003)
Algorithme moderne
BERTopic (Grootendorst, 2022), FASTopic, Top2Vec
Input
Corpus de documents textuels
Output
Liste de topics (groupes de mots-clés) + assignation de chaque document à un ou plusieurs topics

Comment fonctionne le topic modeling

Le topic modeling repose sur une hypothèse simple : chaque document d’un corpus traite d’un ou plusieurs thèmes, et chaque thème se caractérise par l’usage récurrent de certains mots. L’algorithme détecte ces patterns de co-occurrence pour découvrir les thèmes sous-jacents sans qu’on lui dise à l’avance quels thèmes chercher.

Deux grandes familles d’approches existent : les méthodes probabilistes classiques (LDA, NMF) et les méthodes neuronales modernes (BERTopic, Top2Vec, FASTopic).


LDA : l’approche classique

LDA (Latent Dirichlet Allocation), proposé par Blei, Ng et Jordan en 2003, est l’algorithme fondateur du topic modeling. Son modèle génératif repose sur deux distributions probabilistes :

Distribution document-topic : Chaque document est modélisé comme un mélange de topics. Un article sur l’IA appliquée à la santé pourrait être composé de 60% du topic « intelligence artificielle » et 40% du topic « santé ».

Distribution topic-mot : Chaque topic est modélisé comme une distribution sur les mots du vocabulaire. Le topic « intelligence artificielle » aurait des probabilités élevées pour les mots « modèle », « données », « entraînement », « réseau » et des probabilités faibles pour « patient », « diagnostic ».

LDA utilise un processus génératif bayésien : pour chaque mot d’un document, il suppose qu’un topic a d’abord été choisi (selon la distribution du document), puis un mot a été tiré de ce topic. L’algorithme infère les distributions optimales par des méthodes variationnelles ou par échantillonnage de Gibbs.

Les paramètres clés de LDA Vous devez spécifier le nombre de topics K à l’avance. C’est le principal inconvénient : comment savoir combien de thèmes existent dans votre corpus ? Des métriques comme la cohérence des topics (coherence score) et la perplexité aident à choisir K, mais le résultat optimal nécessite souvent de l’expérimentation. Les hyperparamètres alpha (distribution document-topic) et beta (distribution topic-mot) contrôlent la granularité : un alpha faible produit des documents concentrés sur peu de topics, un beta faible produit des topics avec peu de mots dominants.

Limites de LDA

LDA a dominé le topic modeling pendant presque vingt ans, mais ses limites sont bien identifiées. Il repose sur le bag-of-words : l’ordre des mots est ignoré, ce qui fait que « le chat mange la souris » et « la souris mange le chat » sont identiques pour LDA. Il nécessite un prétraitement intensif (tokenization, suppression des stop words, lemmatisation). Il ne capture pas les relations sémantiques entre les mots. Et le choix du nombre de topics est toujours difficile.

NMF : une alternative à LDA

NMF (Non-negative Matrix Factorization) est une approche algébrique : elle factorise la matrice document-terme en deux matrices non négatives (document-topic et topic-terme). NMF est souvent plus rapide que LDA et produit des topics plus interprétables sur certains corpus, notamment les textes longs. Mais comme LDA, elle repose sur le bag-of-words et nécessite de spécifier le nombre de topics.


BERTopic : la révolution neuronale

BERTopic, créé par Maarten Grootendorst en 2022, est devenu l’outil de référence pour le topic modeling en production. Il remplace le bag-of-words par des embeddings contextuels et introduit un pipeline modulaire en quatre étapes.

Le pipeline BERTopic

1. Embedding des documents : Chaque document est transformé en vecteur dense par un modèle de bi-encoder (typiquement un Sentence Transformer comme all-MiniLM-L6-v2 ou un modèle multilingue). Ces embeddings capturent le sens sémantique, pas juste les mots.

2. Réduction de dimensionnalité (UMAP) : Les embeddings haute dimension (384 à 1024 dimensions) sont projetés en 2 à 10 dimensions par UMAP (Uniform Manifold Approximation and Projection). Cette étape préserve la structure locale des données tout en rendant le clustering faisable.

3. Clustering (HDBSCAN) : Les documents projetés sont regroupés par HDBSCAN (Hierarchical Density-Based Spatial Clustering of Applications with Noise). Contrairement à K-Means, HDBSCAN ne nécessite pas de spécifier le nombre de clusters à l’avance et identifie automatiquement les documents « bruit » qui n’appartiennent à aucun topic.

4. Représentation des topics (c-TF-IDF) : Pour chaque cluster, BERTopic calcule un TF-IDF par classe (c-TF-IDF) : les mots les plus caractéristiques de chaque cluster par rapport au reste du corpus. Le résultat est une liste de mots-clés pour chaque topic, facilement interprétable.

from bertopic import BERTopic

# Pipeline complet en 3 lignes
topic_model = BERTopic(language="french", nr_topics="auto")
topics, probs = topic_model.fit_transform(documents)

# Voir les topics découverts
topic_model.get_topic_info()
# Topic 0: livraison_délai_colis_retard (1523 docs)
# Topic 1: qualité_produit_défaut_cassé (987 docs)
# Topic 2: service_client_réponse_attente (654 docs)
# Topic -1: outliers / bruit (312 docs)

# Visualisation interactive
topic_model.visualize_topics()

BERTopic vs LDA : comparaison

Critère LDA BERTopic
Représentation du texte Bag-of-words (fréquence de mots) Embeddings contextuels (sens sémantique)
Nombre de topics À spécifier manuellement Détecté automatiquement (HDBSCAN)
Prétraitement Intensif (stop words, lemmatisation, stemming) Minimal (texte brut accepté)
Cohérence des topics Correcte mais variable Supérieure (clusters plus compacts et séparés)
Textes courts Faible (peu de mots par document) Bon (les embeddings compensent la brièveté)
Multilingue Nécessite un prétraitement par langue Natif (via un modèle d’embedding multilingue)
Topics multiples par document Oui (distribution de probabilité) Non par défaut (un topic par document), mais probabilités accessibles
Modularité Fixe Chaque composant est interchangeable (embedding, clustering, représentation)
Intégration LLM Non Oui (GPT-4, Claude pour nommer et interpréter les topics)
Vitesse (10K docs) ~30 secondes ~30 minutes (embedding + UMAP + HDBSCAN)

Les études comparatives montrent que BERTopic produit des topics plus cohérents et mieux séparés que LDA sur la majorité des datasets, avec l’avantage de ne pas nécessiter de spécifier le nombre de topics. Son inconvénient principal est le temps de calcul, nettement plus élevé, dû à l’étape d’embedding.

BERTopic + LLM : le combo gagnant BERTopic permet d’intégrer un LLM (GPT-4, Claude, Mistral) pour nommer automatiquement les topics découverts. Au lieu d’un topic décrit par « livraison_délai_colis_retard », le LLM produit un nom interprétable : « Problèmes de délais de livraison ». C’est un gain d’interprétabilité majeur pour les utilisateurs non techniques.

Autres méthodes de topic modeling

Top2Vec

Top2Vec (Angelov, 2020) utilise aussi des embeddings, mais avec une approche différente de BERTopic. Il crée des embeddings de documents et de mots conjointement, réduit la dimensionnalité (UMAP), puis identifie des topics comme les centroïdes des clusters denses. Il ne nécessite pas de spécifier le nombre de topics. En pratique, Top2Vec donne souvent des résultats moins interprétables que BERTopic sur les textes courts.

FASTopic

FASTopic est une alternative plus récente qui se distingue par sa vitesse. Il est significativement plus rapide que BERTopic sur les gros corpus tout en offrant une meilleure cohérence des topics. Son inconvénient : il ne fournit pas d’information au niveau du document (pas d’assignation topic-document), ce qui limite certains cas d’usage.

QuaIIT

Développé par Amazon pour l’analyse de réponses qualitatives en RH, QuaIIT offre une meilleure cohérence et diversité de topics que LDA et BERTopic, avec la capacité d’assigner plusieurs topics par document. Son temps d’exécution est cependant plus long (2 à 3 heures contre 30 minutes pour BERTopic).


Fonctionnalités avancées de BERTopic

Dynamic topic modeling : Analyser l’évolution des topics dans le temps. BERTopic calcule la représentation de chaque topic à chaque timestamp, permettant de visualiser comment les thèmes changent. Par exemple : comment le discours sur l’IA a évolué entre 2020 et 2026 sur les réseaux sociaux.

Guided topic modeling : Fournir des « seed topics » (listes de mots-clés) pour guider le modèle vers des thèmes spécifiques. Utile quand vous savez quels thèmes existent mais voulez que l’algorithme les découvre dans les données. Le modèle est « nudgé » vers les topics définis sans y être forcé.

Online topic modeling : Mettre à jour le modèle de façon incrémentale avec de nouveaux documents sans tout ré-entraîner. Utile pour les flux de données continus (réseaux sociaux, tickets support).

Hierarchical topic modeling : Organiser les topics en hiérarchie (topics → sous-topics). Un topic « technologie » peut se subdiviser en « IA », « cloud », « cybersécurité ». BERTopic supporte cette fonctionnalité nativement via topic_model.hierarchical_topics(docs).

Visualisation intégrée : BERTopic offre des visualisations interactives via Plotly : carte des topics (distance et taille), topics over time, hiérarchie des topics, heatmap de similarité, barcharts de mots-clés par topic.


Cas d’usage concrets

Analyse des avis clients : Découvrir automatiquement les thèmes de satisfaction et d’insatisfaction dans des milliers d’avis. Combiner avec l’analyse de sentiment pour obtenir un sentiment par topic : « le thème livraison a un sentiment négatif à 72%, le thème qualité produit à 58% ».

Veille médiatique et scientifique : Identifier les thèmes émergents dans un flux d’articles de presse, de publications scientifiques ou de brevets. Le dynamic topic modeling montre l’évolution des sujets dans le temps.

Support client : Catégoriser automatiquement les tickets support pour identifier les problèmes récurrents et les tendances émergentes. Les nouveaux topics qui apparaissent peuvent signaler un bug ou un problème de qualité non détecté.

Analyse des réseaux sociaux : Comprendre de quoi parlent les utilisateurs sur Twitter/X, Reddit ou les forums. BERTopic excelle sur les textes courts grâce à ses embeddings contextuels, là où LDA peine.

Recherche académique : Cartographier un champ de recherche en analysant les abstracts de publications. Identifier les sous-domaines, les tendances et les lacunes dans la littérature.

Ressources humaines : Analyser les réponses ouvertes des enquêtes de satisfaction interne pour identifier les préoccupations des employés sans catégories prédéfinies.


Implémentation complète en Python

from bertopic import BERTopic
from sentence_transformers import SentenceTransformer
from bertopic.representation import KeyBERTInspired
import pandas as pd

# 1. Charger les données
df = pd.read_csv("avis_clients.csv")
docs = df["texte"].tolist()

# 2. Configurer le modèle d'embedding (multilingue pour le français)
embedding_model = SentenceTransformer("paraphrase-multilingual-MiniLM-L12-v2")

# 3. Configurer la représentation des topics
representation_model = KeyBERTInspired()

# 4. Créer et entraîner le modèle
topic_model = BERTopic(
    embedding_model=embedding_model,
    representation_model=representation_model,
    language="french",
    nr_topics="auto",     # détection automatique
    min_topic_size=10,    # minimum 10 docs par topic
    verbose=True
)
topics, probs = topic_model.fit_transform(docs)

# 5. Explorer les résultats
print(topic_model.get_topic_info())

# 6. Visualiser
fig_topics = topic_model.visualize_topics()
fig_topics.show()

# 7. Topics par document
df["topic"] = topics
df["topic_name"] = [topic_model.get_topic(t) for t in topics]

# 8. Évolution temporelle (si vous avez des dates)
timestamps = df["date"].tolist()
topics_over_time = topic_model.topics_over_time(docs, timestamps)
topic_model.visualize_topics_over_time(topics_over_time)

Bonnes pratiques

Choisissez le bon modèle d’embedding. Pour du français, utilisez paraphrase-multilingual-MiniLM-L12-v2 ou multilingual-e5-large. Un modèle anglophone sur un corpus français donnera des topics de mauvaise qualité.

Ajustez min_topic_size. HDBSCAN fusionne les petits clusters en bruit (topic -1). Si trop de documents sont classés comme bruit, réduisez min_topic_size. Si les topics sont trop fragmentés, augmentez-le.

Réduisez le nombre de topics si nécessaire. BERTopic peut produire des dizaines de topics. Utilisez nr_topics="auto" pour une fusion automatique, ou spécifiez un nombre cible. La hiérarchisation des topics (hierarchical_topics) permet de naviguer entre granularité fine et vue d’ensemble.

Validez avec un expert du domaine. Le topic modeling est exploratoire. Les topics découverts doivent être validés par quelqu’un qui connaît le domaine. Un topic cohérent statistiquement peut ne pas avoir de sens métier.

Combinez avec l’analyse de sentiment. Un topic seul ne dit pas si c’est un problème ou un point positif. Ajoutez une couche d’analyse de sentiment par topic pour obtenir une vision actionnable.


Verdict

BERTopic est le choix par défaut pour le topic modeling en 2026. Il surpasse LDA en qualité de topics, ne nécessite pas de spécifier le nombre de thèmes, gère nativement le multilingue et les textes courts, et offre des fonctionnalités avancées (dynamic, guided, hierarchical) que LDA n’a pas. Son seul inconvénient est le temps de calcul (l’étape d’embedding), qui peut être significatif sur de très gros corpus.

LDA reste pertinent pour des cas spécifiques : quand vous avez besoin d’assigner plusieurs topics par document (LDA le fait nativement), quand les ressources de calcul sont très limitées, ou quand l’interprétabilité probabiliste du modèle est importante. Mais pour l’analyse exploratoire de la plupart des corpus, BERTopic est plus simple, plus rapide à configurer (moins de prétraitement) et produit de meilleurs résultats.


Questions fréquentes sur le topic modeling

Quelle est la différence entre le topic modeling et la classification de texte ?

La classification de texte assigne des catégories prédéfinies (supervision) : vous définissez les classes et entraînez un modèle à les reconnaître. Le topic modeling découvre les thèmes automatiquement (non supervisé) : l’algorithme identifie les patterns sans connaître les catégories à l’avance. Le topic modeling est exploratoire (« quels thèmes existent dans mes données ? »), la classification est prédictive (« ce document appartient-il à la catégorie X ? »). En pratique, le topic modeling est souvent utilisé en amont pour découvrir les catégories pertinentes, qui sont ensuite utilisées pour entraîner un classifieur.

Faut-il utiliser LDA ou BERTopic ?

BERTopic est le meilleur choix par défaut. Il produit des topics plus cohérents, gère mieux les textes courts, ne nécessite pas de spécifier le nombre de topics, et demande moins de prétraitement. LDA reste pertinent quand vous avez besoin d’assigner plusieurs topics par document (LDA le fait nativement, BERTopic assigne un seul topic principal), quand le temps de calcul est une contrainte forte (LDA est plus rapide), ou quand vous avez besoin d’un modèle probabiliste interprétable. Pour les textes courts (tweets, avis), BERTopic est nettement supérieur.

Comment choisir le nombre de topics ?

Avec BERTopic, vous n’avez pas besoin de le choisir : HDBSCAN le détecte automatiquement. Si le résultat est trop fragmenté, utilisez nr_topics="auto" pour fusionner automatiquement les topics similaires, ou spécifiez un nombre cible. Avec LDA, utilisez la métrique de cohérence (coherence score, typiquement C_V) : entraînez le modèle pour K = 5, 10, 15, 20, etc., et choisissez le K qui maximise la cohérence. pyLDAvis permet de visualiser interactivement les topics pour évaluer leur qualité.

Le topic modeling fonctionne-t-il en français ?

Oui, à condition d’utiliser les bons outils. Avec BERTopic, utilisez un modèle d’embedding multilingue (paraphrase-multilingual-MiniLM-L12-v2 ou multilingual-e5-large) et spécifiez language="french". Avec LDA, vous devrez gérer le prétraitement en français (stop words français, lemmatisation avec spaCy fr_core_news_lg). BERTopic a l’avantage de nécessiter moins de prétraitement spécifique à la langue grâce aux embeddings multilingues.

Comment interpréter et exploiter les résultats du topic modeling ?

Chaque topic est représenté par une liste de mots-clés pondérés. Examinez les top 10 mots de chaque topic et donnez-lui un nom interprétable (BERTopic peut le faire automatiquement via un LLM). Vérifiez les documents représentatifs de chaque topic pour valider la cohérence. Analysez la distribution des topics dans le corpus (quels thèmes dominent ?). Combinez avec des métadonnées (date, source, segment client) pour contextualiser. Et surtout, faites valider par un expert du domaine : un topic statistiquement cohérent n’a pas forcément de valeur métier.

Polydesk.ai — Footer