Jina Embeddings v3 Nosso mais recente modelo de vetor de texto de nível superior com 570 milhões de parâmetros atinge o melhor SOTA da categoria em tarefas de recuperação de textos longos e multilíngues.
A v3 não é apenas mais avançada, mas também tem muitos recursos novos e interessantes. Se você ainda estiver usando o Jina Embeddings v2, que foi lançado em outubro de 2023, recomendamos enfaticamente que migre para a v3 o mais rápido possível.
Vamos começar com uma breve visão geral dos destaques do Jina Embeddings v3:
- Suporte para 89 idiomas Processamento de texto em vários idiomas: superando a limitação de que a v2 só pode lidar com alguns idiomas bilíngues, realizando um verdadeiro processamento de texto em vários idiomas.
- Adaptador Lora embutidoA v2 é um modelo de incorporação genérico, enquanto a v3 tem um adaptador Lora integrado que gera vetores otimizados especificamente para suas tarefas de recuperação, classificação, agrupamento e outras tarefas, para um melhor desempenho.
- A pesquisa de texto longo é mais precisa :: utilização da v3 do 8192 token A técnica Late Chunking, que gera vetores de blocos com informações contextuais mais ricas, pode melhorar significativamente a precisão da recuperação de textos longos.
- As dimensões do vetor são flexíveis e controláveis As dimensões vetoriais da : v3 podem ser ajustadas de forma flexível para obter um equilíbrio entre desempenho e espaço de armazenamento, evitando as altas despesas gerais de armazenamento associadas a vetores de alta dimensão. Isso é possível graças ao aprendizado de representação Matryoshka (MRL).
Link para o modelo de código aberto: https://huggingface.co/jinaai/jina-embeddings-v3
Link da API do modelo: https://jina.ai/?sui=apikey
Link para o documento modelo: https://arxiv.org/abs/2409.10173
Guia rápido de migração
- A v3 é um modelo completamente novo, portanto, os vetores e índices da v2 não podem ser reutilizados diretamente, e você precisa reindexar os dados novamente.
- Na maioria dos cenários (96%), a v3 supera significativamente a v2, enquanto a v2 apenas ocasionalmente empata ou até mesmo supera ligeiramente a v3 na tarefa de resumo em inglês. Entretanto, devido ao suporte a vários idiomas e aos recursos avançados da v3, a v3 deve ser preferida na maioria dos cenários.
- A API v3 agora inclui
task
edimensions
responder cantandolate_chunking
Três parâmetros, cujo uso exato pode ser encontrado em nossa postagem no blog.
Ajuste dimensional
- A v3 produz um vetor de 1024 dimensões por padrão, enquanto a v2 tem apenas 768 dimensões. Com o aprendizado da representação Matryoshka, a v3 agora pode, teoricamente, gerar qualquer dimensão. Os desenvolvedores podem definir o
dimensions
Os parâmetros controlam com flexibilidade a dimensionalidade dos vetores de saída para encontrar o melhor equilíbrio entre o custo de armazenamento e o desempenho - Se o seu projeto anterior foi desenvolvido com base na API v2, altere o nome do modelo diretamente para
jina-embeddings-v3
não é possível porque as dimensões padrão foram alteradas. Se quiser manter a estrutura de dados ou o tamanho consistente com a v2, você pode definir o parâmetrodimensions=768
Mesmo que as dimensões sejam as mesmas. Mesmo que as dimensões sejam as mesmas, os vetores de v3 e v2 têm distribuições completamente diferentes no espaço semântico e, portanto, não podem ser usados diretamente de forma intercambiável.
Substituição de modelo
- O forte suporte multilíngue da v3 substituiu totalmente o modelo bilíngue da v2 (v2-base-de, v2-base-es, v2-base-zh).
- Para tarefas de codificação pura, o jina-embeddings-v2-based-code ainda é a melhor opção. Os testes mostram que a pontuação chega a 0,7753, em comparação com 0,7537 para vetores genéricos v3 (sem conjunto de tarefas) e 0,7564 para o adaptador LoRA, o que dá à codificação v2 uma vantagem de desempenho de cerca de 2,81 TP3T em relação à v3.
Parâmetros da missão
- A API v3 gera vetores genéricos de boa qualidade quando o parâmetro de tarefa não é especificado, mas é altamente recomendável definir o parâmetro de tarefa de acordo com o tipo de tarefa específico para obter uma melhor representação do vetor.
- Para fazer com que a v3 emule o comportamento da v2, use a opção
task="text-matching"
Recomendamos experimentar diferentes opções de tarefas para encontrar a melhor solução, mas não para substituir otext-matching
Como um programa universal. - Se o seu projeto usa a v2 para recuperação de informações, é recomendável mudar para a v3 para o tipo de tarefa de recuperação (
retrieval.passage
responder cantandoretrieval.query
), é possível obter melhores resultados de recuperação.
Outras considerações
- Para tipos de tarefas totalmente novos (que são raros), tente definir o parâmetro da tarefa como None como ponto de partida.
- Se você usou a técnica de reescrita de rótulo na v2 para tarefas de classificação de amostra zero, na v3 você pode simplesmente definir o parâmetro
task="classification"
Resultados semelhantes são obtidos porque a v3 otimizou a representação vetorial para a tarefa de classificação. - Tanto a v2 quanto a v3 suportam comprimentos de contexto de até 8192 tokens, mas a v3 é mais eficiente, graças à tecnologia FlashAttention2, e estabelece as bases para o recurso de pontuação tardia da v3.
Chunking tardio
- A v3 introduz uma função de divisão tardia, que usa 8192 tokens para formar um contexto longo e, em seguida, divide-o em vetores, de modo que cada pequena parte contenha informações contextuais, o que torna a recuperação naturalmente mais precisa.
late_chunking
No momento, ele só está disponível na API, portanto, se você estiver executando modelos localmente, não poderá usar esse recurso por algum tempo.- começar a usar
late_chunking
O tamanho do texto de cada solicitação não pode exceder 8192 tokens, porque a v3 só pode processar uma quantidade limitada de conteúdo de uma vez.
Desempenho e velocidade
- Em termos de velocidade, embora a v3 tenha três vezes mais parâmetros do que a v2, a inferência é mais rápida do que a v2 ou, no mínimo, igual, principalmente devido à tecnologia FlashAttention2.
- Nem todas as GPUs são compatíveis com o FlashAttention2. A v3 ainda será executada se você estiver usando uma GPU que não seja compatível, mas poderá ser um pouco mais lenta do que a v2.
- Ao usar a API, fatores como latência da rede, limitações de taxa e zonas de disponibilidade também afetam a latência, de modo que a latência da API não reflete totalmente o desempenho real do modelo v3.
Ao contrário da v2, a Jina Embeddings v3 está licenciada sob a CC BY-NC 4.0. A v3 pode ser usada comercialmente por meio de nossa API, AWS ou Azure. O uso para pesquisa e não comercial não é problema. Para implantação comercial local, entre em contato com nossa equipe de vendas para obter uma licença:
https://jina.ai/contact-sales
Suporte a vários idiomas
A v3 é atualmente o modelo vetorial multilíngue líder do setor** e está classificada em segundo lugar nos gráficos M****TEB para modelos com menos de 1 bilhão de parâmetros. **É compatível com 89 idiomas, abrangendo a maioria dos principais idiomas do mundo.
Entre eles estão chinês, inglês, japonês, coreano, alemão, espanhol, francês, árabe, bengali, dinamarquês, holandês, finlandês, georgiano, grego, hindi, indonésio, italiano, letão, norueguês, polonês, português, romeno, russo, eslovaco, sueco, tailandês, turco, ucraniano, urdu e vietnamita. Turco, ucraniano, urdu e vietnamita.
Se você estava usando anteriormente os modelos inglês, inglês/alemão, inglês/espanhol ou inglês/chinês da v2, agora só precisa modificar o model
e selecione os parâmetros apropriados task
você pode mudar facilmente para a v3.
# v2 英语-德语
data = {
"model": "jina-embeddings-v2-base-de",
"input": [
"The Force will be with you. Always.",
"Die Macht wird mit dir sein. Immer.",
"The ability to destroy a planet is insignificant next to the power of the Force.",
"Die Fähigkeit, einen Planeten zu zerstören, ist nichts im Vergleich zur Macht der Macht."
]
}
# v3 多语言
data = {
"model": "jina-embeddings-v3",
"task": "retrieval.passage",
"input": [
"The Force will be with you. Always.",
"Die Macht wird mit dir sein. Immer.",
"力量与你同在。永远。",
"La Forza sarà con te. Sempre.",
"フォースと共にあらんことを。いつも。"
]
}
response = requests.post(url, headers=headers, json=data)
Representação vetorial específica da tarefa
A v2 usa uma representação vetorial genérica, ou seja, todas as tarefas compartilham o mesmo modelo. A v3 fornece representações vetoriais especialmente otimizadas para diferentes tarefas (por exemplo, recuperação, classificação, agrupamento etc.) para melhorar o desempenho em cenários específicos.
Selecione diferentes task
o que equivale a informar ao modelo quais recursos relevantes para essa tarefa devem ser extraídos, gerando uma representação vetorial mais adaptada aos requisitos da tarefa.
A seguir, um exemplo da Base de Conhecimento de Reparo do Sabre de Luz, demonstrando como migrar o código da v2 para a v3 e experimentar os ganhos de desempenho das representações vetoriais específicas da tarefa:
# 实际项目中我们会使用更大的数据集,这个只是示例
knowledge_base = [
"为什么我的光剑刀锋在闪烁?刀锋闪烁可能表示电池电量不足或不稳定的水晶。请为电池充电并检查水晶的稳定性。如果闪烁持续,可能需要重新校准或更换水晶。",
"为什么我的刀锋比以前暗淡?刀锋变暗可能意味着电池电量低或电源分配有问题。首先,请为电池充电。如果问题仍然存在,可能需要更换LED。",
"我可以更换我的光剑刀锋颜色吗?许多光剑允许通过更换水晶或使用剑柄上的控制面板更改颜色设置来自定义刀锋颜色。请参阅您的型号手册以获得详细说明。",
"如果我的光剑过热,我该怎么办?过热可能是由于长时间使用导致的。关闭光剑并让其冷却至少10分钟。如果频繁过热,可能表明内部问题,需由技术人员检查。",
"如何为我的光剑充电?通过剑柄附近的端口,将光剑连接到提供的充电线,确保使用官方充电器以避免损坏电池和电子设备。",
"为什么我的光剑发出奇怪的声音?奇怪的声音可能表示音响板或扬声器有问题。尝试关闭光剑并重新开启。如果问题仍然存在,请联系我们的支持团队以更换音响板。"
]
query = "光剑太暗了"
Para a v2, há apenas uma tarefa (correspondência de texto), portanto, precisamos apenas de um bloco de código de exemplo:
# v2 代码:使用文本匹配任务对知识库和查询进行编码
data = {
"model": "jina-embeddings-v2-base-en",
"normalized": True, # 注意:v3 中不再需要此参数
"input": knowledge_base
}
docs_response = requests.post(url, headers=headers, json=data)
data = {
"model": "jina-embeddings-v2-base-en",
"task": "text-matching",
"input": [query]
}
query_response = requests.post(url, headers=headers, json=data)
A v3 fornece representações vetoriais otimizadas para tarefas específicas, incluindo recuperação, separação, classificação e correspondência de texto.
Representação vetorial da tarefa de pesquisa
Usamos uma base de conhecimento simples de reparo de sabre de luz como exemplo para demonstrar a diferença entre a v2 e a v3 ao lidar com tarefas de recuperação de texto.
Para tarefas de recuperação semântica, a v3 introduz a codificação assimétrica usando, respectivamente, o retrieval.passage
responder cantando retrieval.query
Codificação de documentos e consultas para melhorar o desempenho e a precisão da recuperação.
Codificação de documentos: retrieval.passage
data = {
"model": "jina-embeddings-v3",
"task": "retrieval.passage", # "task" 参数是 v3 中的新功能
"late_chunking": True,
"input": knowledge_base
}
response = requests.post(url, headers=headers, json=data)
Código de consulta: retrieval.query
data = {
"model": "jina-embeddings-v3",
"task": "retrieval.query",
"late_chunking": True,
"input": [query]
}
response = requests.post(url, headers=headers, json=data)
Observação: O código acima ativa olate_chunking
que pode aprimorar a codificação de textos longos. Apresentaremos essa função em detalhes mais adiante.
Vamos comparar o desempenho de v2 e v3 para a consulta "lightsabers are too dark" (sabres de luz são muito escuros). v2 retorna um conjunto de correspondências menos relevantes com base na similaridade de cosseno, conforme mostrado abaixo:
Em contrapartida, a v3 entende melhor a intenção da consulta e retorna resultados mais precisos relacionados à "aparência da lâmina do sabre de luz", conforme mostrado abaixo.
A v3 não faz apenas a recuperação, mas também fornece várias outras representações vetoriais específicas de tarefas:
Representação vetorial de tarefas de separação
v3 separation
As tarefas são otimizadas para tarefas de separação, como agrupamento, reclassificação etc., por exemplo, separar diferentes tipos de entidades, o que é útil para organizar e visualizar grandes corpora.
Exemplo: Distinguir os personagens de Guerra nas Estrelas e da Disney
data = {
"model": "jina-embeddings-v3",
"task": "separation", # 使用 separation 任务
"late_chunking": True,
"input": [
"Darth Vader",
"Luke Skywalker",
"Mickey Mouse",
"Donald Duck"
]
}
response = requests.post(url, headers=headers, json=data)
Representação vetorial de tarefas de classificação
v3 classification
A tarefa é otimizada para tarefas de categorização de texto, como análise de sentimento e classificação de documentos, por exemplo, classificação de texto em comentários positivos e negativos.
Exemplo: analisar as tendências emocionais das resenhas do filme Guerra nas Estrelas
data = {
"model": "jina-embeddings-v3",
"task": "classification",
"late_chunking": True,
"input": [
"《星球大战》是一部划时代的杰作,彻底改变了电影业,并永远重新定义了科幻电影!",
"《星球大战》拥有令人惊叹的视觉效果、令人难忘的角色和传奇的叙事,是一部无与伦比的文化现象。",
"《星球大战》是一场过度炒作的灾难,充满了浅薄的角色,毫无有意义的情节!",
}
response = requests.post(url, headers=headers, json=data)
Representação vetorial da correspondência de texto
v3 text-matching
Concentre-se em tarefas de similaridade semântica, como similaridade de frases ou redução de ênfase, por exemplo, excluindo frases ou parágrafos repetidos.
Exemplo: Identificar a repetição nas falas de Guerra nas Estrelas
data = {
"model": "jina-embeddings-v3",
"task": "text-matching",
"late_chunking": True,
"input": [
"Luke, I am your father.",
"No, I am your father.",
"Fear leads to anger, anger leads to hate, hate leads to the dark side.",
"Fear leads to anger. Anger leads to hate. Hate leads to suffering."
]
}
response = requests.post(url, headers=headers, json=data)
Late Chunking: aprimorando a codificação de textos longos
A v3 apresenta o late_chunking
quando o parâmetro late_chunking=True
Quando o modelo processa o documento inteiro e o divide em vários blocos para gerar vetores de blocos que contêm informações contextuais completas; quando o late_chunking=False
Quando o modelo processa cada bloco de forma independente, os vetores de blocos gerados não contêm informações contextuais entre os blocos.
tomar nota de
- começar a usar
late_chunking=True
O número total de tokens por solicitação de API não pode exceder 8192, que é o comprimento máximo de contexto suportado pela v3. late_chunking=False
O número total de tokens não é limitado, mas está sujeito ao limite de taxa da API Embeddings.
Para o processamento de textos longos, ative o late_chunking
pode melhorar significativamente os resultados da codificação, pois preserva as informações contextuais entre os blocos e torna a representação vetorial gerada mais completa e precisa.
Usamos a transcrição de um bate-papo para avaliar late_chunking
Impacto na eficácia da recuperação de textos longos.
history = [
"Sita,你决定好周六生日晚餐要去哪儿了吗?",
"我不确定,对这里的餐厅不太熟悉。",
"我们可以上网看看推荐。",
"那听起来不错,我们就这么办吧!",
"你生日那天想吃什么类型的菜?",
"我特别喜欢墨西哥菜或者意大利菜。",
"这个地方怎么样,Bella Italia?看起来不错。",
"哦,我听说过那个地方!大家都说那儿很好!",
"那我们订张桌子吧?",
"好,我觉得这会是个完美的选择!我们打电话预定吧。"
]
Usando a v2 para a consulta "Quais são algumas boas recomendações de restaurantes?" os resultados obtidos não são particularmente relevantes.
Com a v3 e sem chunking tardio ativado, os resultados são igualmente insatisfatórios.
No entanto, ao usar a v3 e ativar o late chunking
Quando o resultado mais relevante (uma boa recomendação de restaurante) foi classificado exatamente em primeiro lugar.
Resultados da pesquisa:
Os resultados da pesquisa deixam claro que habilitar late_chunking
Depois disso, a v3 é capaz de identificar com mais precisão os bate-papos relevantes para a consulta, classificando os resultados mais relevantes primeiro.
Isso também mostra que late_chunking<span> </span>
A precisão da recuperação de textos longos pode ser melhorada de forma eficaz e eficiente, especialmente em cenários que exigem uma compreensão profunda da semântica contextual.
Uso de vetores aninhados russos para representar a eficiência e o desempenho do balanceamento
v3 Adotada dimensions
O parâmetro oferece suporte ao controle flexível da dimensão do vetor. É possível ajustar a dimensão do vetor de saída de acordo com a demanda real e encontrar um equilíbrio entre desempenho e espaço de armazenamento.
Dimensões vetoriais menores podem reduzir a sobrecarga de armazenamento dos bancos de dados vetoriais e melhorar a velocidade de recuperação, mas algumas informações podem ser perdidas, resultando em uma degradação do desempenho.
data = {
"model": "jina-embeddings-v3",
"task": "text-matching",
"dimensions": 768, # 设置向量维度为 768,默认值为 1024
"input": [
"The Force will be with you. Always.",
"力量与你同在。永远。",
"La Forza sarà con te. Sempre.",
"フォースと共にあらんことを。いつも。"
]
}
response = requests.post(url, headers=headers, json=data)
problemas comuns
P1: Quais são as vantagens de usar o Late Chunking se eu já tiver dividido o documento em pedaços antes da vetorização?
A1: A vantagem da divisão tardia em relação à pré-divisão é a capacidade de Processa o documento inteiro antes da fragmentação, retendo assim informações contextuais mais completas . A fragmentação tardia é importante para o processamento de documentos complexos ou longos, pois pode ajudar a fornecer uma resposta mais relevante durante a recuperação, já que o modelo tem uma compreensão holística do documento antes da fragmentação. Enquanto os blocos de pré-segmentação são processados independentemente dos blocos sem contexto completo.
P2: Por que a v2 tem uma pontuação de benchmark mais alta do que a v3 na tarefa de classificação por pares? Preciso me preocupar?
A2: as pontuações aparentemente mais altas da v2 na tarefa de classificação por pares devem-se principalmente ao fato de que as pontuações médias são calculadas de forma diferente. O conjunto de testes da v3 contém mais idiomas, portanto, suas pontuações médias provavelmente serão mais baixas do que as da v2.
Q3: A v3 tem melhor desempenho em idiomas específicos compatíveis com o modelo bilíngue v2?
A3: Comparação do desempenho dos modelos bilíngues v3 e v2 em idiomas específicos Depende do idioma específico e do tipo de tarefa O modelo bilíngue da v2 é altamente otimizado para idiomas específicos e, portanto, pode ter um desempenho melhor em algumas tarefas específicas. No entanto, a v3 foi projetada para oferecer suporte a uma gama mais ampla de cenários multilíngues, com uma generalização mais forte entre idiomas e otimizada para uma variedade de tarefas posteriores por meio de adaptadores LoRA específicos da tarefa. Como resultado, a v3 geralmente apresenta melhor desempenho geral em vários idiomas ou em cenários específicos de tarefas mais complexas, como recuperação semântica e categorização de texto.
Se você só precisa lidar com um idioma específico compatível com o modelo bilíngue v2 (chinês-inglês, inglês-alemão, espanhol-inglês) e sua tarefa é relativamente simples, a v2 ainda é uma boa opção e pode até ter um desempenho melhor em alguns casos.
No entanto, se você precisar lidar com vários idiomas ou se sua tarefa for mais complexa (por exemplo, se precisar executar a recuperação semântica ou a classificação de texto), a v3, com seus sólidos recursos de generalização entre idiomas e estratégias de otimização baseadas em tarefas downstream, será uma opção melhor.
Q4: Por que a v2 é melhor do que a v3 em tarefas resumidas e eu preciso me preocupar?
A4: a v2 tem um desempenho melhor na tarefa de sumarização, principalmente porque sua arquitetura de modelo é especificamente otimizada para tarefas como a similaridade semântica, que está intimamente relacionada à tarefa de sumarização. A v3 foi projetada com o objetivo de oferecer um suporte mais amplo à tarefa, especialmente em tarefas de recuperação e classificação e, portanto, não é tão bem otimizada quanto a v2 na tarefa de sumarização.
Entretanto, não devemos nos preocupar muito, pois a avaliação da tarefa de sumarização atualmente se baseia no SummEval, um teste que mede a similaridade semântica e não representa totalmente a capacidade geral do modelo na tarefa de sumarização. Como a v3 tem um bom desempenho em outras tarefas importantes, como a recuperação, pequenas diferenças de desempenho na tarefa de sumarização geralmente não têm um impacto significativo nos aplicativos do mundo real.
resumos
O Jina Embeddings v3 é uma grande atualização de modelo para o nosso SOTA, o melhor da categoria, para tarefas de recuperação de textos longos e multilíngues, e vem com uma variedade de adaptadores LoRA integrados que podem ser personalizados para diferentes cenários de recuperação, agrupamento, classificação e correspondência, dependendo de suas necessidades para obter resultados de vetorização mais precisos. Recomendamos enfaticamente que você migre para a v3 o mais rápido possível.
Essas são apenas algumas de nossas apresentações sobre o Jina Embeddings v3. Esperamos que sejam úteis. Se tiver alguma dúvida, fique à vontade para deixar um comentário para conversarmos!