Text Embeddings

Les embeddings sont au cœur de nombreux cas d'usage en entreprise, tels que les systèmes de récupération, le clustering, l'analyse de code, la classification et diverses applications de recherche. L'intégration de contenu vous permet d'effectuer des recherches sémantiques et diverses tâches de NLP pour vos applications.

API Mistral Embed

API Mistral Embed

Ouvrir dans Colab ↗

Comment générer des embeddings

Pour générer des embeddings de texte avec l'API d'embeddings de Mistral AI, vous pouvez effectuer une requête vers le endpoint de l'API en spécifiant le modèle d'embedding mistral-embed, et en fournissant une liste de textes en entrée. L'API renvoie alors les embeddings correspondants sous forme de vecteurs numériques, qui peuvent être utilisés pour des analyses ou traitements ultérieurs dans des applications NLP.

import os
from mistralai.client import Mistral

api_key = os.environ["MISTRAL_API_KEY"]
model = "mistral-embed"

client = Mistral(api_key=api_key)

embeddings_batch_response = client.embeddings.create(
    model=model,
    inputs=["Embed this sentence.", "As well as this one."],
)

La sortie est un objet embedding contenant les embeddings et les informations d'utilisation des tokens.

Examinons la longueur du premier embedding :

len(embeddings_batch_response.data[0].embedding)

Le résultat est 1024, ce qui signifie que la dimension de notre embedding est 1024. Le modèle mistral-embed génère des vecteurs d'embedding de dimension 1024 pour chaque chaîne de texte, quelle que soit la longueur du texte. Il convient de noter que si des embeddings de dimension supérieure peuvent mieux capturer l'information textuelle et améliorer les performances des tâches NLP, ils peuvent nécessiter davantage de ressources de calcul pour l'hébergement et l'inférence, et peuvent entraîner une latence accrue ainsi qu'une utilisation mémoire plus importante pour le stockage et le traitement de ces embeddings. Ce compromis entre performances et ressources de calcul doit être pris en compte lors de la conception de systèmes NLP qui s'appuient sur des embeddings de texte.

Exemples d'utilisation

Exemples d'utilisation

Vous trouverez ci-dessous quelques exemples d'utilisation de l'API Mistral Embeddings et différents cas d'usage.

Dans le domaine des embeddings de texte, les textes ayant des significations ou des contextes similaires ont tendance à se situer à proximité les uns des autres dans cet espace, mesurée par la distance entre leurs vecteurs. Cela s'explique par le fait que le modèle a appris à regrouper les textes sémantiquement liés pendant le processus d'entraînement.

Examinons un exemple simple. Pour simplifier l'utilisation des embeddings de texte, nous pouvons encapsuler l'API d'embedding dans cette fonction :

from sklearn.metrics.pairwise import euclidean_distances

def get_text_embedding(inputs):
    embeddings_batch_response = client.embeddings.create(
        model=model,
        inputs=inputs
    )
    return embeddings_batch_response.data[0].embedding

Supposons que nous ayons deux phrases : l'une sur les chats et l'autre sur les livres. Nous voulons déterminer la similitude de chaque phrase avec la phrase de référence « Les livres sont des miroirs : vous n'y voyez que ce que vous avez déjà en vous ». On constate que la distance entre les embeddings de la phrase de référence et les embeddings de la phrase sur les livres est plus petite que la distance entre les embeddings de la phrase de référence et les embeddings de la phrase sur les chats.

sentences = [
    "A home without a cat — and a well-fed, well-petted and properly revered cat — may be a perfect home, perhaps, but how can it prove title?",
    "I think books are like people, in the sense that they'll turn up in your life when you most need them"
]
embeddings = [get_text_embedding([t]) for t in sentences]

reference_sentence = "Books are mirrors: You only see in them what you already have inside you"
reference_embedding = get_text_embedding([reference_sentence])

for t, e in zip(sentences, embeddings):
    distance = euclidean_distances([e], [reference_embedding])
    print(t, distance)

Dans notre exemple ci-dessus, nous avons utilisé la distance euclidienne pour mesurer la distance entre les vecteurs d'embedding (notez que puisque les embeddings Mistral AI sont de norme 1, la similarité cosinus, le produit scalaire ou la distance euclidienne sont tous équivalents).