Chapitre 1 : Qu'est-ce que les embeddings ?
Introduction
Les embeddings sont des représentations vectorielles denses de texte qui capturent le sens sémantique. Ils permettent aux ordinateurs de comprendre et de comparer le sens du texte, et pas seulement les mots.
Le Concept
Pensez aux embeddings comme à des coordonnées dans un "espace de signification" :
"heureux" → [0.2, 0.8, -0.1, 0.5, ...]
"joyeux" → [0.21, 0.79, -0.12, 0.48, ...] // Similaire !
"triste" → [-0.3, 0.1, 0.7, -0.4, ...] // Différent !
Significations similaires = Vecteurs similaires = Proches dans l'espace
Comment fonctionnent les embeddings
1. Texte en vecteur
from openai import OpenAI
client = OpenAI()
# Le texte devient un vecteur
text = "L'apprentissage automatique est fascinant"
response = client.embeddings.create(
input=text,
model="text-embedding-3-small"
)
embedding = response.data[0].embedding
# Résultat : [0.023, -0.891, 0.156, ..., 0.342]
# 1536 dimensions
2. Calcul de similarité
import numpy as np
def cosine_similarity(vec1, vec2):
"""Calculer la similarité cosinus entre deux vecteurs"""
dot_product = np.dot(vec1, vec2)
norm1 = np.linalg.norm(vec1)
norm2 = np.linalg.norm(vec2)
return dot_product / (norm1 * norm2)
# Exemple
similarity = cosine_similarity(
embed("Qu'est-ce que RAG ?"),
embed("Expliquer la génération augmentée par récupération")
)
# Résultat : ~0.92 (très similaire !)
similarity = cosine_similarity(
embed("Qu'est-ce que RAG ?"),
embed("Comment cuisiner des pâtes")
)
# Résultat : ~0.15 (pas similaire)
Dimensions des embeddings
| Modèle | Dimensions | Taille du vecteur |
|---|---|---|
| text-embedding-3-small | 1536 | 6KB |
| text-embedding-3-large | 3072 | 12KB |
| Cohere embed-v3 | 1024 | 4KB |
| BGE-small | 384 | 1.5KB |
| BGE-large | 1024 | 4KB |
Pourquoi les dimensions sont importantes
- Plus de dimensions = Représentations plus nuancées
- Moins de dimensions = Recherche plus rapide, moins de stockage
- Compromis entre qualité et efficacité
Métriques de similarité
Similarité cosinus
La plus courante pour les embeddings de texte :
# Plage : -1 à 1
# 1 = direction identique
# 0 = orthogonal (non lié)
# -1 = direction opposée
cosine_sim = np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
Distance Euclidienne
Mesure la distance en ligne droite :
# Plus bas = plus similaire
euclidean_dist = np.linalg.norm(a - b)
Produit scalaire
Lorsque les vecteurs sont normalisés :
# Pour les vecteurs normalisés, identique à la similarité cosinus
dot_product = np.dot(a, b)
Visualisation des embeddings
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
# Réduire à 2D pour la visualisation
texts = ["chat", "chien", "voiture", "camion", "heureux", "triste"]
embeddings = [embed(t) for t in texts]
tsne = TSNE(n_components=2, random_state=42)
reduced = tsne.fit_transform(embeddings)
plt.scatter(reduced[:, 0], reduced[:, 1])
for i, text in enumerate(texts):
plt.annotate(text, (reduced[i, 0], reduced[i, 1]))
plt.show()
Clusters attendus :
- "chat", "chien" → Cluster des animaux
- "voiture", "camion" → Cluster des véhicules
- "heureux", "triste" → Cluster des émotions
Propriétés clés de bons embeddings
| Propriété | Description |
|---|---|
| Similarité sémantique | Significations similaires → Vecteurs proches |
| Compositionnalité | Phrases encodées de manière significative |
| Multilingue | Même concept similaire à travers les langues |
| Dense | Toutes les dimensions portent du sens |
Embeddings dans RAG
Résumé
- Les embeddings convertissent le texte en vecteurs numériques
- Significations similaires produisent des vecteurs similaires
- La similarité cosinus est la métrique standard
- Les dimensions affectent la qualité vs l'efficacité
- Les embeddings permettent la recherche sémantique dans RAG
Prochaines étapes
Continuez vers Chapitre 2 : Modèles d'embedding pour explorer les options disponibles.