Les embeddings textuels
Une fois le document decoupe en chunks, l’etape suivante du pipeline RAG consiste a trouver quels chunks sont les plus pertinents pour la question de l’utilisateur. C’est fondamentalement un probleme de recherche : il faut parcourir tous les chunks et identifier ceux qui correspondent a la question posee.
La recherche semantique
L’approche la plus courante pour trouver les chunks pertinents est la recherche semantique. Contrairement a une recherche par mots-cles qui cherche des correspondances exactes, la recherche semantique utilise des embeddings pour comprendre le sens et le contexte a la fois de la question de l’utilisateur et de chaque chunk.
Qu’est-ce qu’un embedding ?
Un embedding textuel est une representation numerique du sens contenu dans un texte. C’est comme convertir des mots et des phrases dans un format que les ordinateurs peuvent manipuler mathematiquement.
Le processus fonctionne ainsi :
- On envoie du texte a un modele d’embedding
- Le modele renvoie une longue liste de nombres (l’embedding)
- Chaque nombre est compris entre -1 et +1
- Ces nombres representent differentes qualites ou caracteristiques du texte d’entree
Comprendre les nombres
Chaque nombre dans un embedding est essentiellement un “score” pour une qualite du texte. Cependant, point important : on ne sait pas precisement ce que chaque nombre represente.
Il est utile d’imaginer qu’un nombre pourrait mesurer “a quel point le texte est joyeux” ou “a quel point le texte parle d’oceans”, mais ce ne sont que des exemples conceptuels. La signification reelle de chaque dimension est apprise par le modele pendant l’entrainement et n’est pas directement interpretable par un humain.
VoyageAI pour generer des embeddings
Anthropic ne fournit pas actuellement de generation d’embeddings. Le fournisseur recommande est VoyageAI. Pour l’utiliser :
- Creer un compte VoyageAI (gratuit pour demarrer)
- Obtenir une cle API
- Ajouter la cle a vos variables d’environnement
Dans votre fichier .env :
VOYAGE_API_KEY="votre_cle_ici"
Implementation
D’abord, installer la librairie VoyageAI :
%pip install voyageai
Ensuite, configurer le client et creer une fonction pour generer des embeddings :
from dotenv import load_dotenv
import voyageai
load_dotenv()
client = voyageai.Client()
def generate_embedding(text, model="voyage-3-large", input_type="query"):
"""Genere un embedding pour le texte donne."""
result = client.embed([text], model=model, input_type=input_type)
return result.embeddings[0]
Quand vous executez cette fonction sur un chunk de texte, vous obtenez une liste de nombres a virgule flottante representant l’embedding. Le processus est rapide — le vrai defi est de comprendre comment utiliser ces embeddings efficacement pour trouver le contenu le plus pertinent.
L’etape suivante consiste a apprendre comment comparer les embeddings pour determiner quels chunks sont les plus similaires a la question d’un utilisateur, ce qui constitue le coeur de la recherche semantique.
Quiz : Embeddings
Question 1 : Pourquoi utilise-t-on des embeddings plutot qu’une simple recherche par mots-cles ?
Reponse : Les embeddings capturent le sens du texte, pas juste les mots exacts. Ainsi, une question sur “les dangers pour l’entreprise” peut trouver un chunk intitule “Facteurs de risque” meme si les mots exacts ne correspondent pas.
Question 2 : Chaque nombre d’un embedding a-t-il une signification humainement comprehensible ?
Reponse : Non. Les dimensions sont apprises automatiquement par le modele et ne sont pas directement interpretables. On peut imaginer des analogies (joyeux/triste, technique/litteraire), mais ce ne sont que des approximations conceptuelles.