📊 Word2Vec — Quand les mots deviennent des vecteurs magiques ! 🔮✨
📖 Définition
Word2Vec = transformer des mots en nombres de façon intelligente ! Au lieu que "roi" = 42 et "reine" = 1337 (random), Word2Vec fait que roi - homme + femme = reine. C'est comme si les mots vivaient dans un espace mathématique où les relations ont du sens !
Principe :
- Embeddings : chaque mot = vecteur de 100-300 dimensions
- Contexte : les mots qui apparaissent ensemble se ressemblent
- Relations sémantiques : vecteurs capturent le sens et les analogies
- Deux architectures : Skip-gram (prédit contexte) et CBOW (prédit mot)
- Révolution 2013 : première vraie représentation sémantique dense ! 🧠
⚡ Avantages / Inconvénients / Limites
✅ Avantages
- Capture le sens : mots similaires = vecteurs proches
- Analogies magiques : king - man + woman = queen
- Unsupervised : apprend sur texte brut sans labels
- Compact : 300 dimensions vs vocabulaire de 100k+ mots
- Rapide à entraîner : quelques heures sur CPU/GPU
❌ Inconvénients
- Polysémie ignorée : "banque" (argent) = "banque" (rivière)
- Vocabulaire fixe : nouveaux mots = inconnus
- Pas de contexte : même vecteur pour "banque" partout
- Biais culturels : reproduit stéréotypes du corpus
- Obsolète : remplacé par contextuel (BERT, GPT)
⚠️ Limites
- Static embeddings : un mot = un seul vecteur
- Out-of-vocabulary : mots rares/nouveaux = problème
- Dépendant du corpus : Word2Vec médical ≠ Word2Vec général
- Pas de phrases : comprend mots, pas phrases complètes
- Interprétabilité : dimensions = boîte noire
🛠️ Tutorial pratique : Mon cas réel
📊 Setup
- Modèle : Word2Vec Skip-gram
- Corpus : Wikipedia français (2GB texte, ~500M tokens)
- Config : vector_size=300, window=5, min_count=5, epochs=5
- Hardware : GTX 1080 Ti 11GB (accélération énorme vs CPU !)
📈 Résultats obtenus
Entraînement CPU (baseline):
- Temps: 8 heures
- Vocabulaire: 200k mots
- Qualité: correcte
Entraînement GTX 1080 Ti:
- Temps: 45 minutes (10x plus rapide!)
- Vocabulaire: 200k mots
- Qualité: excellente (plus d'epochs possibles)
- VRAM utilisée: 4.2 GB
Modèle final:
- Taille: 600 MB (200k mots × 300 dim)
- Format: binaire optimisé
- Chargement: 3 secondes
🧪 Test en conditions réelles
Similarité sémantique:
Input: "roi"
Output: reine (0.82), prince (0.76), empereur (0.71) ✅
Analogies:
Input: roi - homme + femme
Output: reine (0.88 similarity) ✅
Input: Paris - France + Allemagne
Output: Berlin (0.84 similarity) ✅
Détection outliers:
Input: ["chat", "chien", "souris", "ordinateur"]
Output: "ordinateur" (pas un animal) ✅
Opérations vectorielles:
vec("pizza") + vec("Italie") - vec("France")
= vec("pasta") ✅ (cuisine italienne)
Limitations observées:
"banque" (argent) vs "banque" (rivière): même vecteur ❌
"apple" (entreprise) vs "apple" (fruit): confusion ❌
Verdict : 🎯 WORD2VEC = RÉVOLUTIONNAIRE (mais remplacé par contextuel)
💡 Exemples concrets
Comment fonctionne Word2Vec
Skip-gram : Prédit le contexte depuis un mot
Phrase: "Le chat mange la souris"
Mot central: "mange"
Contexte (window=2): ["Le", "chat", "la", "souris"]
Training:
Input: "mange"
Output: doit prédire ["Le", "chat", "la", "souris"]
Résultat: "mange" apprend à être proche de mots liés à l'action
CBOW (Continuous Bag of Words) : Prédit le mot depuis contexte
Phrase: "Le chat mange la souris"
Contexte (window=2): ["Le", "chat", "la", "souris"]
Mot central: "mange"
Training:
Input: ["Le", "chat", "la", "souris"]
Output: doit prédire "mange"
Résultat: contexte animal + action → "mange"
Analogies célèbres
Géographie 🌍
Paris - France + Espagne = Madrid
Tokyo - Japon + Chine = Pékin
Rome - Italie + Grèce = Athènes
Genre 👥
roi - homme + femme = reine
oncle - homme + femme = tante
acteur - homme + femme = actrice
Comparatifs 📏
grand - plus grand = petit - plus petit
bon - meilleur = mauvais - pire
vite - plus vite = lent - plus lent
Temps ⏰
marcher - présent + passé = marché
manger - présent + futur = mangera
Applications réelles
Recherche sémantique 🔍
- Query: "voiture rapide"
- Expansion: + "automobile", "bolide", "sportive"
- Résultats: plus pertinents que recherche exacte
Recommandations 🎯
- User aime: ["Python", "machine learning", "data"]
- Recommande: "TensorFlow", "scikit-learn", "pandas"
- Basé sur proximité vectorielle
Traduction automatique 🌐
- Avant Transformers, Word2Vec aligné entre langues
- vec_en("dog") ≈ vec_fr("chien")
- Permet traduction par proximité
Détection de sentiment 😊😡
- "génial" proche de "excellent", "super"
- "horrible" proche de "nul", "catastrophique"
- Features pour classifier sentiment
📋 Fiche mémo : Word2Vec
🔍 Architectures
Skip-gram 🎯
- Input: mot central
- Output: mots de contexte
- Meilleur pour : corpus moyen, mots rares
- Plus lent mais meilleure qualité
CBOW 📚
- Input: mots de contexte
- Output: mot central
- Meilleur pour : gros corpus, mots fréquents
- Plus rapide mais qualité légèrement inférieure
⚙️ Hyperparamètres critiques
vector_size: 100-300 (taille vecteurs)
- 100: rapide, moins précis
- 300: standard, bon compromis
- 500+: overkill, marginal gain
window: 5-10 (taille contexte)
- 2-3: relations syntaxiques
- 5-8: relations sémantiques
- 10+: trop large, bruit
min_count: 5-10 (fréquence min)
- Ignore mots ultra-rares
- 5: standard
- 10+: corpus très grand
epochs: 5-15 (itérations)
- 5: standard
- 10+: overfitting risk
negative sampling: 5-20
- Optimisation entraînement
- 5-10: standard
🛠️ Quand utiliser Word2Vec
✅ Baseline embeddings rapides
✅ Projets pédagogiques
✅ Ressources limitées
✅ Tâches simples (similarité, clustering)
✅ Domaine spécifique (train from scratch)
❌ Tâches NLP modernes (use BERT/GPT)
❌ Besoin de contexte (polysémie)
❌ Production state-of-the-art
❌ Multilingue avancé
❌ Nouveaux mots fréquents
💻 Concept simplifié (code minimal)
from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence
# Entraînement Word2Vec - ultra-simple
class Word2VecTraining:
def train(self, corpus_file):
"""Entraîne Word2Vec sur un corpus"""
# Chargement corpus (une phrase par ligne)
sentences = LineSentence(corpus_file)
# Entraînement Word2Vec
model = Word2Vec(
sentences=sentences,
vector_size=300, # Dimension vecteurs
window=5, # Contexte ±5 mots
min_count=5, # Ignore mots rares
workers=4, # Parallélisation
sg=1, # Skip-gram (0=CBOW)
epochs=5 # Itérations
)
return model
def test_analogies(self, model):
"""Teste les analogies célèbres"""
# Roi - homme + femme = ?
result = model.wv.most_similar(
positive=['roi', 'femme'],
negative=['homme'],
topn=1
)
print(f"roi - homme + femme = {result[0][0]}")
# Output: "reine"
# Paris - France + Allemagne = ?
result = model.wv.most_similar(
positive=['Paris', 'Allemagne'],
negative=['France'],
topn=1
)
print(f"Paris - France + Allemagne = {result[0][0]}")
# Output: "Berlin"
def find_similar(self, model, word):
"""Trouve mots similaires"""
similar = model.wv.most_similar(word, topn=5)
print(f"Mots similaires à '{word}':")
for mot, score in similar:
print(f" {mot}: {score:.2f}")
# Utilisation avec GTX 1080 Ti
trainer = Word2VecTraining()
model = trainer.train("wikipedia_fr.txt")
# Tests
trainer.test_analogies(model)
trainer.find_similar(model, "intelligence")
# Sauvegarde
model.save("word2vec_fr.model") # 600 MB
Le concept clé : Word2Vec apprend que les mots qui apparaissent dans des contextes similaires ont des sens proches. "chat" et "chien" apparaissent souvent avec "animal", "poils", "maison" → leurs vecteurs deviennent proches ! L'arithmétique vectorielle émerge naturellement de cette structure ! 🎯
📝 Résumé
Word2Vec = embeddings révolutionnaires qui transforment mots en vecteurs capturant le sens et les relations. Skip-gram ou CBOW entraînés sur texte brut. Arithmétique vectorielle magique (roi - homme + femme = reine). Rapide à entraîner sur GTX 1080 Ti (45min vs 8h CPU). Aujourd'hui remplacé par BERT/GPT contextuel mais reste fondation historique et utile pour baselines ! 🔮✨
🎯 Conclusion
Word2Vec a révolutionné le NLP en 2013 en montrant qu'on pouvait capturer le sens des mots dans des vecteurs denses. L'arithmétique vectorielle (king - man + woman = queen) a stupéfié la communauté. Unsupervised, rapide, efficace. Mais limitation majeure : embeddings statiques (pas de contexte). Aujourd'hui remplacé par BERT/GPT/transformers contextuel, mais Word2Vec reste la pierre angulaire qui a tout lancé. Sans Word2Vec, pas de BERT ! L'ancêtre vénérable du NLP moderne ! 🏆🚀
❓ Questions/Réponses
Q : Mon Word2Vec donne des résultats pourris, c'est normal ? R : Plusieurs causes : (1) Corpus trop petit (<100M tokens), (2) Pas assez d'epochs (essaie 10-15), (3) Window trop petit (essaie 8-10 pour sémantique), (4) Min_count trop élevé (perds mots importants). Idéalement, 500M+ tokens et GTX 1080 Ti pour entraîner vite avec beaucoup d'epochs !
Q : Word2Vec ou BERT pour mon projet ? R : Si ressources limitées ou baseline rapide : Word2Vec (45min training sur 1080 Ti). Si production/performance critique : BERT/RoBERTa (contexte meilleur). Si domaine spécifique (médical, juridique) : Word2Vec custom peut battre BERT général ! Teste les deux, garde le meilleur.
Q : Comment gérer "banque" (argent) vs "banque" (rivière) ? R : Word2Vec vanilla ne peut pas ! Solutions : (1) Désambiguïsation manuelle avant (banque_finance, banque_rivière), (2) Sense2Vec (extension de Word2Vec), (3) BERT/GPT qui ont contexte. Pour polysémie forte, passe aux contextual embeddings !
🤓 Le saviez-vous ?
Word2Vec a été créé par Tomas Mikolov chez Google en 2013 et le paper a explosé la communauté NLP ! L'exemple "king - man + woman = queen" est devenu iconique et a prouvé que les vecteurs capturent vraiment le sens. Fun fact : au début, les chercheurs pensaient que c'était un artefact statistique sans véritable sens linguistique. Puis on a découvert que toutes les langues montraient les mêmes patterns ! Encore plus fou : Word2Vec multilingue aligné permet de traduire sans dictionnaire : vec_en("dog") proche de vec_fr("chien") dans l'espace commun ! Avant Word2Vec, on utilisait one-hot encoding (chat = [0,0,1,0,0...]) qui capturait zéro sémantique. Word2Vec a montré qu'on pouvait apprendre le sens automatiquement sur texte brut. Une révolution qui a mené directement à BERT, GPT, et tous les LLM modernes ! 🔮🧠⚡
Théo CHARLET
Étudiant TSSR - Spécialisation IA/ML
Créateur d'AG-BPE (Attention-Guided Byte-Pair Encoding)
🔗 LinkedIn: https://www.linkedin.com/in/théo-charlet
🚀 En recherche de stage