Generare incorporamenti di testo in modo programmatico
Utilizza i modelli di incorporamento e l'API di incorporamento del testo in watsonx.ai per creare rappresentazioni numeriche, sotto forma di vettori, che catturano il significato di frasi o passaggi da utilizzare nelle tue applicazioni di IA generativa.
- Autorizzazioni richieste
- Per vettorializzare il testo, è necessario avere il ruolo di amministratore o editore in un progetto.
- Credenziali richieste
- È necessario generare credenziali per l'autenticazione con le API di watsonx.ai. Per ulteriori dettagli, consultare Generazione di un token portatore.
Modi per svilupparsi
È possibile vettorializzare il testo, ossia convertire il testo in rappresentazioni numeriche del testo chiamate embeddings, utilizzando i seguenti metodi di programmazione:
In alternativa, è possibile utilizzare gli strumenti grafici dell'interfaccia utente di watsonx.ai per vettorializzare i documenti come parte di un flusso di lavoro di chat o per creare indici vettoriali. Vedi Chattare con documenti e immagini e Aggiungere documenti vettorializzati per i prompt del modello di base.
È inoltre possibile utilizzare i modelli di incorporamento di IBM delle seguenti piattaforme di terze parti:
Panoramica dell'architettura
La conversione del testo in incorporazioni testuali, o la vettorializzazione del testo, è utile per il confronto dei documenti, per la risposta alle domande e per le attività di retrieval-augmented generation (RAG), in cui è necessario recuperare rapidamente i contenuti rilevanti.
Un embedding di testo è una rappresentazione numerica di una frase o di un passaggio sotto forma di vettore di numeri reali. Convertendo le frasi in vettori numerici, le operazioni sulle frasi diventano più simili alle equazioni matematiche, che i computer sono in grado di eseguire rapidamente e con precisione.
Quando un modello di incorporamento crea una rappresentazione vettoriale di una frase, il modello di incorporamento assegna valori che catturano il significato semantico della frase. Il modello di incorporamento posiziona inoltre il vettore all'interno di uno spazio multidimensionale in base ai valori assegnati. La dimensione dello spazio dimensionale varia a seconda del modello, il che significa che anche i valori esatti dei vettori variano. Tuttavia, tutti i modelli posizionano i vettori in modo tale che le frasi con significati simili siano più vicine tra loro.
La maggior parte dei modelli di incorporamento genera vettori in così tante dimensioni, che vanno da centinaia a migliaia, da renderne impossibile la visualizzazione. Se un modello di incorporamento dovesse generare un vettore tridimensionale, potrebbe apparire come segue. Si noti che i valori vettoriali mostrati nell'immagine sono fittizi, ma sono inclusi per aiutare a illustrare questo scenario ipotetico.
L'immagine mostra che le frasi con parole chiave e soggetti comuni hanno vettori con valori simili, il che le colloca più vicine tra loro nello spazio tridimensionale. Le seguenti frasi sono posizionate in base ai loro valori vettoriali:
- La riproduzione di Degas è appesa nello studio.
- Jan ha comprato un quadro raffigurante dei cani che giocano a carte.
- Ho portato i miei cani a fare una passeggiata.
Le prime due frasi sull'opera d'arte e le ultime due frasi che condividono la parola chiave "cani" sono più vicine tra loro rispetto alla prima e alla terza frase, che non condividono né parole né significati comuni.
È possibile memorizzare i vettori generati in un database vettoriale. Quando lo stesso modello di incorporamento viene utilizzato per convertire tutte le frasi presenti nel database, l'archivio vettoriale può sfruttare i raggruppamenti e le relazioni intrinseche esistenti tra le frasi in base ai loro valori vettoriali per restituire rapidamente risultati di ricerca pertinenti.
A differenza degli indici tradizionali che memorizzano il testo e si basano sulla ricerca per parole chiave per il recupero delle informazioni, gli archivi vettoriali supportano ricerche semantiche che recuperano informazioni simili nel significato. Ad esempio, mentre la ricerca per parole chiave verifica solo la presenza della parola chiave, la ricerca semantica valuta il contesto in cui la parola chiave viene utilizzata, ottenendo in genere risultati di ricerca migliori.
Modelli di fondazione supportati
Per informazioni dettagliate sui modelli di incorporamento disponibili in watsonx.ai, vedere Modelli di encoder supportati.
Per scoprire quali modelli di incorporamento sono disponibili per l'uso programmatico, utilizzare il metodo List the available foundation models nell'API watsonx.ai. Specificare il parametro filters=function_embedding per restituire solo i modelli di incorporazione disponibili.
curl -X GET \
'https://cpd-<namespace-name>.apps.<OCP-domain>/ml/v1/foundation_model_specs?version=2024-07-25&filters=function_embedding'
Dopo l'installazione del servizio, è necessario aggiungere un modello di incorporamento alla distribuzione.
API REST
Utilizza il metodo di incorporamento del testo dell'API REST watsonx.ai per vettorializzare il testo. Per ulteriori dettagli, consultare la documentazione di riferimento dell'API watsonx.ai.
Il seguente frammento di codice utilizza il modello slate-30m-english-rtrvr per convertire le due righe di testo seguenti in incorporazioni di testo:
- Un modello di base è un modello generativo di IA su larga scala che può essere adattato a una vasta gamma di attività a valle.
- L'IA generativa è una classe di algoritmi di IA in grado di produrre vari tipi di contenuti, tra cui testo, codice sorgente, immagini, audio e dati sintetici.
Anche se in questo esempio vengono inviate per la conversione solo due righe di testo, è possibile specificare fino a 1.000 righe. Ogni riga inviata deve essere conforme al limite massimo di token di input definito dal modello di incorporamento.
Per risolvere i casi in cui una riga potrebbe essere più lunga, è possibile specificare il parametro truncate_input_tokens per forzare il troncamento della riga. In caso contrario, la richiesta potrebbe fallire. In questo esempio, il parametro input_text è incluso in modo che il testo originale venga aggiunto alla risposta, facilitando l'abbinamento del testo originale con ogni serie di valori di incorporamento.
Si specifica il modello di incorporazione che si vuole usare come model_id nel payload del metodo di incorporazione.
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 risposta è simile a questa, anche se in questo esempio i 384 valori di ogni incorporazione sono ridotti a 6 per migliorare la leggibilità dell'esempio:
{
"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
Vedere la classe Embeddings della libreria watsonx.ai Python.
Il seguente frammento di codice illustra come utilizzare il modello slate-30m-english-rtrvr per convertire le due righe di testo seguenti in embedding di testo:
- Un modello di base è un modello generativo di IA su larga scala che può essere adattato a una vasta gamma di attività a valle.
- L'IA generativa è una classe di algoritmi di IA in grado di produrre vari tipi di contenuti, tra cui testo, codice sorgente, immagini, audio e dati sintetici.
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)
Output di esempio
[
[-0.0053823674,-0.018807093,0.009131943, ...-0.010469643,0.0010533642,0.020114796],
[-0.04075534,-0.041552857,0.04326911, ...0.017616473,-0.010064489,0.020788372]
]