Modelli di incorporamento del testo
I modelli di incorporamento del testo vengono principalmente utilizzati per calcolare la rappresentazione vettoriale del testo. Qui, il termine "vettore" si riferisce a un vettore matematico, conosciuto anche come vettore delle caratteristiche. Come sviluppatore, tutto ciò di cui hai bisogno è sapere che un modello di incorporamento del testo può calcolare il vettore delle caratteristiche di un pezzo di testo e, quindi, utilizzando calcoli di similarità vettoriale, può identificare contenuti testuali con caratteristiche simili.
Suggerimento: Per conoscenze di base sui modelli di incorporamento del testo, si prega di fare riferimento al Tutorial introduttivo sui modelli di incorporamento del testo
Differenza tra Ricerca vettoriale e Ricerca basata su parole chiave
- La ricerca vettoriale si basa sulla similarità semantica dei vettori delle parole. Può trovare risultati semanticamente correlati alla query, anche se le parole della query e le parole nei risultati non corrispondono esattamente. La ricerca vettoriale mappa le parole in uno spazio vettoriale ad alta dimensione e calcola la similarità tra i vettori. Ciò significa che anche se le stesse parole non corrispondono, purché siano semanticamente simili, è possibile trovare risultati correlati.
- La ricerca basata su parole chiave, d'altra parte, è un semplice processo di corrispondenza di stringhe. Restituisce solo i risultati che contengono parole di query che corrispondono esattamente. Se un documento utilizza parole diverse, anche se sono semanticamente simili, non verranno abbinati.
La classe Embeddings è un tipo di classe specificamente progettata per interagire con i modelli di incorporamento del testo. Ci sono molti fornitori di modelli di incorporamento (come OpenAI, Cohere, Hugging Face, ecc.), e il design di questa classe è quello di fornire un'interfaccia standard per tutti i fornitori.
La classe Embeddings crea la rappresentazione vettoriale del testo. Con la ricerca vettoriale, possono essere eseguite ricerche semantiche, ad esempio la ricerca dei frammenti di testo più simili nello spazio vettoriale.
La classe Embeddings di base in LangChain espone due metodi: uno per incorporare documenti e un altro per incorporare query. Il primo prende più testi in input, mentre il secondo prende un singolo testo in input. Il motivo per cui vengono trattati come due metodi diversi è che alcuni fornitori di incorporamento hanno metodi di incorporamento differenti per i documenti da cercare e le query (le query di ricerca stesse).
Inizio Veloce
Di seguito è riportato un esempio che utilizza il modello di incorporamento di OpenAI:
Configurazione
Innanzitutto, è necessario installare il pacchetto Python di OpenAI. Poiché LangChain ha molte diverse implementazioni di modelli di incorporamento del testo, gli sviluppatori devono installare le dipendenze dei diversi modelli in base alle proprie scelte:
pip install langchain-openai
Configurare la chiave OpenAI attraverso le variabili di ambiente:
export OPENAI_API_KEY="..."
Se non si desidera impostare le variabili di ambiente, è possibile passare direttamente il parametro chiamato openai_api_key
durante l'inizializzazione della classe OpenAI LLM per passare la chiave:
from langchain_openai import OpenAIEmbeddings
embeddings_model = OpenAIEmbeddings(openai_api_key="...")
Altrimenti, è possibile inizializzare senza parametri:
from langchain_openai import OpenAIEmbeddings
embeddings_model = OpenAIEmbeddings()
embed_documents
Calcolare le caratteristiche vettoriali di un lotto di testi:
embeddings = embeddings_model.embed_documents(
[
"Ciao!",
"Oh, ciao!",
"Come ti chiami?",
"I miei amici mi chiamano Mondo",
"Ciao Mondo!"
]
)
len(embeddings), len(embeddings[0])
(5, 1536)
embed_query
Questa funzione calcola le caratteristiche vettoriali di un testo di query. Tipicamente, coinvolge la conversione della domanda da cercare in un vettore di caratteristiche e quindi utilizza questo vettore per cercare testi simili nel database vettoriale.
query_incorporata = embeddings_model.embed_query("Qual era il nome menzionato nella conversazione?")
query_incorporata[:5]
[0.0053587136790156364,
-0.0004999046213924885,
0.038883671164512634,
-0.003001077566295862,
-0.00900818221271038]