Embeddings de texte
Sur cette page
Une fois le document découpé, il faut trouver les morceaux pertinents pour une question. C’est un problème de recherche, et la recherche par mots-clés ne suffit pas : l’utilisateur demande « Quels problèmes l’entreprise a-t-elle rencontrés ? » quand le document parle de « difficultés opérationnelles ». Il faut comparer le sens, pas les mots. C’est le rôle des embeddings.
Un embedding, c’est quoi ?
Un embedding est une représentation numérique du sens d’un texte :
- vous donnez un texte à un modèle d’embedding ;
- le modèle renvoie une longue liste de nombres, par exemple 1 024 ;
- chaque nombre est une sorte de score pour un aspect du texte ;
- avec des vecteurs normalisés, chaque nombre est compris entre -1 et 1.
Propriété décisive : deux textes de sens voisin donnent des listes de nombres voisines. Le sens devient une position dans un espace, et « parler de la même chose » devient une distance qu’on peut calculer.
Des nombres qu’on ne lit pas
Imaginez qu’un nombre mesure « à quel point le texte est joyeux » et un autre « à quel point il parle d’océans ». C’est une image utile, mais on ne sait pas ce que représente chaque position : le modèle l’apprend pendant son entraînement. En pratique, on ne lit jamais un embedding, on le compare à d’autres.
Générer des embeddings sur Bedrock
Claude ne produit pas d’embeddings : c’est un modèle de conversation. Sur Bedrock, le cours officiel utilise un modèle dédié d’Amazon, Titan Text Embeddings V2, appelé par invoke_model, l’API d’appel brut de Bedrock :
import json
def generate_embedding(text, embedding_model_id="amazon.titan-embed-text-v2:0", dimensions=1024, normalize=True):
request_body = {
"inputText": text,
"dimensions": dimensions,
"normalize": normalize,
}
response = client.invoke_model(
modelId=embedding_model_id,
body=json.dumps(request_body),
accept="application/json",
contentType="application/json",
)
response_body = json.loads(response["body"].read())
return response_body["embedding"]
client est le même client bedrock-runtime que pour Claude. Le corps de la requête suit le format propre à Titan : le texte dans inputText, puis deux options. D’après la documentation AWS au 5 novembre 2026 :
| Paramètre | Valeurs | Par défaut |
|---|---|---|
dimensions | 1 024, 512 ou 256 | 1 024 |
normalize | true ou false | true |
embeddingTypes | float, binary, ou les deux | float |
La réponse contient l’embedding et inputTextTokenCount, le nombre de tokens lus. Le modèle accepte jusqu’à 8 192 tokens ou 50 000 caractères par texte, et un seul texte par appel : pour 100 morceaux, il faut 100 appels. Pour indexer un gros corpus, AWS propose aussi des traitements par lots.
Les limites à connaître
- La langue. La documentation AWS indique que Titan Text Embeddings V2 est optimisé pour l’anglais, avec plus de 100 langues en préversion, et que les questions posées dans une autre langue que celle du corpus donnent des résultats médiocres. Pour un corpus en français, comparez-le à d’autres modèles d’embedding du catalogue Bedrock, comme ceux de Cohere, sur vos propres questions.
- La cohérence. Les morceaux et les questions doivent être vectorisés par le même modèle, avec les mêmes options : un vecteur de 512 nombres ne se compare pas à un vecteur de 1 024.
- L’accès. Titan suit les règles d’accès aux modèles de la leçon 3.
À vous de jouer
Mesurer la proximité. Vectorisez trois phrases : « Le chat dort sur le canapé », « Un félin fait la sieste dans le salon » et « Les taux d’intérêt montent ». Calculez le produit scalaire de chaque paire (les vecteurs sont normalisés, c’est donc leur similarité cosinus). Les deux premières sont-elles nettement plus proches ? Recommencez avec dimensions=256.
Sources officielles : Text embeddings (Claude Academy) · Amazon Titan Embeddings Text et Amazon Titan Text Embeddings models (documentation AWS)
Points clés à retenir
- Un embedding traduit le sens d’un texte en une liste de nombres ; des sens voisins donnent des vecteurs voisins.
- On ne lit pas les nombres d’un embedding : on compare des vecteurs.
- Sur Bedrock : Titan Text Embeddings V2 par
invoke_model, 1 024 dimensions par défaut, un texte par appel. - Titan est optimisé pour l’anglais : pour du français, comparez plusieurs modèles sur vos données.
- Morceaux et questions passent par le même modèle, avec les mêmes options.