Panoramica degli embeddings

Gli embeddings testuali sono rappresentazioni numeriche di stringhe di testo, rappresentate come un vettore di numeri a virgola mobile. Puoi usare la distanza tra due pezzi di testo incorporati (siano essi parole, frasi o frasi) per misurare quanto questi pezzi di testo siano correlati tra loro. Una misura popolare è la similarità del coseno, ma puoi anche misurare la similarità tramite altre funzioni di distanza come la distanza euclidea o i prodotti scalari (vedi FAQ di seguito). In generale, distanze minori predicono una maggiore correlazione in termini di relazione semantica o sintattica tra i testi.

Confrontare la similarità delle stringhe o raggruppare le stringhe in base alla loro distanza l’una dall’altra consente una vasta gamma di applicazioni, tra cui ricerca (popolare nelle architetture RAG), raccomandazioni e rilevamento delle anomalie.


Come ottenere gli embeddings con Anthropic

Quando si seleziona un fornitore di embeddings, ci sono diversi fattori che puoi considerare a seconda delle tue esigenze e preferenze:

  • Dimensione del dataset e specificità del dominio: dimensione del dataset di addestramento del modello e sua rilevanza per il dominio che si desidera incorporare. Dati più grandi o più specifici del dominio generalmente producono embeddings di dominio migliori
  • Architettura del modello: Design e complessità del modello. Tecniche e architetture più moderne come i Transformers tendono ad apprendere e produrre embeddings di qualità superiore
  • Prestazioni di inferenza: Velocità di ricerca degli embeddings e latenza end-to-end. Questa è una considerazione particolarmente importante per le implementazioni di produzione su larga scala
  • Personalizzazione: Opzioni per la formazione continua su dati privati o la specializzazione di modelli per domini molto specifici. Ciò può migliorare le prestazioni su vocabolari unici

Anthropic non offre il proprio modello di embedding. Un fornitore di embeddings che ha un’ampia varietà di opzioni e capacità che comprendono tutte e quattro le considerazioni di cui sopra è Voyage AI. Voyage AI realizza modelli di embedding allo stato dell’arte e offre modelli personalizzati per domini industriali specifici come finanza e sanità, o modelli su misura per singoli clienti.

Il resto di questa guida è per Voyage AI, ma ti incoraggiamo a valutare una varietà di fornitori di embeddings per trovare la soluzione migliore per il tuo caso d’uso specifico.


Iniziare con Voyage AI

Dai un’occhiata al nostro notebook sugli embeddings per vedere un esempio di implementazione di Voyage AI.

Per accedere agli embeddings di Voyage:

  1. Registrati sul sito web di Voyage AI
  2. Ottieni una chiave API
  3. Imposta la chiave API come variabile d’ambiente per comodità:
Python
export VOYAGE_API_KEY="<your secret key>"

Puoi eseguire gli embeddings utilizzando il pacchetto Python ufficiale voyageai o le richieste HTTP, come descritto di seguito.

Pacchetto Python di Voyage

Il pacchetto voyageai può essere installato utilizzando il seguente comando:

Python
pip install -U voyageai

Quindi, puoi creare un oggetto client e iniziare a usarlo per incorporare i tuoi testi:

Python
import voyageai

vo = voyageai.Client()
# Questo utilizzerà automaticamente la variabile d'ambiente VOYAGE_API_KEY.
# In alternativa, puoi usare vo = voyageai.Client(api_key="<your secret key>")

texts = ["Testo di esempio 1", "Testo di esempio 2"]

result = vo.embed(texts, model="voyage-2", input_type="document")
print(result.embeddings[0])
print(result.embeddings[1])

result.embeddings sarà una lista di due vettori di embedding, ognuno contenente 1024 numeri a virgola mobile.

Dopo aver eseguito il codice sopra, i due embeddings verranno stampati sullo schermo:

Python
[0.02012746, 0.01957859, ...]  # embedding per "Testo di esempio 1"
[0.01429677, 0.03077182, ...]  # embedding per "Testo di esempio 2"

Quando crei gli embeddings, puoi specificare alcuni altri argomenti per la funzione embed(). Ecco la specifica:

voyageai.Client.embed(texts : List[str], model : str, input_type : Optional[str] = None, truncation : Optional[bool] = None)

  • texts (List[str]) - Una lista di testi come lista di stringhe, come ["Mi piacciono i gatti", "Mi piacciono anche i cani"]. Attualmente, la lunghezza massima della lista è 128 e il numero totale di token nella lista è al massimo 320K per voyage-2 e 120K per voyage-large-2/voyage-code-2.
  • model (str) - Nome del modello. Opzioni consigliate: voyage-2, voyage-large-2, voyage-code-2.
  • input_type (str, opzionale, predefinito a None) - Tipo del testo di input. Predefinito a None. Altre opzioni: query, document
    • Quando input_type è impostato su None, il testo di input verrà codificato direttamente dal modello di embedding di Voyage. In alternativa, quando gli input sono documenti o query, gli utenti possono specificare input_type come query o document, rispettivamente. In tali casi, Voyage anteporrà un prompt speciale al testo di input e invierà gli input estesi al modello di embedding
    • Per i casi d’uso di recupero/ricerca, consigliamo di specificare questo argomento durante la codifica di query o documenti per migliorare la qualità del recupero. Gli embeddings generati con e senza l’argomento input_type sono compatibili
  • truncation (bool, opzionale, predefinito a None) - Se troncare i testi di input per adattarli alla lunghezza del contesto.
    • Se True, i testi di input troppo lunghi verranno troncati per adattarsi alla lunghezza del contesto, prima di essere vettorizzati dal modello di embedding
    • Se False, verrà generato un errore se un testo dato supera la lunghezza del contesto
    • Se non specificato (predefinito a None), Voyage troncherà il testo di input prima di inviarlo al modello di embedding se supera leggermente la lunghezza della finestra di contesto. Se supera significativamente la lunghezza della finestra di contesto, verrà generato un errore

API HTTP di Voyage

Puoi anche ottenere gli embeddings richiedendo l’API HTTP di Voyage. Ad esempio, puoi inviare una richiesta HTTP tramite il comando curl in un terminale:

Shell
curl https://api.voyageai.com/v1/embeddings \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $VOYAGE_API_KEY" \
  -d '{
    "input": ["Testo di esempio 1", "Testo di esempio 2"],
    "model": "voyage-2"
  }'

La risposta che otterresti è un oggetto JSON contenente gli embeddings e l’utilizzo dei token:

Shell
{
  "object": "list",
  "data": [
    {
      "embedding": [0.02012746, 0.01957859, ...],
      "index": 0
    },
    {
      "embedding": [0.01429677, 0.03077182, ...],
      "index": 1
    }
  ],
  "model": "voyage-2",
  "usage": {
    "total_tokens": 10
  }
}

L’endpoint di embedding di Voyage AI è https://api.voyageai.com/v1/embeddings (POST). L’intestazione della richiesta deve contenere la chiave API. Il corpo della richiesta è un oggetto JSON contenente i seguenti argomenti:

  • input (str, List[str]) - Una singola stringa di testo o una lista di testi come lista di stringhe. Attualmente, la lunghezza massima della lista è 128 e il numero totale di token nella lista è al massimo 320K per voyage-2 e 120K per voyage-large-2/voyage-code-2.
  • model (str) - Nome del modello. Opzioni consigliate: voyage-2, voyage-large-2, voyage-code-2.
  • input_type (str, opzionale, predefinito a None) - Tipo del testo di input. Predefinito a None. Altre opzioni: query, document
  • truncation (bool, opzionale, predefinito a None) - Se troncare i testi di input per adattarsi alla lunghezza del contesto
    • Se True, i testi di input troppo lunghi verranno troncati per adattarsi alla lunghezza del contesto prima di essere vettorizzati dal modello di embedding
    • Se False, verrà generato un errore se un testo dato supera la lunghezza del contesto
    • Se non specificato (predefinito a None), Voyage troncherà il testo di input prima di inviarlo al modello di embedding se supera leggermente la lunghezza della finestra di contesto. Se supera significativamente la lunghezza della finestra di contesto, verrà generato un errore
  • encoding_format (str, opzionale, predefinito a None) - Formato in cui gli embeddings sono codificati. Voyage attualmente supporta due opzioni:
    • Se non specificato (predefinito a None): gli embeddings sono rappresentati come liste di numeri a virgola mobile
    • "base64": gli embeddings sono compressi in codifiche Base64

Esempio di embedding di Voyage

Ora che sappiamo come ottenere gli embeddings con Voyage, vediamolo in azione con un breve esempio.

Supponiamo di avere un piccolo corpus di sei documenti da recuperare

Python
documents = [
    "La dieta mediterranea enfatizza pesce, olio d'oliva e verdure, ritenuti in grado di ridurre le malattie croniche.",
    "La fotosintesi nelle piante converte l'energia luminosa in glucosio e produce ossigeno essenziale.",
    "Le innovazioni del XX secolo, dalle radio agli smartphone, si sono concentrate sui progressi elettronici.",
    "I fiumi forniscono acqua, irrigazione e habitat per le specie acquatiche, vitali per gli ecosistemi.",
    "La conference call di Apple per discutere i risultati del quarto trimestre fiscale e gli aggiornamenti aziendali è prevista per giovedì 2 novembre 2023 alle 14:00 PT / 17:00 ET.",
    "Le opere di Shakespeare, come 'Amleto' e 'Sogno di una notte di mezza estate', resistono nella letteratura."
]

Useremo prima Voyage per convertire ciascuno di essi in un vettore di embedding

Python
import voyageai

vo = voyageai.Client()

# Incorpora i documenti
doc_embds = vo.embed(
    documents, model="voyage-2", input_type="document"
).embeddings

Gli embeddings ci permetteranno di fare ricerche/recuperi semantici nello spazio vettoriale. Possiamo quindi convertire una query di esempio,

Python
query = "Quando è prevista la conference call di Apple?"

in un embedding, e poi condurre una ricerca del vicino più prossimo per trovare il documento più rilevante in base alla distanza nello spazio di embedding.

Python
import numpy as np

# Incorpora la query
query_embd = vo.embed(
    [query], model="voyage-2", input_type="query"
).embeddings[0]

# Calcola la similarità
# Gli embeddings di Voyage sono normalizzati a lunghezza 1, quindi il prodotto scalare
# e la similarità del coseno sono la stessa cosa.
similarities = np.dot(doc_embds, query_embd)

retrieved_id = np.argmax(similarities)
print(documents[retrieved_id])

Nota che usiamo input_type="document" e input_type="query" per incorporare rispettivamente il documento e la query. Maggiori specifiche possono essere trovate qui.

L’output sarebbe il 5° documento, che è infatti il più rilevante per la query:

La conference call di Apple per discutere i risultati del quarto trimestre fiscale e gli aggiornamenti aziendali è prevista per giovedì 2 novembre 2023 alle 14:00 PT / 17:00 ET.

Modelli Voyage disponibili

Voyage consiglia di utilizzare i seguenti modelli di embedding:

ModelloLunghezza contestoDimensione embeddingDescrizione
voyage-large-2160001536Il modello di embedding generalista più potente di Voyage AI.
voyage-code-2160001536Ottimizzato per il recupero del codice (17% migliore delle alternative) e anche SoTA su corpora di uso generale. Vedi questo post sul blog di Voyage per i dettagli.
voyage-240001024Modello di embedding generalista di base ottimizzato sia per la latenza che per la qualità.
voyage-lite-02-instruct40001024Istruito per attività di classificazione, clustering e similarità testuale delle frasi, che sono gli unici casi d’uso consigliati per questo modello.

voyage-2 e voyage-large-2 sono modelli di embedding generalisti, che raggiungono prestazioni allo stato dell’arte in tutti i domini e mantengono un’elevata efficienza. voyage-code-2 è ottimizzato per il campo del codice, offrendo una lunghezza del contesto 4 volte superiore per un utilizzo più flessibile, sebbene con una latenza relativamente più elevata.

Voyage sta sviluppando attivamente modelli più avanzati e special izzati e offre anche servizi di fine-tuning per personalizzare modelli su misura per singoli clienti. Invia un’e-mail al tuo account manager Anthropic o contatta il supporto Anthropic per ulteriori informazioni sui modelli su misura.

  • voyage-finance-2: prossimamente
  • voyage-law-2: prossimamente
  • voyage-multilingual-2: prossimamente
  • voyage-healthcare-2: prossimamente

Voyage su AWS Marketplace

Gli embeddings di Voyage sono disponibili anche su AWS Marketplace. Ecco le istruzioni per accedere a Voyage su AWS:

  1. Iscriviti al pacchetto del modello
    1. Vai alla pagina di elenco del pacchetto del modello e seleziona il modello da distribuire
    2. Fai clic sul pulsante Continue to subscribe
    3. Esamina attentamente i dettagli nella pagina Subscribe to this software. Se accetti il contratto di licenza per l’utente finale (EULA) standard, i prezzi e i termini di supporto, fai clic su “Accept Offer”
    4. Dopo aver selezionato Continue to configuration e scelto una regione, ti verrà presentato un Product Arn. Questo è l’ARN del pacchetto del modello richiesto per creare un modello distribuibile utilizzando Boto3
      1. Copia l’ARN corrispondente alla regione selezionata e utilizzalo nella cella successiva
  2. Distribuisci il pacchetto del modello

Da qui, crea uno spazio JupyterLab in Sagemaker Studio, carica il notebook di Voyage e segui le istruzioni all’interno.


Domande frequenti

Come calcolo la distanza tra due vettori di embedding?

La similarità del coseno è una scelta popolare, ma la maggior parte delle funzioni di distanza andrà bene. Gli embeddings di Voyage sono normalizzati a lunghezza 1, quindi la similarità del coseno è essenzialmente la stessa del prodotto scalare tra due vettori. Ecco un frammento di codice che puoi utilizzare per calcolare la similarità del coseno tra due vettori di embedding.

Python
import numpy

similarity = np.dot(embd1, embd2)
# Gli embeddings di Voyage sono normalizzati a lunghezza 1, quindi la similarità del coseno
# è la stessa del prodotto scalare.

Se vuoi trovare i K vettori di embedding più vicini su un grande corpus, ti consigliamo di utilizzare le funzionalità integrate nella maggior parte dei database vettoriali.

Posso contare il numero di token in una stringa prima di incorporarla?

Sì! Puoi farlo con il seguente codice.

Python
import voyageai

vo = voyageai.Client()
total_tokens = vo.count_tokens(["Testo di esempio"])

Prezzi

Visita la pagina dei prezzi di Voyage per i dettagli più aggiornati sui prezzi.