FastText : Embeddings et Classification de Texte par Meta AI
Origine et contexte
FastText a été développé par l’équipe de Tomas Mikolov (déjà à l’origine de Word2Vec) au sein de Facebook AI Research. La bibliothèque a été publiée en open source en 2016 et présentée dans deux papiers fondateurs : l’un sur les embeddings enrichis par les sous-mots (Bojanowski et al., 2017) et l’autre sur la classification rapide de texte (Joulin et al., 2017).
L’objectif était double : améliorer la qualité des word embeddings pour les langues morphologiquement riches (allemand, turc, finnois…) et proposer un classificateur de texte capable de traiter des millions de documents en quelques minutes sur un simple CPU.
Comment fonctionne FastText
Le principe des sous-mots (subword n-grams)
C’est l’innovation centrale de FastText par rapport à Word2Vec et GloVe. Au lieu de traiter chaque mot comme une unité atomique, FastText le décompose en n-grams de caractères.
Prenons le mot « apprentissage » avec des n-grams de taille 3 à 6. FastText ajoute des marqueurs de début et fin de mot (< et >), puis génère tous les sous-mots possibles : <ap, app, ppr, pre, ren, ent, nti, tis, iss, ssa, sag, age, ge>, <app, appr, ppre, pren, rent, enti, ntis, tiss, issa, ssag, sage, age>, etc.
Le vecteur final du mot est la somme des vecteurs de tous ses n-grams plus le vecteur du mot entier (s’il existe dans le vocabulaire). Cette approche offre deux avantages majeurs :
Gestion des mots inconnus (OOV). Même un mot jamais vu à l’entraînement peut obtenir un vecteur, car ses sous-mots ont probablement été rencontrés dans d’autres mots. Par exemple, « désapprendre » partage des n-grams avec « apprendre », « désarmer », etc.
Morphologie capturée. Les suffixes, préfixes et racines sont naturellement encodés. Les mots « programmer », « programmeur », « programmation » partagent de nombreux n-grams et auront des vecteurs proches.
Architecture du modèle
Pour les embeddings, FastText utilise une architecture Skip-gram modifiée (comme Word2Vec) mais enrichit la représentation de chaque mot par ses n-grams. L’entraînement se fait par negative sampling ou hierarchical softmax.
Pour la classification de texte, FastText emploie un modèle linéaire avec une couche de moyenne des embeddings (bag of n-grams), suivi d’un softmax hiérarchique. Cette architecture est volontairement simple pour garantir la rapidité.
Vecteurs pré-entraînés
Meta AI a mis à disposition des vecteurs pré-entraînés pour 157 langues, entraînés sur Common Crawl et Wikipedia. Depuis 2024, ces modèles sont hébergés sur Hugging Face en tant que miroirs officiels, ce qui facilite leur téléchargement et leur utilisation.
| Ressource | Langues | Dimensions | Source |
|---|---|---|---|
| Vecteurs Wikipedia | 157 | 300 | Wikipedia + Common Crawl |
| Vecteurs alignés | 44 | 300 | Alignement multilingue |
| Modèle langue ID | 176 | N/A | Identification de langue |
Le modèle d’identification de langue (lid.176.bin) reste l’un des plus utilisés au monde pour détecter la langue d’un texte. Il couvre 176 langues avec une précision remarquable.
FastText pour la classification de texte
Au-delà des embeddings, FastText intègre un classificateur de texte supervisé extrêmement rapide. Ses caractéristiques principales :
Vitesse. FastText peut entraîner un classificateur sur des millions d’exemples en quelques secondes sur un CPU standard. C’est des ordres de grandeur plus rapide que les approches deep learning.
Précision compétitive. Malgré sa simplicité (modèle linéaire), FastText atteint des performances comparables à des réseaux de neurones profonds sur de nombreuses tâches de classification, grâce aux n-grams de mots qui capturent le contexte local.
Cas d’usage typiques. Détection de spam, analyse de sentiment, catégorisation d’articles, filtrage de contenu, identification de langue, classification d’intentions dans les chatbots.
import fasttext
# Entraîner un classificateur
model = fasttext.train_supervised(
input='train.txt', # Format: __label__cat texte ici
epoch=25,
lr=1.0,
wordNgrams=2,
dim=100
)
# Prédire
result = model.predict("Cet article parle d'intelligence artificielle")
print(result) # (('__label__tech',), array([0.98]))
# Entraîner des embeddings non supervisés
model_emb = fasttext.train_unsupervised(
input='corpus.txt',
model='skipgram', # ou 'cbow'
dim=300,
minn=3, # taille min des n-grams
maxn=6 # taille max des n-grams
)
# Obtenir un vecteur (fonctionne même pour les OOV)
vector = model_emb.get_word_vector("désapprendre")
FastText vs Word2Vec vs GloVe
| Critère | FastText | Word2Vec | GloVe |
|---|---|---|---|
| Sous-mots (subword) | Oui (n-grams) | Non | Non |
| Mots inconnus (OOV) | Oui | Non | Non |
| Morphologie | Bien capturée | Limitée | Limitée |
| Classification supervisée | Intégrée | Non | Non |
| Langues disponibles | 157 (pré-entraîné) | Variable | Anglais principalement |
| Taille mémoire | Plus élevée (n-grams) | Modérée | Modérée |
| Vitesse d’entraînement | Rapide | Rapide | Rapide |
| Statut (2026) | Archivé (mars 2024) | Maintenu (Gensim) | Maintenu (Stanford) |
Limites de FastText
Embeddings statiques. Comme Word2Vec et GloVe, FastText produit un seul vecteur par mot, indépendamment du contexte. Le mot « avocat » aura le même embedding qu’il désigne le fruit ou le juriste. Les modèles BERT et les Transformers résolvent ce problème.
Taille mémoire. Le stockage de tous les n-grams augmente significativement la taille du modèle par rapport à Word2Vec. Un modèle FastText complet peut peser plusieurs gigaoctets. Des techniques de quantification permettent de réduire cette empreinte (option -quantize).
Dépôt archivé. Depuis mars 2024, le dépôt GitHub officiel est archivé. Il n’y aura plus de correctifs ni de nouvelles fonctionnalités. Pour les nouveaux projets, les Sentence Transformers ou les API d’embeddings des LLM sont recommandés.
FastText en 2026 : encore pertinent ?
FastText conserve des cas d’usage précis où il excelle :
Classification de texte à grande échelle sur CPU. Quand vous devez classifier des millions de documents par seconde sans GPU, FastText reste imbattable. Le rapport performance/coût est exceptionnel pour les tâches de tri, routage, ou filtrage.
Identification de langue. Le modèle lid.176.bin reste une référence pour la détection de langue rapide. Aucun LLM ne peut rivaliser en termes de latence et de coût pour cette tâche spécifique.
Langues peu dotées. Pour les langues qui n’ont pas de modèle BERT ou Transformer dédié, les vecteurs FastText pré-entraînés sur 157 langues constituent souvent la meilleure option disponible.
Environnements edge/embarqué. Un modèle FastText quantifié tient dans quelques centaines de Mo et tourne sur n’importe quel CPU, ce qui le rend adapté aux déploiements embarqués ou aux applications mobiles.
Questions fréquentes sur FastText
Quelle est la différence principale entre FastText et Word2Vec ?
FastText décompose chaque mot en sous-mots (n-grams de caractères) et apprend des embeddings pour ces fragments. Cela lui permet de gérer les mots inconnus (OOV) et de mieux capturer la morphologie. Word2Vec traite chaque mot comme une unité atomique et ne peut pas produire de vecteur pour un mot absent du vocabulaire.
Le dépôt FastText est-il encore maintenu ?
Non. Le dépôt GitHub officiel (facebookresearch/fastText) a été archivé en mars 2024. Le code et les modèles pré-entraînés restent disponibles en téléchargement, notamment via Hugging Face, mais il n’y aura plus de mises à jour ni de correctifs.
Comment utiliser FastText pour la classification de texte ?
Préparez un fichier d’entraînement avec le format __label__catégorie suivi du texte sur chaque ligne. Utilisez ensuite fasttext.train_supervised() en Python (ou la commande CLI). Le modèle s’entraîne en quelques secondes, même sur des millions d’exemples, et produit des résultats compétitifs avec les approches deep learning pour les tâches de classification standard.
FastText fonctionne-t-il pour le français ?
Oui. Meta AI fournit des vecteurs pré-entraînés pour 157 langues, dont le français. Les vecteurs français sont entraînés sur Wikipedia et Common Crawl, en 300 dimensions. La décomposition en sous-mots est particulièrement utile pour le français, qui est une langue morphologiquement riche (conjugaisons, accords, dérivations).
Quand utiliser FastText plutôt qu’un Transformer ?
Privilégiez FastText quand la latence et le coût sont critiques : classification temps réel sur CPU, traitement de gros volumes sans GPU, identification de langue, ou déploiement sur des environnements contraints. Pour toutes les tâches nécessitant une compréhension contextuelle fine (Q&A, résumé, analyse de sentiment nuancée), les Transformers sont supérieurs.