Jina AI
Os modelos de incorporação da Jina AI são modelos de incorporação de texto de alto desempenho que podem traduzir entradas textuais em representações numéricas, capturando a semântica do texto. Estes modelos destacam-se em aplicações como a recuperação densa, a similaridade textual semântica e a compreensão multilingue.
O Milvus integra-se com os modelos de incorporação do Jina AI através da classe JinaEmbeddingFunction
. Esta classe fornece métodos para codificar documentos e consultas utilizando os modelos de incorporação da Jina AI e devolvendo as incorporações como vectores densos compatíveis com a indexação Milvus. Para utilizar esta funcionalidade, obtenha uma chave API da Jina AI.
Para utilizar esta funcionalidade, instale as dependências necessárias:
pip install --upgrade pymilvus
pip install "pymilvus[model]"
De seguida, instanciar o 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
)
Parâmetros:
model_name
(string)O nome do modelo de incorporação do Jina AI a utilizar para a codificação. Pode especificar qualquer um dos nomes de modelos de incorporação Jina AI disponíveis, por exemplo,
jina-embeddings-v3
,jina-embeddings-v2-base-en
, etc. Se deixar este parâmetro não especificado, será utilizadojina-embeddings-v3
. Para obter uma lista dos modelos disponíveis, consulte Jina Embeddings.api_key
(string)A chave API para aceder à API Jina AI.
task
(string)O tipo de entrada passado para o modelo. Necessário para modelos de incorporação v3 e superiores.
"retrieval.passage"
: Usado para codificar documentos grandes em tarefas de recuperação no momento da indexação."retrieval.query"
: Utilizado para codificar consultas ou perguntas do utilizador em tarefas de recuperação."classification"
: Utilizado para codificar texto para tarefas de classificação de texto."text-matching"
: Usado para codificar texto para correspondência de similaridade, como medir a similaridade entre duas frases."clustering"
: Utilizado para tarefas de agrupamento ou de reordenamento.
dimensions
(int)O número de dimensões que os embeddings de saída resultantes devem ter. A predefinição é 1024. Apenas suportado para modelos de incorporação v3 e superiores.
late_chunking
(bool)Este parâmetro controla se deve ser usado o novo método de fragmentação (chunking) que o Jina AI introduziu no mês passado para codificar um lote de frases. A predefinição é
False
. Quando definido paraTrue
, a API do Jina AI concatena todas as frases no campo de entrada e apresenta-as como uma única cadeia de caracteres ao modelo. Internamente, o modelo incorpora esta longa cadeia concatenada e, em seguida, efectua uma fragmentação tardia, devolvendo uma lista de incorporações que corresponde ao tamanho da lista de entrada.
Para criar incrustações para documentos, utilize o método encode_documents()
. Este método foi concebido para a incorporação de documentos em tarefas de recuperação assimétricas, como a indexação de documentos para tarefas de pesquisa ou recomendação. Este método utiliza retrieval.passage
como tarefa.
```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)
O resultado esperado é semelhante ao seguinte:
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,)
Para criar incrustações para consultas, utilize o método encode_queries()
. Este método foi concebido para a incorporação de consultas em tarefas de recuperação assimétricas, tais como consultas de pesquisa ou perguntas. Este método utiliza retrieval.query
como tarefa.
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)
O resultado esperado é semelhante ao seguinte:
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,)
Para criar incrustações de entradas para correspondência de similaridade (como tarefas de recuperação STS ou simétricas), classificação de texto, agrupamento ou tarefas de classificação, use o valor de parâmetro task
apropriado ao instanciar a 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)