existir RAG o modelo multivetorial ColBERT é usado para modelar o documento, fornecendo um único vetor para cada um dos elementos do documento. token A geração de vetores independentes melhora a precisão da recuperação. No entanto, ela também traz um aumento drástico nos requisitos de armazenamento e suporta apenas o inglês, o que limita seu escopo de aplicação.
Para resolver esses problemas, aprimoramos a arquitetura e o processo de treinamento do ColBERT e, principalmente, fizemos avanços no processamento multilíngue. O Jina-ColBERT-v2 mais recente é compatível com 89 idiomas e apresenta uma opção de dimensão de saída personalizada, que reduz significativamente os requisitos de armazenamento e melhora a eficiência e a precisão da recuperação multilíngue.
Principais destaques da nova versão
-
aprimoramento do desempenhoO ColBERT-v2 original foi aprimorado em 6,51 TP3T no desempenho de pesquisa em inglês em comparação com o ColBERT-v2 original e em 5,41 TP3T em comparação com seu antecessor, o jina-colbert-v1-en. -
Suporte a vários idiomasA nova versão suporta até 89 idiomas, incluindo árabe, chinês, inglês, japonês, russo e outros idiomas, além de linguagens de programação. -
As dimensões de saída podem ser personalizadasA nova versão emprega o Matryoshka Representation Learning (MRL) com vetores de saída de 128, 96 e 64 dimensões, permitindo que o usuário escolha a dimensionalidade adequada de acordo com suas necessidades.
O relatório técnico completo pode ser encontrado no arXiv: https://arxiv.org/abs/2408.16672
Visão geral do desempenho do jina-colbert-v2
Em termos de desempenho de recuperação, o jina-colbert-v2 demonstra uma vantagem significativa sobre a versão anterior, tanto em termos de tarefas de recuperação em inglês quanto de suporte a vários idiomas. As vantagens desse modelo de vários vetores também podem ser totalmente utilizadas com o comprimento de entrada de 8192 tokens herdado do Jina AI. Abaixo está uma comparação com outras versões, onde os principais aprimoramentos podem ser vistos claramente:
jina-colbert-v2 |
jina-colbert-v1-en |
Original ColBERTv2 | |
---|---|---|---|
Média das tarefas BEIR em inglês | 0.521 | 0.494 | 0.489 |
Suporte a vários idiomas | 89 idiomas | Somente em inglês | Somente em inglês |
dimensão de saída | 128, 96 ou 64 | Fixo 128 | Fixo 128 |
Comprimento máximo da consulta | 32 tokens | 32 tokens | 32 tokens |
Comprimento máximo do documento | 8192 tokens | 8192 tokens | 512 tokens |
Número de parâmetros | 560 milhões | 137 milhões | 110 milhões |
Tamanho do modelo | 1,1 GB | 550 MB | 438 MB |
1. aprimoramento do desempenho
Na tarefa de recuperação em inglês, o jina-colbert-v2 supera a geração anterior do jina-colbert-v1-en e o ColBERT v2 original, aproximando-se do nível do modelo AnswerAI-ColBERT-small, que foi projetado especificamente para o inglês.
Nome do modelo | Pontuação média no teste de referência BEIR em inglês | Suporte a vários idiomas |
---|---|---|
jina-colbert-v2 |
0.521 | Suporte a vários idiomas |
jina-colbert-v1-en |
0.494 | Somente em inglês |
ColBERT v2.0 | 0.489 | Somente em inglês |
RespostaAI-ColBERT-small | 0.549 | Somente em inglês |

2. suporte multilíngue
O Jina-ColBERT-v2 é o único modelo ColBERT compatível com vários idiomas.O resultado é um vetor de incorporação muito compacto, que é significativamente melhor do que o tradicional. BM25 Métodos de recuperação (em todos os idiomas avaliados pelo MIRACL).
jina-colbert-v2
O corpus de treinamento abrange 89 idiomas e inclui 450 milhões de pares de frases, pares pergunta-resposta e pares consulta-documento semanticamente relacionados e com supervisão fraca. Metade deles está em inglês, e a parte restante inclui 29 idiomas diferentes que não são ingleses, além de 3,0% de dados de linguagem de programação e 4,3% de dados entre idiomas.
Também nos especializamos em Árabe, chinês, francês, alemão, japonês, russo, espanhol e outros idiomas comuns responder cantando linguagem de programação Foi realizado um treinamento adicional, que permitiu que o modelo tivesse um bom desempenho no tratamento de tarefas entre idiomas, introduzindo um corpus de texto bilíngue alinhado.

A figura a seguir mostra os resultados da comparação de desempenho entre o Jina-ColBERT-v2 e o BM25 em 16 idiomas no benchmark MIRACL.
3. aprendizado da representação da boneca russa aninhada
Aprendizado de representação Matryoshka (MRL) é um método de treinamento flexível e eficiente que minimiza a perda de precisão e, ao mesmo tempo, oferece suporte a diferentes dimensões do vetor de saída. Ele é implementado com a introdução de várias camadas lineares na camada oculta do modelo, cada uma processando uma dimensão diferente. Para obter mais detalhes sobre essa técnica, consulte: https://arxiv.org/abs/2205.13147
Por padrão, oO Jina-ColBERT-v2 gera Embedding de 128 dimensões, mas você pode escolher vetores mais curtos, como 96 ou 64 dimensões.. Mesmo que o vetor seja encurtado em 25% ou 50%, seu impacto no desempenho é quase insignificante (a queda é menor que 1,5%). Em outras palavras, não importa o tamanho dos vetores, o modelo mantém um desempenho eficiente e preciso.
A tabela abaixo mostra o desempenho do Jina-ColBERT-v2 nos dez principais resultados (nDGC@10) desses seis benchmarks BEIR. É possível observar que oA diferença de desempenho entre as dimensões 128 e 96 é menor que 11 TP3T, enquanto a diferença entre as dimensões 128 e 64 é menor que 1,51 TP3T.
dimensão de saída | Pontuação média (nDGC@10 para 6 benchmarks) |
---|---|
128 | 0.565 |
96 | 0.558 |
64 | 0.556 |
A figura a seguir mostra o desempenho do Jina-ColBERT-v2 em diferentes dimensões de saída.
A escolha de vetores de saída menores não apenas economiza espaço de armazenamento, mas também melhora a velocidade de computação, especialmente em cenários em que os vetores precisam ser comparados ou as distâncias precisam ser calculadas, como nos sistemas de recuperação de vetores.
De acordo com o Cloud Cost Estimator da Qdrant, o custo de armazenamento de 100 milhões de documentos no AWS usando vetores de 128 dimensões é de US$ 1.319,24 por mês, enquanto que com vetores de 64 dimensões, o custo pode ser reduzido pela metade, para US$ 659,62 por mês. Isso não é apenas um aumento de velocidade, mas também uma redução significativa de custos.
Como começar a usar o Jina ColBERT v2
O Jina ColBERT v2 já está disponível nas plataformas Jina Search Foundation API, AWS Marketplace e Azure. Ele também está disponível sob a licença CC BY-NC-4.0 no site Cara de abraço No código aberto para uso não comercial.
-
AWS Marketplace: https://aws.amazon.com/marketplace/seller-profile?id=seller-stch2ludm6vgy -
Azure: https://azuremarketplace.microsoft.com/en-gb/marketplace/apps?search=Jina -
Hugging Face: https://huggingface.co/jinaai/jina-colbert-v2
via API da Jina Search Foundation
para incorporação
Usar a API de incorporação da Jina para obter a incorporação do jina-colbert-v2 é a maneira mais fácil e direta.
Dois parâmetros principais:
dimensions
Dimensão de saída da incorporação: Indica a dimensão de saída da incorporação; o padrão é 128, mas você também pode escolher 64.
input_type
determina o tipo de entrada.query
é limitado a 32 tokens, que serão automaticamente truncados, e o document
A codificação do documento pode ser processada off-line, de modo que somente a parte da consulta precisa ser codificada no momento da consulta, o que pode aumentar significativamente a velocidade de processamento.
A chave de API da Jina está disponível em jina.ai/embeddings.
curl https://api.jina.ai/v1/multi-vector \\
-H "Content-Type: application/json" \\
-H "Authorization: Bearer <YOUR JINA API KEY>" \\
-d '{
"model": "jina-colbert-v2",
"dimensions": 128, # 或 64
"input_type": "document", # 这里需要注意input_type 是 document 还是 query
"embedding_type": "float",
"input": [
"在此输入你的文档文本",
"你可以发送多个文本",
"每个文本最长可达 8192 个标记"
]}'
Para o Reranker
Para usar a API do Jina Reranker por meio do jina-colbert-v2
Para fazer isso, passe uma consulta e vários documentos e retorne uma pontuação de correspondência classificável no Rerank, construa a seguinte solicitação:
curl https://api.jina.ai/v1/rerank \\
-H "Content-Type: application/json" \\
-H "Authorization: Bearer <YOUR JINA API KEY>" \\
-d '{
"model": "jina-colbert-v2",
"query": "柏林的人口是多少?",
"top_n": 3,
"documents": [
"2023年柏林的人口比去年增长了0.7%。因此,到去年年底,柏林的居民人数比2022年增加了约27300人。30岁到40岁的人群是数量最多的年龄组。柏林拥有约88.1万外国居民,来自约170个国家,平均年龄为42.5岁。",
"柏林山是南极洲玛丽·伯德地的一个冰川覆盖的火山,距离阿蒙森海约100公里(62英里)。它是一个宽约20公里(12英里)的山峰,有寄生火山口,由两座合并的火山组成:柏林火山,其火山口宽2公里(1.2英里),以及距离柏林火山约3.5公里(2.2英里)的Merrem峰,火山口宽2.5×1公里(1.55英里×0.62英里)。",
"截至2023年12月31日,各联邦州按国籍和州统计的人口数据",
"柏林的都市区人口超过450万,是德国人口最多的都市区。柏林-勃兰登堡首都地区约有620万人口,是德国第二大都市区,仅次于莱茵-鲁尔区,并且是欧盟第六大都市区(按GDP计算)。",
"欧文·柏林(原名以色列·贝林)是一位美国作曲家和词曲作者。他的音乐是《伟大的美国歌本》的一部分。柏林获得了许多荣誉,包括奥斯卡奖、格莱美奖和托尼奖。",
"柏林是美国康涅狄格州首都规划区的一个城镇。2020年人口普查时人口为20,175。",
"柏林是德国的首都和最大城市,无论是面积还是人口。其超过385万居民使其成为欧盟人口最多的城市(按城市限界内人口计算)。",
"《柏林,柏林》是一部为ARD制作的电视剧,于2002年至2005年在德国第一电视台的晚间节目中播出。导演包括弗朗茨斯卡·迈耶·普莱斯、克里斯托夫·施内、斯文·温特瓦尔特和蒂图斯·塞尔格。"
]
}'
Observe também. top_n
que especifica o número de documentos a serem retornados na pesquisa. Se você precisar apenas das correspondências ideais, poderá definir o parâmetro top_n
Defina como 1.
Para obter mais exemplos de código em Python ou em outras linguagens, acesse a página https://jina.ai/embeddings ou selecione no menu suspenso em https://jina.ai/reranker/ jina-colbert-v2
.
Via Stanford ColBERT
Se você tiver usado a biblioteca Stanford ColBERT, agora poderá substituí-la perfeitamente pela versão Jina ColBERT v2. Basta especificar o jinaai/jina-colbert-v2
como uma fonte de modelo.
from colbert.infra import ColBERTConfig
from colbert.modeling.checkpoint import Checkpoint
ckpt = Checkpoint("jinaai/jina-colbert-v2", colbert_config=ColBERTConfig())
docs = ["你的文本列表"]
query_vectors = ckpt.queryFromText(docs)
Via RAGatouille
O Jina ColBERT v2 também está integrado ao sistema RAGatouille, por meio do RAGPretrainedModel.from_pretrained()
O método é fácil de baixar e usar.
from ragatouille import RAGPretrainedModel
RAG = RAGPretrainedModel.from_pretrained("jinaai/jina-colbert-v2")
docs = ["你的文本列表"]
RAG.index(docs, index_name="your_index_name")
query = "你的查询"
results = RAG.search(query)
via Qdrant
A partir da versão 1.10, o Qdrant oferece suporte a multivetores e ao modelo de interação tardia, que você pode usar diretamente com o jina-colbert-v2. Independentemente de estar implantando o Qdrant localmente ou hospedado na nuvem, você pode inserir documentos em uma coleção de multivetores simplesmente configurando corretamente o parâmetro multivector_config no cliente.
Criação de uma nova coleção usando a operação MAX_SIM
from qdrant_client import QdrantClient, models
qdrant_client = QdrantClient(
url="<YOUR_ENDPOINT>",
api_key="<YOUR_API_KEY>",
)
qdrant_client.create_collection(
collection_name="{collection_name}",
vectors_config={
"colbert": models.VectorParams(
size=128,
distance=models.Distance.COSINE,
multivector_config=models.MultiVectorConfig(
comparator=models.MultiVectorComparator.MAX_SIM
),
)
}
)
⚠️ Configuração correta multivector_config
Os parâmetros são a chave para usar o modelo ColBERT no Qdrant.
Inserção de um documento em um conjunto multivetorial
import requests
from qdrant_client import QdrantClient, models
url = 'https://api.jina.ai/v1/multi-vector'
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer <YOUR BEARER>'
}
data = {
'model': 'jina-colbert-v2',
'input_type': 'query',
'embedding_type': 'float',
'input': [
'在此输入你的文本',
'你可以发送多个文本',
'每个文本最长可达 8192 个标记'
]
}
response = requests.post(url, headers=headers, json=data)
rows = response.json()["data"]
qdrant_client = QdrantClient(
url="<YOUR_ENDPOINT>",
api_key="<YOUR API_KEY>",
)
for i, row in enumerate(rows):
qdrant_client.upsert(
collection_name="{collection_name}",
points=[
models.PointStruct(
id=i,
vector=row["embeddings"],
payload={"text": data["input"][i]}
)
],
)
Conjunto de consultas (computação)
from qdrant_client import QdrantClient, models
import requests
url = 'https://api.jina.ai/v1/multi-vector'
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer <YOUR BEARER>'
}
data = {
'model': 'jina-colbert-v2',
"input_type": "query",
"embedding_type": "float",
"input": [
"Jina AI 的Embedding模型支持多少个标记的输入?"
]
}
response = requests.post(url, headers=headers, json=data)
vector = response.json()["data"][0]["embeddings"]
qdrant_client = QdrantClient(
url="<YOUR_ENDPOINT>",
api_key="<YOUR API_KEY>",
)
results = qdrant_client.query_points(
collection_name="{collection_name}",
query=vector,
)
print(results)
resumos
Com base em seu antecessor, o jina-colbert-v2 abrange 89 idiomas globais e uma ampla seleção de dimensões de saída de incorporação, permitindo que os usuários equilibrem com flexibilidade as necessidades de precisão e eficiência e economizem custos de computação e tempo. Clique em https://jina.ai para experimentá-lo agora e obter 1 milhão de tokens gratuitos.