Générer des intégrations de texte par programmation
Utilisez les modèles d'intégration et l'API d'intégration de texte dans watsonx.ai pour créer des représentations numériques, sous forme de vecteurs, qui capturent le sens des phrases ou des passages à utiliser dans vos applications d'IA générative.
- Autorisations requises
- Pour vectoriser du texte, vous devez disposer du rôle Administrateur ou Éditeur dans un projet.
- Informations d'identification requises
- Vous devez générer des informations d'identification pour vous authentifier auprès des API d' watsonx.ai. Pour plus d'informations, consultez la section Génération d'un jeton porteur.
Moyens de développement
Vous pouvez vectoriser du texte, c'est-à-dire le convertir en représentations numériques du texte appelées embeddings, en utilisant les méthodes de programmation suivantes :
Vous pouvez également utiliser les outils graphiques de l'interface utilisateur d' watsonx.ai pour vectoriser des documents dans le cadre d'un workflow de chat ou pour créer des index vectoriels. Voir Discuter avec des documents et des images et Ajouter des documents vectorisés pour les invites du modèle de base.
Vous pouvez également utiliser les modèles d'intégration IBM des plateformes tierces suivantes :
Présentation de l'architecture
La conversion du texte en éléments de texte, ou vectorisation du texte, facilite la comparaison de documents, la réponse aux questions et les tâches de récupération et de génération augmentée (RAG), lorsqu'il s'agit d'extraire rapidement un contenu pertinent.
Un encodage de texte est une représentation numérique d'une phrase ou d'un passage sous forme de vecteur de nombres réels. En convertissant les phrases en vecteurs numériques, les opérations sur les phrases s'apparentent davantage à des équations mathématiques, ce que les ordinateurs peuvent faire rapidement et efficacement.
Lorsqu'un modèle d'intégration crée une représentation vectorielle d'une phrase, il attribue des valeurs qui capturent la signification sémantique de la phrase. Le modèle d'intégration positionne également le vecteur dans un espace multidimensionnel en fonction des valeurs qui lui sont attribuées. La taille de l'espace dimensionnel varie selon le modèle, ce qui signifie que les valeurs exactes des vecteurs varient également. Cependant, tous les modèles positionnent les vecteurs de manière à ce que les phrases ayant des significations similaires soient plus proches les unes des autres.
La plupart des modèles d'intégration génèrent des vecteurs dans tellement de dimensions, allant de centaines à des milliers, qu'il est impossible de les visualiser. Si un modèle d'intégration devait générer un vecteur tridimensionnel, il pourrait ressembler à ceci. Veuillez noter que les valeurs vectorielles indiquées dans l'image sont fictives, mais sont incluses afin d'illustrer ce scénario hypothétique.
L'image montre que les phrases ayant des mots-clés communs et des sujets communs ont des vecteurs avec des valeurs similaires, ce qui les place plus près les unes des autres dans l'espace tridimensionnel. Les phrases suivantes sont positionnées en fonction de leurs valeurs vectorielles :
- La reproduction de Degas est accrochée dans le salon.
- Jan a acheté un tableau représentant des chiens jouant aux cartes.
- J'ai promené mes chiens.
Les deux premières phrases concernant les œuvres d'art et les deux dernières phrases contenant le mot-clé « chiens » sont plus proches l'une de l'autre que les première et troisième phrases, qui n'ont aucun mot ni aucune signification en commun.
Vous pouvez stocker les vecteurs générés dans une base de données vectorielle. Lorsque le même modèle d'intégration est utilisé pour convertir toutes les phrases de la base de données, le magasin de vecteurs peut exploiter les regroupements et les relations inhérents qui existent entre les phrases en fonction de leurs valeurs vectorielles afin de renvoyer rapidement des résultats de recherche pertinents.
Contrairement aux index traditionnels qui stockent du texte et s'appuient sur la recherche par mot-clé pour récupérer des informations, les bases de données vectorielles prennent en charge les recherches sémantiques qui permettent de récupérer des informations similaires en termes de signification. Par exemple, alors que la recherche par mot-clé vérifie uniquement si le mot-clé est présent, la recherche sémantique évalue le contexte dans lequel le mot-clé est utilisé, ce qui produit généralement de meilleurs résultats de recherche.
Modèles de fondations soutenus
Pour plus d'informations sur les modèles d'intégration disponibles dans watsonx.ai, voir Modèles d'encodeurs pris en charge.
Pour connaître les modèles d'intégration disponibles pour une utilisation par programmation, utilisez la méthode List the available foundation models de l'API watsonx.ai. Spécifiez le paramètre filters=function_embedding pour ne renvoyer que les modèles d'intégration disponibles.
curl -X GET \
'https://cpd-<namespace-name>.apps.<OCP-domain>/ml/v1/foundation_model_specs?version=2024-07-25&filters=function_embedding'
Un modèle d'intégration doit être ajouté à votre déploiement après l'installation du service.
API REST
Utilisez la méthode d'intégration de texte de l'API REST watsonx.ai pour vectoriser le texte. Pour plus d'informations, consultez la documentation de référence de l'API watsonx.ai.
L'extrait de code suivant utilise le modèle slate-30m-english-rtrvr pour convertir les deux lignes de texte suivantes en éléments de texte :
- Un modèle de base est un modèle d'IA générative à grande échelle qui peut être adapté à un large éventail de tâches en aval.
- L'IA générative est une classe d'algorithmes d'IA qui peuvent produire divers types de contenu, notamment du texte, du code source, des images, du son et des données synthétiques.
Bien que seules deux lignes de texte soient soumises à la conversion dans cet exemple, vous pouvez spécifier jusqu'à 1 000 lignes. Chaque ligne que vous soumettez doit être conforme à la limite maximale de jetons d'entrée définie par le modèle d'intégration.
Pour les cas où une ligne pourrait être plus longue, le paramètre truncate_input_tokens est spécifié pour forcer la troncature de la ligne. Dans le cas contraire, la demande risque d'échouer. Dans cet exemple, le paramètre input_text est inclus pour que le texte original soit ajouté à la réponse, ce qui facilite l'association du texte original à chaque ensemble de valeurs d'intégration.
Vous spécifiez le modèle d'intégration que vous souhaitez utiliser en tant que model_id dans la charge utile de la méthode d'intégration.
curl -X POST \
'https://cpd-<namespace-name>.apps.<OCP-domain>/ml/v1/text/embeddings?version=2024-05-02' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJraWQiOi...' \
--data-raw '{
"inputs": [
"A foundation model is a large-scale generative AI model that can be adapted to a wide range of downstream tasks.",
"Generative AI a class of AI algorithms that can produce various types of content including text, source code, imagery, audio, and synthetic data."
],
"parameters":{
"truncate_input_tokens": 128,
"return_options":{
"input_text":true
}
},
"model_id": "ibm/slate-30m-english-rtrvr",
"project_id": "81966e98-c691-48a2-9bcc-e637a84db410"
}'
La réponse ressemble à ceci, bien que dans cet exemple de réponse, les 384 valeurs de chaque intégration soient réduites à 6 valeurs pour améliorer la lisibilité de l'exemple :
{
"model_id": "ibm/slate-30m-english-rtrvr",
"created_at": "2024-05-02T16:21:56.771Z",
"results": [
{
"embedding": [
-0.023104044,
0.05364946,
0.062400896,
...
0.008527246,
-0.08910927,
0.048190728
],
"input": "A foundation model is a large-scale generative AI model that can be adapted to a wide range of downstream tasks."
},
{
"embedding": [
-0.024285838,
0.03582272,
0.008893765,
...
0.0148864435,
-0.051656704,
0.012944954
],
"input": "Generative AI a class of AI algorithms that can produce various types of content including text, source code, imagery, audio, and synthetic data."
}
],
"input_token_count": 57
}
Python
Voir la classe Embeddings de la bibliothèque watsonx.ai Python.
L'extrait de code suivant illustre comment utiliser le modèle slate-30m-english-rtrvr pour convertir les deux lignes de texte suivantes en intégrations de texte :
- Un modèle de base est un modèle d'IA générative à grande échelle qui peut être adapté à un large éventail de tâches en aval.
- L'IA générative est une classe d'algorithmes d'IA qui peuvent produire divers types de contenu, notamment du texte, du code source, des images, du son et des données synthétiques.
from ibm_watsonx_ai.foundation_models import Embeddings
from ibm_watsonx_ai.metanames import EmbedTextParamsMetaNames as EmbedParams
my_credentials = {
"url": "https://cpd-cpd-instance.apps.example.com",
"apikey": <my-API-key>,
}
client = APIClient(my_credentials)
model_id = client.foundation_models.EmbeddingModels.SLATE_30M_ENGLISH_RTRVR
gen_parms = None
project_id = <my-project-ID>
space_id = None
verify = False
# Set the truncate_input_tokens to a value that is equal to or less than the maximum allowed tokens for the embedding model that you are using. If you don't specify this value and the input has more tokens than the model can process, an error is generated.
embed_params = {
EmbedParams.TRUNCATE_INPUT_TOKENS: 128,
EmbedParams.RETURN_OPTIONS: {
'input_text': True
}
}
embedding = Embeddings(
model_id=model_id,
credentials=my_credentials,
params=embed_params,
project_id=project_id,
space_id=space_id,
verify=verify
)
q = [
"A foundation model is a large-scale generative AI model that can be adapted to a wide range of downstream tasks.",
"Generative AI a class of AI algorithms that can produce various types of content including text, source code, imagery, audio, and synthetic data."
]
embedding_vectors = embedding.embed_documents(texts=q)
print(embedding_vectors)
Exemple de sortie
[
[-0.0053823674,-0.018807093,0.009131943, ...-0.010469643,0.0010533642,0.020114796],
[-0.04075534,-0.041552857,0.04326911, ...0.017616473,-0.010064489,0.020788372]
]