Choisir un type de tâche d'embedding

Les modèles d'embeddings Vertex AI peuvent générer des embeddings optimisés pour différents types de tâches, tels que la récupération de documents, l'établissement de systèmes de questions-réponses et la vérification des faits. Les types de tâches sont des étiquettes qui optimisent les embeddings générés par le modèle en fonction de votre cas d'utilisation. Ce document explique comment choisir le type de tâche optimal pour vos embeddings.

Modèles compatibles

Les types de tâches sont compatibles avec les modèles suivants :

  • text-embedding-005
  • text-multilingual-embedding-002
  • gemini-embedding-001

Avantages des types de tâches

Les types de tâches peuvent améliorer la qualité des embeddings générés par un modèle d'embeddings.

Les questions et leurs réponses ne sont pas sémantiquement similaires
Figure 1. Les questions et leurs réponses ne sont pas sémantiquement similaires. Par conséquent, les embeddings ne montrent pas automatiquement leur relation.

Par exemple, lors de la création de systèmes de génération augmentée par récupération (RAG), il est courant d'utiliser des embeddings textuels et la recherche vectorielle pour effectuer une recherche de similitude. Dans certains cas, cela peut entraîner une dégradation de la qualité de la recherche, car les questions et leurs réponses ne sont pas sémantiquement similaires. Par exemple, une question comme "Pourquoi le ciel est-il bleu ?" et sa réponse "La diffusion de la lumière du soleil provoque la couleur bleue" ont des significations distinctes en tant qu'énoncés. Cela signifie qu'un système RAG ne reconnaîtra pas automatiquement leur relation, comme illustré dans la figure 1. Sans types de tâches, un développeur RAG doit entraîner son modèle pour apprendre la relation entre les requêtes et les réponses. Cela nécessite des compétences et une expérience avancées en data science, ou l'utilisation de l'extension des requêtes basée sur un LLM ou HyDE, qui peut entraîner une latence et des coûts élevés.

Le type de tâche rapproche les questions et les réponses dans l'espace d'embeddings
Figure 2. Les types de tâches optimisent les embeddings pour des tâches spécifiques. Dans ce cas, les questions et les réponses sont rapprochées dans l'espace d'embeddings.

Les types de tâches vous permettent de générer des embeddings optimisés pour des tâches spécifiques. Vous pouvez ainsi gagner du temps et éviter les coûts nécessaires pour développer vos propres embeddings spécifiques à des tâches. L'embedding généré pour la requête "Pourquoi le ciel est-il bleu ?" et sa réponse "La couleur bleue est due à la diffusion de la lumière du soleil" se trouveraient dans l'espace d'embedding partagé qui représente la relation entre eux, comme illustré dans la figure 2. Dans cet exemple de RAG, les embeddings optimisés permettent d'améliorer les recherches de similitude.

En plus du cas d'utilisation de la requête et de la réponse, les types de tâches fournissent également un espace d'embeddings optimisé pour des tâches telles que la classification, le clustering et la vérification des faits.

Types de tâches compatibles

Les modèles d'embeddings qui utilisent des types de tâches sont compatibles avec les types de tâches suivants :

Type de tâche Description
CLASSIFICATION Permet de générer des embeddings optimisés pour classer des textes en fonction d'étiquettes prédéfinies
CLUSTERING Permet de générer des embeddings optimisés pour regrouper des textes en fonction de leurs similitudes
RETRIEVAL_DOCUMENT, RETRIEVAL_QUERY, QUESTION_ANSWERING et FACT_VERIFICATION Permettent de générer des embeddings optimisés pour la recherche de documents ou la récupération d'informations
CODE_RETRIEVAL_QUERY Permet de récupérer un bloc de code en fonction d'une requête en langage naturel, par exemple trier un tableau ou inverser une liste associée. Les embeddings des blocs de code sont calculés à l'aide de RETRIEVAL_DOCUMENT.
SEMANTIC_SIMILARITY Permet de générer des embeddings optimisés pour évaluer la similitude de texte. Il n'est pas destiné aux cas d'utilisation de récupération.

Le type de tâche le plus adapté à votre job d'embeddings dépend du cas d'utilisation de vos embeddings. Avant de sélectionner un type de tâche, déterminez le cas d'utilisation de vos embeddings.

Déterminer le cas d'utilisation de vos embeddings

Les cas d'utilisation des embeddings appartiennent généralement à l'une des quatre catégories suivantes : évaluer la similitude des textes, classer les textes, regrouper les textes ou récupérer des informations à partir de textes. Si votre cas d'utilisation ne correspond à aucune des catégories précédentes, utilisez le type de tâche RETRIEVAL_QUERY par défaut.

Il existe deux types de mise en forme des instructions de tâches : le format asymétrique et le format symétrique. Vous devrez utiliser le bon en fonction de votre cas d'utilisation.

Cas d'utilisation de la récupération
(format asymétrique)
Type de tâche de requête Type de tâche de document
Requête de recherche RETRIEVAL_QUERY RETRIEVAL_DOCUMENT
Systèmes de questions-réponses QUESTION_ANSWERING
Fact-checking FACT_VERIFICATION
Récupération du code CODE_RETRIEVAL_QUERY



Cas d'utilisation à entrée unique
(format symétrique)
Type de tâche d'entrée
Classification CLASSIFICATION
Clustering CLUSTERING
Similarité sémantique
(Ne pas utiliser pour les cas d'utilisation de récupération ;
destiné à la STS)
SEMANTIC_SIMILARITY

Classer des textes

Si vous souhaitez utiliser des embeddings pour classer des textes en fonction d'étiquettes prédéfinies, utilisez le type de tâche CLASSIFICATION. Ce type de tâche génère des embeddings dans un espace d'embeddings optimisé pour la classification.

Par exemple, supposons que vous souhaitiez générer des embeddings pour des posts sur les réseaux sociaux que vous pourrez ensuite utiliser pour classer leur sentiment comme positif, négatif ou neutre. Lors de la classification des embeddings du post sur les réseaux sociaux : "Je n'aime pas voyager en avion", le sentiment est classé comme négatif.

Regrouper des textes

Si vous souhaitez utiliser des embeddings pour regrouper des textes en fonction de leurs similitudes, utilisez le type de tâche CLUSTERING. Ce type de tâche génère des embeddings optimisés pour être regroupés en fonction de leurs similitudes.

Par exemple, supposons que vous souhaitiez générer des embeddings pour des articles d'actualité afin de pouvoir présenter aux utilisateurs des articles qui sont liés aux sujets qu'ils ont déjà lus. Une fois les embeddings générés et regroupés, vous pouvez suggérer d'autres articles sur le sport aux utilisateurs qui lisent beaucoup d'articles sur ce sujet.

Voici d'autres cas d'utilisation du clustering :

  • Segmentation de la clientèle : regroupez les clients dont les embeddings générés à partir de leurs profils ou de leurs activités sont similaires pour des campagnes marketing ciblées et des expériences personnalisées.
  • Segmentation des produits : regrouper les embeddings de produits en fonction de leur titre et de leur description, de leurs images ou des avis clients peut aider les entreprises à analyser leurs produits par segment.
  • Études de marché : regrouper les réponses à des enquêtes auprès des consommateurs ou les données intégrées des réseaux sociaux peut révéler des tendances et des modèles cachés dans les opinions, les préférences et les comportements des consommateurs, ce qui permet d'améliorer les études de marché et d'orienter les stratégies de développement de produits.
  • Santé : regrouper les embeddings de patients issus de données médicales peut aider à identifier des groupes présentant des états de santé ou des réponses au traitement similaires, ce qui permet de proposer des protocoles de soin et des traitements ciblés plus personnalisés.
  • Tendances des commentaires des clients : regrouper les commentaires des clients provenant de différents canaux (enquêtes, réseaux sociaux, demandes d'assistance) peut aider à identifier les problèmes courants, les demandes de fonctionnalités et les domaines à améliorer d'un produit.

Récupérer des informations à partir de textes

Lorsque vous créez un système de recherche ou de récupération, vous travaillez avec deux types de texte :

  • Corpus : ensemble de documents dans lesquels vous souhaitez effectuer une recherche.
  • Requête : texte fourni par un utilisateur pour rechercher des informations dans le corpus.

Pour obtenir les meilleures performances, vous devez utiliser différents types de tâches pour générer des embeddings pour votre corpus et vos requêtes.

Commencez par générer des embeddings pour l'ensemble de votre collection de documents. Il s'agit du contenu qui sera récupéré par les requêtes utilisateur. Lorsque vous intégrez ces documents, utilisez le type de tâche RETRIEVAL_DOCUMENT. Vous effectuez généralement cette étape une fois pour indexer l'ensemble de votre corpus, puis stocker les embeddings obtenus dans une base de données vectorielle.

Ensuite, lorsqu'un utilisateur envoie une recherche, vous générez un embedding pour le texte de sa requête en temps réel. Pour ce faire, vous devez utiliser un type de tâche qui correspond à l'intention de l'utilisateur. Votre système utilisera ensuite cet embedding de requête pour trouver les embeddings de documents les plus similaires dans votre base de données vectorielle.

Les types de tâches suivants sont utilisés pour les requêtes :

  • RETRIEVAL_QUERY : utilisez cette option pour une requête de recherche standard lorsque vous souhaitez trouver des documents pertinents. Le modèle recherche des embeddings de documents qui sont sémantiquement proches de l'embedding de la requête.
  • QUESTION_ANSWERING : à utiliser lorsque toutes les requêtes sont formulées comme des questions, par exemple "Pourquoi le ciel est-il bleu ?" ou "Comment nouer mes lacets ?".
  • FACT_VERIFICATION : à utiliser lorsque vous souhaitez récupérer un document de votre corpus qui confirme ou réfute une affirmation. Par exemple, la requête "les pommes poussent sous terre" peut renvoyer un article sur les pommes qui réfutera en fin de compte l'affirmation.

Prenons les scénarios concrets suivants, où les requêtes de récupération seraient utiles :

  • Pour une plate-forme d'e-commerce, vous pouvez utiliser des embeddings pour permettre aux utilisateurs de rechercher des produits à l'aide de requêtes textuelles et d'images. Vous offrirez ainsi une expérience d'achat plus intuitive et engageante.
  • Pour une plate-forme éducative, vous pouvez créer un système de questions-réponses capable de répondre aux questions des élèves en fonction du contenu des manuels ou des ressources éducatives. Cela vous permettra d'offrir des expériences d'apprentissage personnalisées et d'aider les élèves à comprendre des concepts complexes.

Récupération du code

text-embedding-005 est compatible avec le nouveau type de tâche CODE_RETRIEVAL_QUERY, qui permet de récupérer des blocs de code pertinents à l'aide de requêtes en texte brut. Pour utiliser cette fonctionnalité, les blocs de code doivent être intégrés à l'aide du type de tâche RETRIEVAL_DOCUMENT, tandis que les requêtes textuelles sont intégrées à l'aide de CODE_RETRIEVAL_QUERY.

Pour explorer tous les types de tâches, consultez la documentation de référence sur les modèles.

Voici un exemple :

REST

PROJECT_ID=PROJECT_ID

curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/text-embedding-005:predict -d \
$'{ 
  "instances": [
    {
      "task_type": "CODE_RETRIEVAL_QUERY",
      "content": "Function to add two numbers"
    }
  ],
}'

Python

Pour savoir comment installer ou mettre à jour le SDK Vertex AI pour Python, consultez la section Installer le SDK Vertex AI pour Python. Pour en savoir plus, consultez la documentation de référence de l'API Python.

from vertexai.language_models import TextEmbeddingInput, TextEmbeddingModel

MODEL_NAME = "gemini-embedding-001"
DIMENSIONALITY = 3072


def embed_text(
    texts: list[str] = ["Retrieve a function that adds two numbers"],
    task: str = "CODE_RETRIEVAL_QUERY",
    model_name: str = "gemini-embedding-001",
    dimensionality: int | None = 3072,
) -> list[list[float]]:
    """Embeds texts with a pre-trained, foundational model."""
    model = TextEmbeddingModel.from_pretrained(model_name)
    kwargs = dict(output_dimensionality=dimensionality) if dimensionality else {}

    embeddings = []
    # gemini-embedding-001 takes one input at a time
    for text in texts:
        text_input = TextEmbeddingInput(text, task)
        embedding = model.get_embeddings([text_input], **kwargs)
        print(embedding)
        # Example response:
        # [[0.006135190837085247, -0.01462465338408947, 0.004978656303137541, ...]]
        embeddings.append(embedding[0].values)

    return embeddings


if __name__ == "__main__":
    # Embeds code block with a pre-trained, foundational model.
    # Using this function to calculate the embedding for corpus.
    texts = ["Retrieve a function that adds two numbers"]
    task = "CODE_RETRIEVAL_QUERY"
    code_block_embeddings = embed_text(
        texts=texts, task=task, model_name=MODEL_NAME, dimensionality=DIMENSIONALITY
    )

    # Embeds code retrieval with a pre-trained, foundational model.
    # Using this function to calculate the embedding for query.
    texts = [
        "def func(a, b): return a + b",
        "def func(a, b): return a - b",
        "def func(a, b): return (a ** 2 + b ** 2) ** 0.5",
    ]
    task = "RETRIEVAL_DOCUMENT"
    code_query_embeddings = embed_text(
        texts=texts, task=task, model_name=MODEL_NAME, dimensionality=DIMENSIONALITY
    )

Évaluer la similitude de texte

Si vous souhaitez utiliser des embeddings pour évaluer la similitude des textes, utilisez le type de tâche SEMANTIC_SIMILARITY. Ce type de tâche génère des embeddings optimisés pour générer des scores de similitude.

Par exemple, supposons que vous souhaitiez générer des embeddings pour comparer la similitude des textes suivants :

  • Le chat dort
  • Le félin fait la sieste

Lorsque les embeddings sont utilisés pour créer un score de similitude, ce score est élevé, car les deux textes ont presque le même sens.

Considérez les scénarios réels suivants où il serait utile d'évaluer la similitude des entrées :

  • Pour un système de recommandation, vous devez identifier les éléments (produits, articles, films, etc.) qui sont sémantiquement similaires aux éléments préférés d'un utilisateur, en fournissant des recommandations personnalisées et en améliorant la satisfaction des utilisateurs.

Les limites suivantes s'appliquent lorsque vous utilisez ces modèles :

  • N'utilisez pas ces modèles en version preview sur des systèmes critiques ou de production.
  • Ces modèles ne sont disponibles que dans la zone us-central1.
  • Les prédictions par lots ne sont pas prises en charge.
  • La personnalisation n'est pas prise en charge.

Étape suivante