Aprendizagem pessoal com IA
e orientação prática
讯飞绘镜

O primeiro ColBERT multilíngue do mundo: Jina ColBERT V2 e sua tecnologia de "boneca russa

-1

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

  1. 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.
  2. 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.
  3. 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
-1Desempenho do Jina ColBERT v2 no conjunto de dados BEIR 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.

-1Distribuição de idiomas do conjunto de dados de pré-treinamento

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.

-1

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.

-1A 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:

dimensionsDimensã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_typedetermina 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-v2Para 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.

Não pode ser reproduzido sem permissão:Chefe do Círculo de Compartilhamento de IA " O primeiro ColBERT multilíngue do mundo: Jina ColBERT V2 e sua tecnologia de "boneca russa
pt_BRPortuguês do Brasil