Aller au contenu principal

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èleDimensionsTaille du vecteur
text-embedding-3-small15366KB
text-embedding-3-large307212KB
Cohere embed-v310244KB
BGE-small3841.5KB
BGE-large10244KB

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émantiqueSignifications similaires → Vecteurs proches
CompositionnalitéPhrases encodées de manière significative
MultilingueMême concept similaire à travers les langues
DenseToutes 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.