Document Clustering
Le document clustering est une technique d’apprentissage non supervisé qui regroupe automatiquement des documents textuels en clusters (groupes) cohérents, sans étiquettes prédéfinies, en se basant sur la similarité sémantique ou lexicale de leur contenu.
- Catégorie
- NLP / Apprentissage non supervisé
- Algorithmes
- K-Means, HDBSCAN, Agglomeratif, Spectral, DBSCAN
- Embeddings
- TF-IDF (classique), Sentence-BERT, OpenAI Embeddings, Cohere Embed
- Frameworks
- BERTopic, Top2Vec, scikit-learn, Gensim
- Métriques
- Silhouette Score, NMI, ARI, NPMI, Topic Coherence
- Lié à
- Topic Modeling, Document Classification, Semantic Search
À quoi sert le document clustering ?
Vous avez 50 000 tickets de support client, 200 000 articles de presse, ou 10 000 documents internes non classés. Vous ne savez pas quels thèmes ils couvrent, ni combien de catégories existent. Le document clustering répond exactement à cette situation : il analyse le contenu de chaque document, mesure les similitudes entre eux, et les organise en groupes thématiques cohérents, le tout sans qu’un humain ait besoin de définir les catégories à l’avance.
C’est la différence fondamentale avec la classification de documents (supervisée), qui nécessite un jeu de données étiquetées pour apprendre à assigner chaque document à une catégorie connue. Le clustering découvre les catégories dans les données. La classification les applique.
Le pipeline en 4 étapes
Tout système de document clustering suit le même schéma, quelle que soit la technologie utilisée :
Étape 1 : représentation vectorielle des documents
Chaque document doit être converti en un vecteur numérique (embedding) que les algorithmes de clustering peuvent traiter. Le choix de la méthode de vectorisation est le facteur le plus déterminant pour la qualité du clustering. Trois grandes familles coexistent :
TF-IDF (Term Frequency-Inverse Document Frequency) : l’approche classique. Chaque document est représenté par un vecteur sparse où chaque dimension correspond à un mot du vocabulaire, pondéré par sa fréquence dans le document et son caractère distinctif dans le corpus. Simple, rapide, interprétable, mais incapable de capturer la sémantique : « voiture » et « automobile » sont deux dimensions complètement indépendantes.
Word2Vec / Doc2Vec : les premières approches neuronales. Word2Vec (Mikolov et al., 2013) produit des embeddings de mots denses qui capturent des relations sémantiques. Doc2Vec étend cette idée au niveau document. Ces modèles représentent un progrès sur TF-IDF mais ne gèrent pas le contexte : le même mot a le même vecteur quel que soit son usage.
Embeddings de modèles de langage : la méthode dominante aujourd’hui. Des modèles comme Sentence-BERT (all-MiniLM-L6-v2, all-mpnet-base-v2), les embeddings OpenAI (text-embedding-3-large), Cohere Embed v3, ou les modèles Hugging Face produisent des vecteurs denses qui capturent la sémantique contextuelle. Des études récentes (IDA 2024, ScienceDirect 2024) montrent que les embeddings LLM surpassent systématiquement TF-IDF et Doc2Vec en pureté de clusters et en score silhouette. Les embeddings d’OpenAI (GPT) et Sentence-BERT (MiniLM) sont les plus robustes, y compris face aux déséquilibres de classes.
all-MiniLM-L6-v2 (384 dimensions, rapide, gratuit, fonctionne sur CPU). Pour la meilleure qualité : les embeddings OpenAI (text-embedding-3-large, 3 072 dimensions) ou Cohere Embed v3. Pour le multilingue : paraphrase-multilingual-MiniLM-L12-v2. Les recherches montrent que K-Means sur des embeddings GPT est une combinaison simple et performante, toutes métriques confondues.
Étape 2 : réduction de dimensionnalité
Les embeddings de LLM produisent des vecteurs de haute dimension (384 à 3 072 dimensions). Dans cet espace, les distances entre points deviennent moins informatives (malédiction de la dimensionnalité), et les algorithmes de clustering peinent à identifier des structures. Une étape de réduction de dimensionnalité est donc souvent nécessaire.
UMAP (Uniform Manifold Approximation and Projection) : la méthode par défaut dans BERTopic et la plus utilisée pour le document clustering. UMAP préserve à la fois la structure locale (voisinages proches) et globale des données, ce qui en fait un choix idéal avant le clustering. Paramètres clés : n_components (typiquement 5-10 pour le clustering, 2 pour la visualisation), n_neighbors (15 par défaut, augmenter pour des clusters plus larges), min_dist (0.0 pour le clustering).
PCA (Principal Component Analysis) : une alternative linéaire plus rapide. PCA préserve la variance globale mais perd les relations non linéaires. Utile comme première étape de réduction avant UMAP sur de très gros datasets.
t-SNE : excellent pour la visualisation 2D mais moins adapté au clustering car il ne préserve pas les distances globales et les résultats varient entre les runs.
Étape 3 : algorithme de clustering
L’algorithme de clustering regroupe les vecteurs réduits en clusters. Chaque famille d’algorithmes fait des hypothèses différentes sur la forme des clusters :
| Algorithme | Hypothèse | Nb clusters | Outliers | Scalabilité | Cas d’usage |
|---|---|---|---|---|---|
| K-Means | Clusters sphériques, taille similaire | À définir (k) | Non | Excellente (O(nk)) | Cas général, grandes collections |
| HDBSCAN | Densités variables, formes arbitraires | Automatique | Oui | Bonne (O(n log n)) | Exploration, données bruitées |
| DBSCAN | Densité uniforme, formes arbitraires | Automatique | Oui | Bonne | Données à densité constante |
| Agglomératif | Hiérarchie de clusters | À définir | Non | Moyenne (O(n²)) | Petits datasets, dendrogramme |
| Spectral | Graphe de similarité | À définir | Non | Faible (O(n³)) | Clusters non convexes, petit n |
| GMM | Mélange de gaussiennes | À définir | Non (soft) | Bonne | Assignation probabiliste |
HDBSCAN est le choix par défaut dans la plupart des pipelines modernes (BERTopic, Top2Vec). Son avantage principal : il détecte automatiquement le nombre de clusters et identifie les documents outliers (qui n’appartiennent à aucun cluster clair). Son paramètre clé min_cluster_size est intuitif : c’est le nombre minimum de documents pour former un cluster. Pour des collections homogènes où vous voulez forcer chaque document dans un cluster, K-Means reste le choix le plus simple et le plus rapide.
Étape 4 : interprétation et labellisation
Un clustering n’est utile que si les groupes sont interprétables. Plusieurs techniques permettent de comprendre ce que chaque cluster représente :
c-TF-IDF (class-based TF-IDF) : la méthode utilisée par BERTopic. Au lieu de calculer TF-IDF par document, on concatène tous les documents d’un cluster en un seul « méga-document », puis on calcule les termes les plus distinctifs de chaque cluster par rapport aux autres. C’est simple, rapide et étonnamment efficace.
Labellisation par LLM : une approche récente et puissante. On envoie les mots-clés ou quelques documents représentatifs de chaque cluster à un LLM et on lui demande de générer un label descriptif. BERTopic intègre cette fonctionnalité directement avec GPT, Cohere ou des modèles open source.
Analyse des centroïdes : pour K-Means, le vecteur centroïde de chaque cluster peut être comparé à un vocabulaire de référence pour identifier les termes les plus proches sémantiquement.
BERTopic : le framework de référence
BERTopic est devenu le standard de facto pour le document clustering et le topic modeling moderne. Développé par Maarten Grootendorst, c’est un framework Python modulaire qui combine embeddings, réduction de dimensionnalité, clustering et représentation de topics dans un pipeline cohérent.
Son architecture par défaut :
1. Embeddings : Sentence-BERT (all-MiniLM-L6-v2 pour l’anglais, paraphrase-multilingual-MiniLM-L12-v2 pour le multilingue). Tout modèle Hugging Face compatible peut être substitué.
2. Réduction : UMAP (n_components=5, n_neighbors=15, min_dist=0.0).
3. Clustering : HDBSCAN (min_cluster_size=10). Remplaçable par K-Means, Agglomeratif, BIRCH, etc.
4. Représentation : c-TF-IDF pour les mots-clés, avec option de raffinement par LLM, KeyBERT, ou MaximalMarginalRelevance.
En quelques lignes de code Python :
from bertopic import BERTopic
topic_model = BERTopic(language="french")
topics, probs = topic_model.fit_transform(documents)
# Voir les topics
topic_model.get_topic_info()
# Visualiser
topic_model.visualize_topics()
BERTopic excelle par sa modularité : chaque composant est interchangeable. Vous pouvez utiliser des embeddings OpenAI, une réduction PCA, un clustering K-Means et une labellisation par Claude, tout en gardant le même framework.
Approches LLM pour le document clustering
Les LLMs ont transformé le document clustering de deux manières :
LLM comme source d’embeddings
Les embeddings produits par les LLMs capturent des nuances sémantiques inaccessibles à TF-IDF. Les études comparatives (Keraghel et al., IDA 2024 ; ScienceDirect 2024) convergent sur plusieurs constats : les embeddings de GPT et MiniLM surpassent systématiquement les approches classiques ; K-Means sur embeddings GPT est une combinaison étonnamment simple et performante ; augmenter la taille du modèle d’embedding ne garantit pas de meilleurs résultats (il existe un point de rendements décroissants) ; et les embeddings LLM sont plus robustes face aux déséquilibres de classes.
Des travaux présentés à EMNLP 2025 (« Co-Evolving LLMs and Embedding Models via Density-Guided Preference Optimization for Text Clustering ») montrent qu’on peut co-optimiser le LLM et le modèle d’embedding spécifiquement pour le clustering, avec des gains significatifs par rapport à l’utilisation d’embeddings génériques.
LLM comme agent de clustering
Une approche plus récente consiste à utiliser directement un LLM pour le clustering via prompt. On lui soumet un ensemble de documents et on lui demande de les regrouper par thème. Cette approche est visuellement séduisante mais limitée en scalabilité : elle est contrainte par la fenêtre de contexte du modèle (même avec 1M tokens pour Claude Opus 4.6, cela ne couvre que quelques milliers de documents courts). Elle fonctionne bien pour le few-shot clustering (moins de 100 documents) ou pour labelliser/raffiner des clusters générés par un algorithme classique.
text-embedding-3-large) coûte environ 0,13 $ par million de tokens. Pour 100 000 documents de 500 tokens chacun, cela représente environ 6,50 $. C’est raisonnable, mais pour du clustering itératif (ré-embedder à chaque modification), les modèles locaux comme Sentence-BERT (all-MiniLM-L6-v2) sont gratuits et tournent sur CPU en quelques minutes pour des corpus de cette taille.
Évaluer la qualité du clustering
Évaluer un clustering est délicat car, par définition, il n’y a pas de « bonnes réponses » connues. Deux familles de métriques existent :
Métriques internes (sans labels)
Silhouette Score : mesure la cohésion intra-cluster et la séparation inter-cluster. Varie de -1 (mauvais) à +1 (excellent). Un score au-dessus de 0.5 est généralement considéré comme bon. C’est la métrique la plus utilisée quand vous n’avez pas de ground truth.
Calinski-Harabasz Index : rapport entre la dispersion inter-cluster et intra-cluster. Plus il est élevé, mieux c’est. Favorise les clusters compacts et bien séparés.
Topic Coherence (NPMI, C_v) : spécifique au topic modeling, mesure si les mots-clés d’un topic co-occurrent fréquemment dans un corpus de référence. C’est le meilleur proxy pour l’interprétabilité humaine.
Métriques externes (avec labels de référence)
Adjusted Rand Index (ARI) : mesure la concordance entre le clustering et les labels de référence, ajustée pour le hasard. Un ARI de 1.0 indique un match parfait.
Normalized Mutual Information (NMI) : quantifie l’information partagée entre le clustering et la partition de référence. Varie de 0 à 1.
Cluster Purity : proportion de documents correctement assignés dans chaque cluster par rapport au label majoritaire. Simple mais biaisé en faveur d’un grand nombre de clusters.
Cas d’usage concrets
Support client et tickets
Clusteriser automatiquement les tickets de support par problème rencontré, sans définir les catégories à l’avance. Cela permet de découvrir des problèmes émergents que les catégories existantes ne capturent pas, de prioriser les résolutions par taille de cluster, et d’alimenter un système de recommandation pour l’attribution automatique aux équipes. BERTopic avec des embeddings multilingues est particulièrement adapté pour les entreprises opérant dans plusieurs langues.
Veille et analyse de presse
Regrouper des milliers d’articles de presse par sujet, identifier les thèmes émergents et suivre leur évolution dans le temps. Le dynamic topic modeling de BERTopic permet de visualiser comment les clusters évoluent temporellement : un sujet qui n’existait pas il y a un mois apparaît soudainement dans 500 articles.
Organisation de corpus de recherche
Clusteriser les articles scientifiques d’un domaine pour cartographier les sous-domaines de recherche, identifier les papiers fondateurs de chaque cluster, et détecter les niches émergentes. L’approche BERTopic + embeddings SPECTER (optimisés pour les articles scientifiques) est particulièrement efficace pour ce cas d’usage.
Détection de doublons et near-duplicates
Le clustering sémantique identifie les documents qui traitent du même sujet de manière différente (paraphrases, traductions, reformulations). C’est essentiel pour le nettoyage de datasets d’entraînement, la déduplication de bases documentaires et la détection de plagiat à grande échelle.
Chunking intelligent pour le RAG
Dans les systèmes de Retrieval-Augmented Generation, le document clustering peut être utilisé pour regrouper les chunks sémantiquement similaires, améliorant la pertinence des résultats de recherche. Les clusters thématiques alimentent aussi le reranking et la diversification des résultats.
Document clustering vs. topic modeling vs. classification
| Aspect | Document Clustering | Topic Modeling | Classification |
|---|---|---|---|
| Supervision | Non supervisé | Non supervisé | Supervisé |
| Assignation | 1 cluster par document (hard) | Plusieurs topics par doc (soft) | 1 ou N classes par document |
| Catégories | Découvertes automatiquement | Découvertes automatiquement | Prédéfinies |
| Sortie | Groupes de documents | Distributions de topics + mots-clés | Labels prédits |
| Outils | K-Means, HDBSCAN | LDA, BERTopic, Top2Vec | BERT, LLMs fine-tunés |
En pratique, BERTopic brouille la frontière entre clustering et topic modeling : il utilise le clustering comme base, puis ajoute une couche de représentation de topics (c-TF-IDF + LLM). C’est un pipeline de clustering qui produit des topics interprétables.
Défis et limites
Nombre de clusters : K-Means exige de fixer k à l’avance. La méthode du coude (elbow method) et le silhouette score aident, mais ne donnent pas toujours une réponse claire. HDBSCAN évite ce problème mais peut sur-segmenter ou sous-segmenter selon les paramètres.
Scalabilité : au-delà de quelques centaines de milliers de documents, les étapes d’embedding et de UMAP deviennent coûteuses. Solutions : embeddings en batch, UMAP approximatif (PyNNDescent), accélération GPU avec cuML (RAPIDS).
Documents longs : les modèles d’embedding ont des limites de tokens (512 pour MiniLM, 8 192 pour les modèles récents). Pour les documents longs, il faut soit tronquer, soit découper en paragraphes et moyenner les embeddings, soit utiliser des modèles à longue fenêtre.
Multilingue : les embeddings multilingues (paraphrase-multilingual-MiniLM) permettent de clusteriser des documents en plusieurs langues dans le même espace, mais les performances sont inférieures aux modèles monolingues. Pour le français, les modèles CamemBERT-based ou les embeddings multilingues d’OpenAI/Cohere donnent les meilleurs résultats.
Évaluation : sans labels de référence, l’évaluation reste subjective. L’étude publiée par la Royal Society (2025) sur le clustering de textes courts montre que les modèles Gaussian Mixture sur embeddings MiniLM produisent des clusters plus interprétables et distinctifs que LDA ou Doc2Vec. L’évaluation humaine reste le gold standard.
Implémentation pratique rapide
Pipeline complet en Python avec BERTopic, applicable en 5 minutes :
# Installation
# pip install bertopic sentence-transformers
from bertopic import BERTopic
from sentence_transformers import SentenceTransformer
# 1. Charger vos documents
documents = [...] # liste de strings
# 2. Choisir un modèle d'embedding
embedding_model = SentenceTransformer("all-MiniLM-L6-v2")
# 3. Créer et entraîner le modèle
topic_model = BERTopic(
embedding_model=embedding_model,
nr_topics="auto", # fusion auto des topics similaires
min_topic_size=15, # taille minimum d'un cluster
language="french"
)
topics, probs = topic_model.fit_transform(documents)
# 4. Explorer les résultats
print(topic_model.get_topic_info())
topic_model.visualize_topics()
topic_model.visualize_barchart(top_n_topics=10)
Pour un clustering plus simple sans BERTopic :
from sentence_transformers import SentenceTransformer
from sklearn.cluster import KMeans
model = SentenceTransformer("all-MiniLM-L6-v2")
embeddings = model.encode(documents)
kmeans = KMeans(n_clusters=20, random_state=42)
labels = kmeans.fit_predict(embeddings)
Verdict
Le document clustering a été révolutionné par les embeddings de LLMs. L’approche BERTopic (embeddings Sentence-BERT + UMAP + HDBSCAN + c-TF-IDF) est le standard actuel pour la plupart des cas d’usage. Si vous cherchez la simplicité maximale avec d’excellents résultats, K-Means sur des embeddings all-MiniLM-L6-v2 est un point de départ remarquable, confirmé par les études comparatives récentes.
Les LLMs changent la donne non pas en remplaçant les algorithmes de clustering, mais en fournissant des représentations vectorielles nettement supérieures et en permettant la labellisation automatique des clusters. Pour le français, utilisez un modèle d’embedding multilingue ou CamemBERT-based et BERTopic avec language="french".
Questions fréquentes sur le document clustering
Quelle est la différence entre document clustering et topic modeling ?
Le document clustering assigne chaque document à un seul groupe (assignation « hard »). Le topic modeling classique (comme LDA) assigne à chaque document une distribution de probabilités sur plusieurs topics (assignation « soft ») : un document peut être 40% « finance » et 60% « technologie ». En pratique, BERTopic combine les deux : il fait d’abord un clustering hard (HDBSCAN), puis génère des représentations de topics pour chaque cluster. Si vous avez besoin d’une assignation multi-topic par document, LDA ou les modèles de topics neuronaux sont plus adaptés.
Combien de clusters dois-je choisir ?
Si vous utilisez HDBSCAN (via BERTopic), le nombre de clusters est déterminé automatiquement via le paramètre min_cluster_size. Augmentez-le pour obtenir moins de clusters plus larges. Pour K-Means, trois techniques aident à choisir k : la méthode du coude (tracer l’inertie en fonction de k et chercher le « coude »), le silhouette score (choisir le k qui maximise le score), et l’avis d’expert métier (si vous savez qu’il y a environ 15-20 thèmes dans vos données, commencez par là). En cas de doute, BERTopic avec nr_topics="auto" est un excellent point de départ.
Le document clustering fonctionne-t-il en français ?
Oui. BERTopic supporte le français nativement via le paramètre language="french", qui configure le CountVectorizer avec les stop words français. Pour les embeddings, utilisez paraphrase-multilingual-MiniLM-L12-v2 (gratuit, local) ou les embeddings multilingues d’OpenAI/Cohere (API payante, meilleure qualité). Les modèles spécifiques au français comme CamemBERT ou les embeddings Sentence-BERT entraînés sur du français donnent les meilleurs résultats pour des corpus exclusivement francophones.
Comment gérer des corpus de plus de 100 000 documents ?
Trois stratégies : premièrement, utilisez des embeddings légers (all-MiniLM-L6-v2, 384 dimensions) plutôt que des modèles lourds. Deuxièmement, activez l’accélération GPU avec cuML (RAPIDS) pour UMAP et HDBSCAN : BERTopic supporte nativement cuml.manifold.UMAP et cuml.cluster.HDBSCAN, avec des gains de 10x à 100x. Troisièmement, pour les très gros corpus (millions de documents), considérez un clustering en deux étapes : un premier pass avec des embeddings rapides et K-Means, puis un raffinement par HDBSCAN sur chaque macro-cluster.
BERTopic ou LDA : lequel est meilleur ?
BERTopic surpasse LDA dans la grande majorité des benchmarks, aussi bien en cohérence de topics (NPMI, C_v) qu’en interprétabilité humaine. LDA reste pertinent pour des corpus très volumineux (millions de documents) où la vitesse de traitement est prioritaire, pour des cas nécessitant une assignation multi-topics par document, ou quand vous voulez un modèle génératif probabiliste du corpus. Pour tout le reste, BERTopic est le choix par défaut. Les deux ne sont pas mutuellement exclusifs : vous pouvez utiliser BERTopic pour explorer vos données, puis LDA en production si la scalabilité l’exige.