Jina AI
I modelli di incorporazione di Jina AI sono modelli di incorporazione del testo ad alte prestazioni in grado di tradurre gli input testuali in rappresentazioni numeriche, catturando la semantica del testo. Questi modelli eccellono in applicazioni come il reperimento di informazioni dense, la similarità semantica del testo e la comprensione multilingue.
Milvus si integra con i modelli di incorporazione di Jina AI attraverso la classe JinaEmbeddingFunction
. Questa classe fornisce metodi per codificare documenti e query utilizzando i modelli di incorporamento di Jina AI e restituendo gli incorporamenti come vettori densi compatibili con l'indicizzazione di Milvus. Per utilizzare questa funzionalità, è necessario ottenere una chiave API da Jina AI.
Per utilizzare questa funzione, installare le dipendenze necessarie:
pip install --upgrade pymilvus
pip install "pymilvus[model]"
Quindi, istanziare il sito JinaEmbeddingFunction
:
from pymilvus.model.dense import JinaEmbeddingFunction
jina_ef = JinaEmbeddingFunction(
model_name="jina-embeddings-v3", # Defaults to `jina-embeddings-v3`
api_key=JINAAI_API_KEY, # Provide your Jina AI API key
task="retrieval.passage", # Specify the task
dimensions=1024, # Defaults to 1024
)
Parametri:
model_name
(stringa)Il nome del modello di incorporazione di Jina AI da utilizzare per la codifica. È possibile specificare uno qualsiasi dei nomi dei modelli di incorporamento Jina AI disponibili, ad esempio
jina-embeddings-v3
,jina-embeddings-v2-base-en
, ecc. Se si lascia questo parametro non specificato, verrà utilizzatojina-embeddings-v3
. Per un elenco dei modelli disponibili, consultare Jina Embeddings.api_key
(stringa)La chiave API per accedere all'API Jina AI.
task
(stringa)Il tipo di input passato al modello. Richiesto per i modelli di embedding v3 e successivi.
"retrieval.passage"
: Utilizzato per codificare documenti di grandi dimensioni nelle attività di recupero al momento dell'indicizzazione."retrieval.query"
: Utilizzato per codificare le query o le domande dell'utente nei compiti di recupero."classification"
: Utilizzato per codificare il testo per compiti di classificazione del testo."text-matching"
: Utilizzato per codificare il testo per la corrispondenza di somiglianza, ad esempio per misurare la somiglianza tra due frasi."clustering"
: Utilizzato per compiti di clustering o reranking.
dimensions
(int)Il numero di dimensioni che deve avere l'embedding di output risultante. Il valore predefinito è 1024. Supportato solo per i modelli di embedding v3 e successivi.
late_chunking
(bool)Questo parametro controlla se utilizzare il nuovo metodo di chunking introdotto da Jina AI il mese scorso per la codifica di un gruppo di frasi. L'impostazione predefinita è
False
. Quando è impostato suTrue
, Jina AI API concatena tutte le frasi nel campo di input e le trasmette al modello come un'unica stringa. Internamente, il modello incorpora questa lunga stringa concatenata e poi esegue un chunking tardivo, restituendo un elenco di embeddings che corrisponde alla dimensione dell'elenco di input.
Per creare incorporazioni per i documenti, utilizzare il metodo encode_documents()
. Questo metodo è stato progettato per le incorporazioni di documenti in compiti di recupero asimmetrici, come l'indicizzazione di documenti per compiti di ricerca o di raccomandazione. Questo metodo utilizza retrieval.passage
come task.
```python
docs = [
"Artificial intelligence was founded as an academic discipline in 1956.",
"Alan Turing was the first person to conduct substantial research in AI.",
"Born in Maida Vale, London, Turing was raised in southern England.",
]
docs_embeddings = jina_ef.encode_documents(docs)
# Print embeddings
print("Embeddings:", docs_embeddings)
# Print dimension and shape of embeddings
print("Dim:", jina_ef.dim, docs_embeddings[0].shape)
Il risultato atteso è simile al seguente:
Embeddings: [array([9.80641991e-02, -8.51697400e-02, 7.36531913e-02, 1.42558888e-02,
-2.23589484e-02, 1.68494112e-03, -3.50753777e-02, -3.11530549e-02,
-3.26012149e-02, 5.04568312e-03, 3.69836427e-02, 3.48948985e-02,
8.19722563e-03, 5.88679723e-02, -6.71099266e-03, -1.82369724e-02,
...
2.48654783e-02, 3.43279652e-02, -1.66154150e-02, -9.90478322e-03,
-2.96043139e-03, -8.57473817e-03, -7.39028037e-04, 6.25024503e-03,
-1.08831357e-02, -4.00776342e-02, 3.25369164e-02, -1.42691191e-03])]
Dim: 1024 (1024,)
Per creare incorporazioni per le query, utilizzare il metodo encode_queries()
. Questo metodo è stato progettato per le incorporazioni di query in compiti di reperimento asimmetrici, come le query di ricerca o le domande. Questo metodo utilizza retrieval.query
come task.
queries = ["When was artificial intelligence founded",
"Where was Alan Turing born?"]
query_embeddings = jina_ef.encode_queries(queries)
print("Embeddings:", query_embeddings)
print("Dim", jina_ef.dim, query_embeddings[0].shape)
Il risultato atteso è simile al seguente:
Embeddings: [array([8.79201014e-03, 1.47551354e-02, 4.02722731e-02, -2.52991207e-02,
1.12719582e-02, 3.75947170e-02, 3.97946090e-02, -7.36681819e-02,
-2.17952449e-02, -1.16298944e-02, -6.83426252e-03, -5.12507409e-02,
5.26071340e-02, 6.75181448e-02, 3.92445624e-02, -1.40817231e-02,
...
8.81703943e-03, 4.24629413e-02, -2.32944116e-02, -2.05193572e-02,
-3.22035812e-02, 2.81896023e-03, 3.85326855e-02, 3.64372656e-02,
-1.65050142e-02, -4.26847413e-02, 2.02664156e-02, -1.72684863e-02])]
Dim 1024 (1024,)
Per creare incorporazioni di input per la corrispondenza di similarità (come i compiti STS o di reperimento simmetrico), la classificazione del testo, il clustering o il reranking, utilizzare il valore appropriato del parametro task
quando si istanzia la classe JinaEmbeddingFunction
.
from pymilvus.model.dense import JinaEmbeddingFunction
jina_ef = JinaEmbeddingFunction(
model_name="jina-embeddings-v3", # Defaults to `jina-embeddings-v3`
api_key=JINA_API_KEY, # Provide your Jina AI API key
task="text-matching",
dimensions=1024, # Defaults to 1024
)
texts = [
"Follow the white rabbit.", # English
"Sigue al conejo blanco.", # Spanish
"Suis le lapin blanc.", # French
"跟着白兔走。", # Chinese
"اتبع الأرنب الأبيض.", # Arabic
"Folge dem weißen Kaninchen.", # German
]
embeddings = jina_ef(texts)
# Compute similarities
print(embeddings[0] @ embeddings[1].T)