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-pt 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-pt 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:

dimensõesDimensã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.

tipo_de_entradadetermina o tipo de entrada.consulta é limitado a 32 tokens, que serão automaticamente truncados, e o documento 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 " \\\\\
     -d '{
     "model": "jina-colbert-v2", "dimensions": 128, 1.0, 1.0
     "dimensions" (dimensões): 128, # ou 64
     "input_type": "document", # Observe se o input_type é documento ou consulta.
     "embedding_type": "float", "input": [ "float", #
     "input": [
         "Digite o texto do seu documento aqui.", "input_type": "float", "input": [
         "Você pode enviar mais de um texto.", "text_type": "float", "input": [ "Insira o texto do seu documento aqui.
         "Cada texto pode ter até 8192 tokens de comprimento."
    ]}'

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 " \\\\\
     -d '{
      "modelo": "jina-colbert-v2",
      "query": "What is the population of Berlin?" (Qual é a população de Berlim?) ,
      "top_n": 3,
      "documents": [
        "A população de Berlim em 2023 aumentou em 0,71 TP3T em comparação com o ano passado.Assim, no final do ano passado, Berlim tinha cerca de 27.300 habitantes a mais do que em 2022.A faixa etária com o maior número de habitantes é a de 30 a 40 anos. Berlim tem cerca de 881.000 residentes estrangeiros de cerca de 170 países, com uma idade média de 42,5 anos." ,
        "O Monte Berlim é um vulcão coberto por geleiras na Terra de Marie Byrd, Antártica, a cerca de 100 quilômetros (62 milhas) do Mar de Amundsen. É um pico de cerca de 20 quilômetros (12 milhas) de largura com crateras parasitas e consiste em dois vulcões fundidos: o Vulcão Berlin, cuja cratera tem 2 quilômetros (1,2 milhas) de largura, e o Pico Merrem, que fica a cerca de 3,5 quilômetros (2,2 milhas) de distância, com uma cratera de 2,5 x 1 quilômetro (1,55 milhas x 0,62 milhas) de largura." ,
        "Dados populacionais por nacionalidade e cantão para os estados federais em 31 de dezembro de 2023",
        "Com uma população de mais de 4,5 milhões, a área metropolitana de Berlim é a área metropolitana mais populosa da Alemanha. Com uma população de aproximadamente 6,2 milhões, a área metropolitana de Berlim-Brandemburgo é a segunda maior área metropolitana da Alemanha, depois da região do Reno-Ruhr, e a sexta maior área metropolitana da União Europeia (por PIB)." ,
        "Irving Berlin (anteriormente conhecido como Israel Behring) foi um compositor e escritor de canções estadunidense. Sua música faz parte do The Great American Songbook. Berlin recebeu muitas honrarias, incluindo um Oscar, um Grammy e um Tony Award." ,
        "Berlin é uma cidade no Distrito de Planejamento da Capital do estado americano de Connecticut, com uma população de 20.175 habitantes no censo de 2020.", .
        "Berlim é a capital e a maior cidade da Alemanha, tanto em tamanho quanto em população. Seus mais de 3,85 milhões de habitantes fazem dela a cidade mais populosa da União Europeia (por população dentro dos limites da cidade)." ,
        "Berlin, Berlin" foi uma série de TV produzida para a ARD e transmitida no programa noturno da TV alemã 1 de 2002 a 2005. Os diretores incluem Franziska Meyer-Price, Christoph Schnee, Sven Winterwalt e Titus Selger."
        ]
    }'

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.modelling.checkpoint import Checkpoint

ckpt = Checkpoint("jinaai/jina-colbert-v2", colbert_config=ColBERTConfig())
docs = ["sua lista de texto"]
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 = ["lista de seus textos"]
RAG.index(docs, index_name="your_index_name")
query = "sua consulta"
resultados = 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(
    
    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

importar solicitações
from qdrant_client import QdrantClient, models

url = 'https://api.jina.ai/v1/multi-vector'

headers = {
    
    'Authorization': 'Bearer '
}

data = {
    
    
    
    'input': [
        'Insira seu texto aqui', 'input_type'.
        
        'Cada texto pode ter até 8192 tokens'
    ]
}

response = requests.post(url, headers=headers, json=data)
linhas = response.json()["data"]

qdrant_client = QdrantClient(
    url="",
    api_key="",
)

para i, linha em 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
importar requests

url = 'https://api.jina.ai/v1/multi-vector'

headers = {
    'Content-Type': 'application/json', 'Authorisation': 'Bearer '
    'Authorization': 'Bearer '
}

dados = {
    'model': 'jina-colbert-v2', 'input_type'.
    'input_type': 'query', 'embedding_type': 'float', 'query', 'query'
    "embedding_type": "float",
    "input": [
        "Quantas entradas rotuladas o modelo de incorporação da Jina AI suporta?"
    ]
}

response = requests.post(url, headers=headers, json=data)
vetor = response.json()["data"][0]["embeddings"]

qdrant_client = QdrantClient(
    url="",
    api_key="",
)

resultados = qdrant_client.query_points(
    nome_da_coleção="{nome_da_coleção}",
    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

Chefe do Círculo de Compartilhamento de IA

O Chief AI Sharing Circle se concentra no aprendizado de IA, fornecendo conteúdo abrangente de aprendizado de IA, ferramentas de IA e orientação prática. Nosso objetivo é ajudar os usuários a dominar a tecnologia de IA e explorar juntos o potencial ilimitado da IA por meio de conteúdo de alta qualidade e compartilhamento de experiências práticas. Seja você um iniciante em IA ou um especialista sênior, este é o lugar ideal para adquirir conhecimento, aprimorar suas habilidades e realizar inovações.

Entre em contato conosco
pt_BRPortuguês do Brasil