Aller au contenu principal

Embeddings de texte

Apres avoir decoupe un document en chunks, l’etape suivante du pipeline RAG est de trouver quels chunks sont les plus pertinents pour la question de l’utilisateur. C’est fondamentalement un probleme de recherche, et la recherche par mots-cles ne suffit pas — il faut comprendre le sens et le contexte.

Qu’est-ce qu’un embedding de texte ?

Un embedding de texte est une representation numerique du sens contenu dans un texte. C’est une conversion de mots et de phrases en un format que les ordinateurs peuvent manipuler mathematiquement.

Le processus :

  1. Vous alimentez un modele d’embedding avec du texte
  2. Le modele produit une longue liste de nombres (typiquement 1024 nombres)
  3. Chaque nombre represente un “score” pour une qualite du texte d’entree
  4. Les nombres vont de -1 a +1

Comprendre les nombres

Chaque nombre dans un embedding est un score pour un aspect du texte. Nous ne savons pas exactement ce que chaque position represente — le modele d’embedding apprend ces patterns pendant l’entrainement et ils ne sont pas interpretables par l’humain.

Generer des embeddings avec du code

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,
    }

    request_json = json.dumps(request_body)
    response = client.invoke_model(
        modelId=embedding_model_id,
        body=request_json,
        accept="application/json",
        contentType="application/json",
    )

    response_body = json.loads(response.get("body").read())
    return response_body["embedding"]

Vous devrez peut-etre demander l’acces au modele d’embedding Titan dans la console AWS Bedrock.

Pourquoi les embeddings comptent pour le RAG

Des textes similaires auront des valeurs d’embedding similaires. Vous pouvez donc comparer mathematiquement la question d’un utilisateur a vos chunks de documents et trouver les plus semantiquement proches, meme s’ils ne partagent pas les memes mots exacts.

Cette representation numerique est ce qui rend la recherche semantique possible et bien plus efficace que la simple correspondance de mots-cles.