Embedding
Gli embedding di testo sono rappresentazioni numeriche del testo che consentono di misurare la similarità semantica. Questa guida introduce gli embedding, le loro applicazioni e come utilizzare i modelli di embedding per attività come ricerca, raccomandazioni e rilevamento di anomalie.
Prima di implementare gli embedding
Quando selezioni un fornitore di embedding, ci sono diversi fattori che puoi considerare in base alle tue esigenze e preferenze:
- Dimensione del dataset e specificità di dominio: dimensione del dataset di addestramento del modello e sua rilevanza rispetto al dominio di cui vuoi creare gli embedding. Dati più ampi o più specifici per il dominio producono generalmente embedding migliori all'interno del dominio
- Prestazioni di inferenza: velocità di ricerca degli embedding e "latency" (latenza) end-to-end. Questa è una considerazione particolarmente importante per deployment di produzione su larga scala
- Personalizzazione: opzioni per l'addestramento continuato su dati privati o la specializzazione dei modelli per domini molto specifici. Questo può migliorare le prestazioni su vocabolari unici
Come ottenere embedding con Anthropic
Anthropic non offre un proprio modello di embedding. Un fornitore di embedding che dispone di un'ampia varietà di opzioni e funzionalità che coprono tutte le considerazioni precedenti è Voyage AI.
Voyage AI realizza modelli di embedding all'avanguardia e offre modelli personalizzati per specifici settori industriali come finanza e sanità, oppure modelli su misura sottoposti a "fine-tuning" (affinamento) per singoli clienti.
Il resto di questa guida riguarda Voyage AI, ma dovresti valutare diversi fornitori di embedding per trovare quello più adatto al tuo caso d'uso specifico.
Modelli disponibili
Voyage consiglia di utilizzare i seguenti modelli di embedding di testo:
Voyage 4 (ultima generazione)
| Modello | Lunghezza del contesto | Dimensione dell'embedding | Descrizione |
|---|---|---|---|
voyage-4-large | 32.000 | 1024 (predefinita), 256, 512, 2048 | La migliore qualità di retrieval generico e multilingue. Consulta il post del blog su Voyage 4 per i dettagli. |
voyage-4 | 32.000 | 1024 (predefinita), 256, 512, 2048 | Ottimizzato per la qualità di retrieval generico e multilingue. Bilancia qualità ed efficienza. Consulta il post del blog su Voyage 4 per i dettagli. |
voyage-4-lite | 32.000 | 1024 (predefinita), 256, 512, 2048 | Ottimizzato per latenza e costo. Consulta il post del blog su Voyage 4 per i dettagli. |
voyage-4-nano | 32.000 | 1024 (predefinita), 256, 512, 2048 | Modello open-weight (licenza Apache 2.0) disponibile su Hugging Face. Consulta il post del blog su Voyage 4 per i dettagli. |
Generazione precedente
| Modello | Lunghezza del contesto | Dimensione dell'embedding | Descrizione |
|---|---|---|---|
voyage-3-large | 32.000 | 1024 (predefinita), 256, 512, 2048 | La migliore qualità di retrieval generico e multilingue. Consulta il post del blog su voyage-3-large per i dettagli. |
voyage-3.5 | 32.000 | 1024 (predefinita), 256, 512, 2048 | Ottimizzato per la qualità di retrieval generico e multilingue. Consulta il post del blog su voyage-3.5 per i dettagli. |
voyage-3.5-lite | 32.000 | 1024 (predefinita), 256, 512, 2048 | Ottimizzato per latenza e costo. Consulta il post del blog su voyage-3.5 per i dettagli. |
voyage-code-3 | 32.000 | 1024 (predefinita), 256, 512, 2048 | Ottimizzato per il retrieval di codice. Consulta il post del blog su voyage-code-3 per i dettagli. |
voyage-finance-2 | 32.000 | 1024 | Ottimizzato per retrieval e RAG in ambito finanziario. Consulta il post del blog su voyage-finance-2 per i dettagli. |
voyage-law-2 | 16.000 | 1024 | Ottimizzato per retrieval e RAG in ambito legale e con contesto lungo. Prestazioni migliorate anche in tutti i domini. Consulta il post del blog su voyage-law-2 per i dettagli. |
Inoltre, Voyage consiglia i seguenti modelli di embedding multimodali:
| Modello | Lunghezza del contesto | Dimensione dell'embedding | Descrizione |
|---|---|---|---|
voyage-multimodal-3.5 | 32.000 | 1024 (predefinita), 256, 512, 2048 | Ricco modello di embedding multimodale in grado di vettorizzare testo, immagini e video interlacciati. Include il supporto video come primo modello di embedding video di livello produzione. Consulta il post del blog su voyage-multimodal-3.5 per i dettagli. |
voyage-multimodal-3 | 32.000 | 1024 | Ricco modello di embedding multimodale in grado di vettorizzare testo interlacciato e immagini ricche di contenuto, come screenshot di PDF, slide, tabelle, figure e altro. Consulta il post del blog su voyage-multimodal-3 per i dettagli. |
I seguenti modelli di embedding di chunk contestualizzati producono vettori a livello di chunk che catturano il contesto completo del documento senza arricchimento manuale dei metadati. Chiama questi modelli con contextualized_embed() invece di embed():
| Modello | Lunghezza del contesto | Dimensione dell'embedding | Descrizione |
|---|---|---|---|
voyage-context-4 | 120.000 | 1024 (predefinita), 256, 512, 2048 | Embedding di chunk contestualizzati ottimizzati per la qualità di retrieval generico e multilingue. Consulta il post del blog su voyage-context-4 per i dettagli. |
voyage-context-3 | 120.000 | 1024 (predefinita), 256, 512, 2048 | Embedding di chunk contestualizzati ottimizzati per la qualità di retrieval generico e multilingue. Consulta il post del blog su voyage-context-3 per i dettagli. |
Voyage AI offre anche reranker, che prendono una query e un elenco di documenti e li restituiscono ordinati per rilevanza rispetto alla query. Chiama questi modelli con rerank():
| Modello | Lunghezza del contesto | Descrizione |
|---|---|---|
rerank-2.5 | 32.000 | Massima accuratezza. Consigliato per la maggior parte delle applicazioni. Consulta il post del blog su rerank-2.5 per i dettagli. |
rerank-2.5-lite | 32.000 | Ottimizzato per latenza e costo. Consulta il post del blog su rerank-2.5 per i dettagli. |
Hai bisogno di aiuto per decidere quale modello di embedding di testo utilizzare? Consulta le FAQ di Voyage AI.
Iniziare con Voyage AI
Per accedere agli embedding di Voyage:
- Registrati sul sito web di Voyage AI.
- Ottieni una "API key" (chiave API).
- Imposta la chiave API come variabile d'ambiente per comodità:
export VOYAGE_API_KEY="<your secret key>"Puoi ottenere gli embedding utilizzando il pacchetto Python voyageai ufficiale oppure tramite richieste HTTP, come descritto nelle sezioni seguenti.
Libreria Python di Voyage
Installa il pacchetto voyageai utilizzando il seguente comando:
pip install -U voyageaiQuindi, puoi creare un oggetto client e iniziare a usarlo per creare gli embedding dei tuoi testi:
import voyageai
vo = voyageai.Client()
# Questo userà automaticamente la variabile d'ambiente VOYAGE_API_KEY.
# In alternativa, puoi usare vo = voyageai.Client(api_key="<your secret key>")
texts = ["Sample text 1", "Sample text 2"]
result = vo.embed(texts, model="voyage-4", input_type="document")
print(result.embeddings[0])
print(result.embeddings[1])result.embeddings è una lista di due vettori di embedding, ciascuno contenente 1024 numeri in virgola mobile. Dopo aver eseguito il codice precedente, i due embedding vengono stampati a schermo:
[-0.013131560757756233, 0.019828535616397858, ...] # embedding for "Sample text 1"
[-0.0069352793507277966, 0.020878976210951805, ...] # embedding for "Sample text 2"Quando crei gli embedding, puoi specificare alcuni altri argomenti per la funzione embed().
Per maggiori informazioni sul pacchetto Python di Voyage, consulta la documentazione del pacchetto Python di Voyage.
API HTTP di Voyage
Puoi anche ottenere gli embedding effettuando richieste all'API HTTP di Voyage. Ad esempio, puoi inviare una richiesta HTTP tramite il comando curl in un terminale:
curl https://api.voyageai.com/v1/embeddings \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $VOYAGE_API_KEY" \
-d '{
"input": ["Sample text 1", "Sample text 2"],
"model": "voyage-4"
}'La risposta che otterresti è un oggetto JSON contenente gli embedding e l'utilizzo dei token:
{
"object": "list",
"data": [
{
"embedding": [-0.013131560757756233, 0.019828535616397858 /* ... */],
"index": 0
},
{
"embedding": [-0.0069352793507277966, 0.020878976210951805 /* ... */],
"index": 1
}
],
"model": "voyage-4",
"usage": {
"total_tokens": 10
}
}Per maggiori informazioni sull'API HTTP di Voyage, consulta la documentazione dell'API HTTP di Voyage.
AWS Marketplace
Gli embedding di Voyage sono disponibili su AWS Marketplace. Le istruzioni per accedere a Voyage su AWS sono disponibili nella documentazione di Voyage su AWS Marketplace.
Esempio di avvio rapido
Il seguente breve esempio mostra come utilizzare gli embedding.
Supponi di avere un piccolo corpus di sei documenti da cui effettuare il retrieval
documents = [
"The Mediterranean diet emphasizes fish, olive oil, and vegetables, believed to reduce chronic diseases.",
"Photosynthesis in plants converts light energy into glucose and produces essential oxygen.",
"20th-century innovations, from radios to smartphones, centered on electronic advancements.",
"Rivers provide water, irrigation, and habitat for aquatic species, vital for ecosystems.",
"Apple's conference call to discuss fourth fiscal quarter results and business updates is scheduled for Thursday, November 2, 2023 at 2:00 p.m. PT / 5:00 p.m. ET.",
"Shakespeare's works, like 'Hamlet' and 'A Midsummer Night's Dream,' endure in literature.",
]Per prima cosa, usa Voyage per convertire ciascun documento in un vettore di embedding.
import voyageai
vo = voyageai.Client()
# Incorpora i documenti
doc_embds = vo.embed(documents, model="voyage-4", input_type="document").embeddingsGli embedding ti consentono di effettuare ricerca semantica / retrieval nello spazio vettoriale. Data una query di esempio,
query = "When is Apple's conference call scheduled?"Successivamente, convertila in un embedding ed esegui una ricerca del vicino più prossimo (nearest neighbor) per trovare il documento più rilevante in base alla distanza nello spazio degli embedding.
import numpy as np
# Incorpora la query
query_embd = vo.embed([query], model="voyage-4", input_type="query").embeddings[0]
# Calcola la similarità
# Gli embedding di Voyage sono normalizzati a lunghezza 1, quindi il prodotto scalare
# e la similarità del coseno coincidono.
similarities = np.dot(doc_embds, query_embd)
retrieved_id = np.argmax(similarities)
print(documents[retrieved_id])Nota che input_type="document" e input_type="query" vengono utilizzati rispettivamente per creare l'embedding del documento e della query. Ulteriori specifiche sono disponibili in Libreria Python di Voyage.
L'output è il quinto documento, che è effettivamente il più rilevante per la query:
Apple's conference call to discuss fourth fiscal quarter results and business updates is scheduled for Thursday, November 2, 2023 at 2:00 p.m. PT / 5:00 p.m. ET.Se stai cercando un insieme dettagliato di ricette su come fare RAG con gli embedding, inclusi i database vettoriali, consulta la ricetta RAG.
FAQ
I modelli di embedding si basano su potenti reti neurali per catturare e comprimere il contesto semantico, in modo simile ai modelli generativi. Il team di esperti ricercatori di IA di Voyage ottimizza ogni componente del processo di embedding, tra cui:
- Architettura del modello
- Raccolta dei dati
- Funzioni di perdita
- Selezione dell'ottimizzatore
Scopri di più sull'approccio tecnico di Voyage sul blog di Voyage AI.
Per embedding generici, i modelli consigliati sono:
voyage-4-large: migliore qualitàvoyage-4-lite: latenza e costo più bassivoyage-4: prestazioni bilanciate
Per il retrieval, usa il parametro input_type per specificare se il testo è di tipo query o documento.
Modelli specifici per dominio:
- Attività legali:
voyage-law-2 - Codice e documentazione di programmazione:
voyage-code-3 - Attività legate alla finanza:
voyage-finance-2
Per il retrieval a livello di chunk e a livello di documento: voyage-context-4
Puoi utilizzare gli embedding di Voyage con la similarità del prodotto scalare, la similarità del coseno o la distanza euclidea. Per una spiegazione della similarità tra embedding, consulta questa guida alla similarità vettoriale.
Gli embedding di Voyage AI sono normalizzati a lunghezza 1, il che significa che:
- La similarità del coseno è equivalente alla similarità del prodotto scalare, mentre quest'ultima può essere calcolata più rapidamente.
- La similarità del coseno e la distanza euclidea producono classifiche identiche.
Consulta la guida alla tokenizzazione di Voyage.
Per tutte le attività e i casi d'uso di retrieval (ad esempio, RAG), usa il parametro input_type per specificare se il testo di input è una query o un documento. Non omettere input_type né impostare input_type=None. Specificare se il testo di input è una query o un documento può creare migliori rappresentazioni vettoriali dense per il retrieval, il che può portare a una migliore qualità di retrieval.
Quando si utilizza il parametro input_type, prompt speciali vengono anteposti al testo di input prima della creazione dell'embedding. In particolare:
📘 Prompt associati a
input_type
- Per una query, il prompt è "Represent the query for retrieving supporting documents: ".
- Per un documento, il prompt è "Represent the document for retrieval: ".
- Esempio
- Quando
input_type="query", una query come "When is Apple's conference call scheduled?" diventerà "Represent the query for retrieving supporting documents: When is Apple's conference call scheduled?"- Quando
input_type="document", una query come "Apple's conference call to discuss fourth fiscal quarter results and business updates is scheduled for Thursday, November 2, 2023 at 2:00 p.m. PT / 5:00 p.m. ET." diventerà "Represent the document for retrieval: Apple's conference call to discuss fourth fiscal quarter results and business updates is scheduled for Thursday, November 2, 2023 at 2:00 p.m. PT / 5:00 p.m. ET."
voyage-large-2-instruct, come suggerisce il nome, è addestrato per rispondere a istruzioni aggiuntive anteposte al testo di input. Per classificazione, clustering o altre sotto-attività MTEB, usa le istruzioni di voyage-large-2-instruct.
La quantizzazione negli embedding converte valori ad alta precisione, come numeri in virgola mobile a precisione singola a 32 bit, in formati a precisione inferiore come interi a 8 bit o valori binari a 1 bit, riducendo spazio di archiviazione, memoria e costi rispettivamente di 4x e 32x. I modelli Voyage supportati abilitano la quantizzazione specificando il tipo di dato di output con il parametro output_dtype:
float: ogni embedding restituito è una lista di numeri in virgola mobile a precisione singola a 32 bit (4 byte). Questa è l'impostazione predefinita e fornisce la massima precisione / accuratezza di retrieval.int8euint8: ogni embedding restituito è una lista di interi a 8 bit (1 byte) compresi rispettivamente tra -128 e 127 e tra 0 e 255.binaryeubinary: ogni embedding restituito è una lista di interi a 8 bit che rappresentano valori di embedding a singolo bit quantizzati e impacchettati in bit:int8perbinaryeuint8perubinary. La lunghezza della lista di interi restituita è 1/8 della dimensione effettiva dell'embedding. Il tipo binary utilizza il metodo offset binary, di cui puoi saperne di più nelle FAQ sugli embedding.
Esempio di quantizzazione binaria
Considera i seguenti otto valori di embedding: -0.03955078, 0.006214142, -0.07446289, -0.039001465, 0.0046463013, 0.00030612946, -0.08496094 e 0.03994751. Con la quantizzazione binaria, i valori minori o uguali a zero verranno quantizzati a uno zero binario e i valori positivi a un uno binario, ottenendo la seguente sequenza binaria: 0, 1, 0, 0, 1, 1, 0, 1. Questi otto bit vengono quindi impacchettati in un singolo intero a 8 bit, 01001101 (con il bit più a sinistra come bit più significativo).
ubinary: la sequenza binaria viene convertita direttamente e rappresentata come intero senza segno (uint8) 77.binary: la sequenza binaria viene rappresentata come intero con segno (int8) -51, calcolato utilizzando il metodo offset binary (77 - 128 = -51).
L'apprendimento Matryoshka crea embedding con rappresentazioni da grossolane a fini all'interno di un singolo vettore. I modelli Voyage, come voyage-code-3, che supportano più dimensioni di output generano tali embedding Matryoshka. Puoi troncare questi vettori mantenendo il sottoinsieme iniziale delle dimensioni. Ad esempio, il seguente codice Python mostra come troncare vettori a 1024 dimensioni a 256 dimensioni:
import voyageai
import numpy as np
def embd_normalize(v: np.ndarray) -> np.ndarray:
"""
Normalize the rows of a 2D numpy array to unit vectors by dividing each row by its Euclidean
norm. Raises a ValueError if any row has a norm of zero to prevent division by zero.
"""
row_norms = np.linalg.norm(v, axis=1, keepdims=True)
if np.any(row_norms == 0):
raise ValueError("Cannot normalize rows with a norm of zero.")
return v / row_norms
vo = voyageai.Client()
# Genera vettori voyage-code-3, che per impostazione predefinita sono numeri in virgola mobile a 1024 dimensioni
embd = vo.embed(["Sample text 1", "Sample text 2"], model="voyage-code-3").embeddings
# Imposta una dimensione più corta
short_dim = 256
# Ridimensiona e normalizza i vettori alla dimensione più corta
resized_embd = embd_normalize(np.array(embd)[:, :short_dim]).tolist()Prezzi
Visita la pagina dei prezzi di Voyage per i dettagli più aggiornati sui prezzi.
Was this page helpful?