Jina AI
Jina AI 的嵌入模型是高性能的文字嵌入模型,可以將文字輸入轉換為數字表示,捕捉文字的語義。這些模型在密集檢索、語義文字相似性和多語言理解等應用中表現優異。
Milvus 透過JinaEmbeddingFunction
類與 Jina AI 的嵌入模型整合。這個類別提供了使用 Jina AI 嵌入模型編碼文件和查詢的方法,並將嵌入作為與 Milvus 索引相容的密集向量傳回。若要使用此功能,請向Jina AI 取得 API 金鑰。
若要使用此功能,請安裝必要的相依性:
pip install --upgrade pymilvus
pip install "pymilvus[model]"
然後,實體化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
)
參數:
model_name
(字串)用於編碼的 Jina AI 嵌入模型名稱。您可以指定任何可用的 Jina AI 嵌入模型名稱,例如
jina-embeddings-v3
,jina-embeddings-v2-base-en
等。如果不指定此参数,将使用jina-embeddings-v3
。如需可用模型的清單,請參閱Jina Embeddings。api_key
(字串)存取 Jina AI API 的 API 金鑰。
task
(字串)傳送到模型的輸入類型。嵌入模型 v3 及更高版本必須使用。
"retrieval.passage"
:用於在索引時對檢索任務中的大型文件進行編碼。"retrieval.query"
:用於在檢索任務中編碼使用者查詢或問題。"classification"
:用於對文字分類任務中的文字進行編碼。"text-matching"
:用於編碼相似性匹配的文字,例如測量兩個句子之間的相似性。"clustering"
:用於聚類或重排任務。
dimensions
(int)輸出嵌入結果的維數。預設為 1024。僅支援嵌入模型 v3 及更高版本。
late_chunking
(bool)此參數控制是否使用Jina AI 上月推出的新分塊方法來編碼一批句子。預設為
False
。當設定為True
時,Jina AI API 會將輸入欄位中的所有句子串連起來,並以單一字串的方式送入模型。在內部,模型會嵌入這個長串連的字串,然後執行後期的分塊,並傳回一個與輸入清單大小相符的嵌入清單。
若要為文件建立嵌入式資料,請使用encode_documents()
方法。此方法專為非對稱檢索任務中的文件嵌入而設計,例如為搜尋或推薦任務建立文件索引。此方法使用retrieval.passage
作為任務。
```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)
預期的輸出類似如下:
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,)
若要建立查詢嵌入,請使用encode_queries()
方法。此方法專為非對稱檢索任務(如搜尋查詢或問題)中的查詢嵌入而設計。此方法使用retrieval.query
作為任務。
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)
預期的輸出類似如下:
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,)
若要為相似性比對(例如 STS 或對稱檢索任務)、文字分類、聚類或重排任務建立輸入的內嵌,請在實體化JinaEmbeddingFunction
類別時使用適當的task
參數值。
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)