Modèles d'intégration de texte

Les modèles d'intégration de texte sont principalement utilisés pour calculer la représentation vectorielle du texte. Ici, le terme "vecteur" se réfère à un vecteur mathématique, également connu sous le nom de vecteur de caractéristiques. En tant que développeur, tout ce que vous devez savoir, c'est qu'un modèle d'intégration de texte peut calculer le vecteur de caractéristiques d'un morceau de texte, et ensuite en utilisant des calculs de similarité de vecteurs, il peut identifier le contenu textuel avec des caractéristiques similaires.

Astuce : Pour des connaissances de base sur les modèles d'intégration de texte, veuillez vous référer au Tutoriel d'introduction sur les modèles d'intégration de texte

Différence entre la recherche vectorielle et la recherche basée sur des mots-clés

  • La recherche vectorielle est basée sur la similarité sémantique des vecteurs de mots. Elle peut trouver des résultats qui sont sémantiquement liés à la requête, même si les mots de la requête et les mots dans les résultats ne correspondent pas exactement. La recherche vectorielle mappe les mots dans un espace vectoriel de haute dimension et calcule la similarité entre les vecteurs. Cela signifie que même si les mots eux-mêmes ne correspondent pas, tant qu'ils sont sémantiquement similaires, des résultats liés peuvent être trouvés.
  • D'autre part, la recherche basée sur des mots-clés est un processus simple de correspondance de chaînes. Elle ne renvoie que des résultats contenant des mots de requête qui correspondent exactement. Si un document utilise des mots différents, même s'ils sont sémantiquement similaires, ils ne seront pas considérés comme une correspondance.

La classe Embeddings est un type de classe spécifiquement conçu pour interagir avec des modèles d'intégration de texte. Il existe de nombreux fournisseurs de modèles d'intégration (comme OpenAI, Cohere, Hugging Face, etc.), et la conception de cette classe est de fournir une interface standard pour tous les fournisseurs.

La classe Embeddings crée la représentation vectorielle du texte. Avec la recherche vectorielle, des recherches sémantiques peuvent être effectuées, par exemple, la recherche des extraits de texte les plus similaires dans l'espace vectoriel.

La classe Embeddings de base dans LangChain expose deux méthodes : l'une pour intégrer des documents et l'autre pour intégrer des requêtes. La première prend plusieurs textes en entrée, tandis que la seconde prend un seul texte en entrée. La raison pour laquelle ils sont traités comme deux méthodes différentes est que certains fournisseurs d'intégration ont des méthodes d'intégration différentes pour les documents à rechercher et les requêtes (les requêtes de recherche elles-mêmes).

Démarrage rapide

Voici un exemple utilisant le modèle d'intégration d'OpenAI :

Configuration

Tout d'abord, nous devons installer le package Python d'OpenAI. Étant donné que LangChain a de nombreuses implémentations différentes de modèles d'intégration de texte, les développeurs doivent installer les dépendances de différents modèles selon leurs choix :

pip install langchain-openai

Configurez la clé OpenAI via les variables d'environnement :

export OPENAI_API_KEY="..."

Si vous ne souhaitez pas définir de variables d'environnement, vous pouvez passer le paramètre nommé openai_api_key directement lors de l'initialisation de la classe OpenAI LLM pour transmettre la clé :

from langchain_openai import OpenAIEmbeddings

embeddings_model = OpenAIEmbeddings(openai_api_key="...")

Sinon, vous pouvez initialiser sans aucun paramètre :

from langchain_openai import OpenAIEmbeddings

embeddings_model = OpenAIEmbeddings()

embed_documents

Calculer les caractéristiques vectorielles d'un lot de texte :

embeddings = embeddings_model.embed_documents(
    [
        "Salut !",
        "Oh, bonjour !",
        "Comment tu t'appelles ?",
        "Mes amis m'appellent World",
        "Bonjour le monde !"
    ]
)
len(embeddings), len(embeddings[0])
(5, 1536)

embed_query

Cette fonction calcule la caractéristique vectorielle d'un texte de requête. En général, cela implique de convertir la question à rechercher en un vecteur de caractéristiques, puis d'utiliser ce vecteur pour rechercher des textes similaires dans la base de vecteurs.

requete_integree = embeddings_model.embed_query("Quel était le nom mentionné dans la conversation ?")
requete_integree[:5]
[0.0053587136790156364,
 -0.0004999046213924885,
 0.038883671164512634,
 -0.003001077566295862,
 -0.00900818221271038]