Treinando embeddings de texto com Jina AI
Recentemente, ouvimos Bo Wang no Berlin Unstructured Data Meetup falar sobre o treinamento de embeddings de texto gerais de ponta. Embeddings de texto já impulsionam a moderna busca vetorial e sistemas de Geração Aumentada por Recuperação (RAG). Wang nos ajuda a entender as complexidades do desenvolvimento de embeddings de texto de ponta, com foco principal nos embeddings da Jina.
Assista à reprise da palestra de Bo Wang no Youtube
Por que você deveria se importar com os embeddings de texto da Jina?
O lançamento do Jina-Embeddings-V2 causou grande repercussão na comunidade de IA, acumulando mais de 3 milhões de downloads no Hugging Face. Este modelo foi integrado a numerosos frameworks de IA, como LangChain e LlamaIndex, e bancos de dados vetoriais como Milvus e Zilliz Cloud. O burburinho em torno dos embeddings da Jina chegou até ao topo do Hacker News, gerando amplos debates e discussões sobre codificadores de contexto longo. Os embeddings da Jina competem de perto com os embeddings da OpenAI, um dos melhores do setor.
Com isso em mente, vamos nos aprofundar na palestra de Wang sobre as complexidades do desenvolvimento dos embeddings de texto da Jina.
Evolução do ajuste fino para o treinamento de modelos de embedding em escala
A Jina AI não começou treinando seu próprio modelo de embedding. Em vez disso, começou ajustando modelos já existentes, como o BERT. Os modelos ajustados tiveram desempenho melhor do que os existentes. Vamos dar uma olhada nas estatísticas. O valor delta no final representa o quão bem o modelo ajustado se sai em comparação com o modelo pré-treinado original.
Comparação de desempenho entre modelos pré-treinados e ajustados
Como você pode ver, todos os modelos ajustados melhoraram significativamente, o que implica que o algoritmo funcionou bem. Mas o produto foi bem recebido pela indústria de tecnologia? A resposta simples é não.
Foi nesse momento que a indústria, até mesmo a indústria de busca, estava lentamente avançando em direção aos vetores e tinha acabado de começar a usar modelos de embedding pré-treinados. No entanto, ela não estava pronta para o ajuste fino de modelos de embedding. Modelos de embedding também não eram amplamente adotados em outros setores, pois não existiam LLMs ou sistemas RAG.
Assim, embora o ajuste fino tenha permitido que a Jina AI alcançasse melhorias incrementais, eles logo perceberam que a indústria não estava preparada para técnicas de ajuste fino. Essa percepção os levou a embarcar em um empreendimento ambicioso: treinar seu modelo de embedding do zero. Eles acreditavam que desenvolver uma solução própria lhes permitiria expandir os limites do que era possível.
Criando o Jina-Embeddings-V1
Criar o Jina-Embeddings-V1 envolveu seguir uma abordagem abrangente. Wang nos apresenta a abordagem usada:
Pesquisar modelos de ponta: O primeiro passo é estudar modelos de embedding de última geração, incluindo minilm, mpnet, sentence-t5, GTR e instructors de gigantes da tecnologia como Microsoft e Google. Essa abordagem ajuda a entender os pontos fortes e as limitações das soluções existentes e a identificar as áreas que precisam de melhoria.
Coletar um enorme conjunto de dados de treinamento: O próximo passo é montar um enorme conjunto de dados. A Jina AI usou 2 bilhões de registros de dados de treinamento em inglês. Esse corpus massivo é essencial para treinar um modelo de embedding de uso geral e alta qualidade, capaz de lidar com uma ampla gama de tarefas e domínios.
Limpeza e curadoria extensivas de dados: Para garantir a qualidade dos dados de treinamento, são realizados processos extensivos de limpeza e curadoria de dados, incluindo desduplicação, detecção de idioma e filtragem de qualidade. Após esse processo rigoroso, a Jina AI ficou com 400 milhões de registros de dados de pré-treinamento de alta qualidade e 5 milhões de linhas de dados de ajuste fino anotados por humanos.
Refatoração para treinamento distribuído: A Jina AI refatorou sua base de código do Finetuner para possibilitar o treinamento eficiente de modelos em larga escala e oferecer suporte ao treinamento distribuído em vários nós e GPUs. Essa infraestrutura escalável é crucial para treinar modelos em um conjunto de dados tão massivo.
O modelo foi um sucesso, mas não se destacou de todos os outros modelos do setor, pois tinha um comprimento de contexto limitado. Para resolver essa limitação, a Jina AI treinou o Jina-Embeddings-V2.
Apresentando o Jina-Embeddings-V2: Treinar Curto, Inferir Longo
Para superar a barreira de 512 tokens e atingir seu objetivo de lidar com sequências mais longas, a Jina AI apresenta o Jina-Embeddings-V2, um modelo de embeddings que pode lidar com sequências de até 8.192 tokens durante a inferência, enquanto é treinado em sequências mais curtas. Isso é alcançado por meio de várias modificações importantes. Wang passa rapidamente por essas modificações. Vamos nos aprofundar:
Removendo o Embedding de Posição
Modelos transformer tradicionais, incluindo o BERT, dependem de embeddings de posição para codificar a ordem dos tokens dentro de uma sequência. Esses embeddings de posição são vetores fixos que representam a posição de cada token em relação aos outros. No entanto, eles têm limitações:
- Comprimento de Contexto: Embeddings de posição restringem a janela de contexto a um tamanho fixo (por exemplo, 512 tokens no BERT). Documentos ou sequências mais longos excedem esse limite, levando à perda de informações. Veja como a perplexidade dispara para modelos BERT quando você excede 512 tokens, o que significa que há perda de informações. A perplexidade mede como o modelo consegue entender a semântica do texto. Quanto menor a perplexidade, melhor.
Comprimento da sequência de inferência vs perplexidade no BERT
- Restrições Posicionais: Tokens em posições distantes recebem embeddings semelhantes, ignorando seu contexto.
O Jina-Embeddings-V2 remove completamente os embeddings de posição, permitindo lidar com sequências mais longas sem restrições posicionais. O modelo captura o contexto em documentos extensos, tornando-o adequado para sumarização de documentos, análise jurídica e compreensão de conteúdo de formato longo.
Atenção com Vieses Lineares (ALiBi)
ALiBi é uma técnica desenvolvida para grandes modelos de linguagem. Em vez de depender de embeddings de posição fixos, o ALiBi captura informações de ordem das palavras dinamicamente durante os cálculos de atenção. Em seguida, ele se adapta ao contexto de cada token, permitindo considerar tanto os tokens anteriores quanto os posteriores sem restrições posicionais.
Efeito nos Embeddings: O ALiBi aprimora a compreensão do contexto, mesmo em textos longos. Ele permite que o Jina-Embeddings-V2 capture relações semânticas ricas entre tokens, independentemente de sua posição.
Adaptando o ALiBi para Transformers Bidirecionais
A compreensão bidirecional é crucial para tarefas como resposta a perguntas, sumarização e busca semântica. Veja como o Jina-Embeddings-V2 a alcança:
Conceito: O ALiBi foi originalmente projetado para modelos apenas de decodificador. A Jina AI o estende para arquiteturas bidirecionais como o BERT.
Contexto Bidirecional: O Jina-Embeddings-V2 considera tanto o contexto à esquerda quanto à direita, capturando dependências em toda a sequência.
Efeito nos Embeddings: O modelo se destaca em tarefas nas quais entender o contexto em ambas as direções é importante. Por exemplo, a busca semântica se beneficia de embeddings bidirecionais, pois exige analisar consultas de usuários e conteúdo de documentos simultaneamente.
Retreinando o BERT do Zero
A Jina AI retreinou o BERT com técnicas avançadas, resultando no JinaBERT, que serve como a espinha dorsal do Jina-Embeddings-V2:
Conceito: A Jina AI aplica vários truques, incluindo mascaramento de palavras inteiras, receita RoBERTa, ativações GeGLU e mascaramento agressivo.
Suporte a ALiBi: O JinaBERT é treinado em ALiBi, o que garante modelagem dinâmica de contexto.
Efeito nos Embeddings: O Jina-Embeddings-V2 se beneficia de uma espinha dorsal robusta capaz de lidar com diversas tarefas. Ele resume artigos longos, extrai informações essenciais e mantém a integridade do contexto.
A perplexidade retida do JinaBERT permanece baixa mesmo quando o limite de 512 tokens é excedido. Graças à remoção dos embeddings posicionais e à adaptação do AliBi. Dê uma olhada no novo gráfico comparando BERT e JinaBERT:
Comprimento da sequência de inferência vs perplexidade no JinaBERT e no BERT
Conectando Idiomas: Embeddings Bilíngues
Reconhecendo as limitações dos modelos de embedding multilíngues existentes, que muitas vezes dependem fortemente de dados de treinamento em inglês, a Jina AI começou a desenvolver embeddings bilíngues. Seu objetivo é criar modelos que possam lidar com múltiplos idiomas e relações translinguísticas entre eles.
A abordagem da Jina AI para embeddings bilíngues foge da norma. A maioria dos modelos multilíngues, como Multilingual BERT e Multilingual E5, sofre de uma distorção significativa na distribuição de seus dados de treinamento. Por exemplo, o popular modelo Multilingual E5 tem 91,5% de seus dados de treinamento em inglês, com apenas 4,2% em chinês e 4,3% em outros idiomas combinados.
Multilingual E5 vs Jina Embedding v2 em dados multilíngues pré-treinados
Em contraste, o modelo Jina-Embeddings-V2-Based-German da Jina AI apresenta uma distribuição equilibrada de dados de treinamento: 50% em inglês e 50% em alemão. Esses dados translinguísticos são especificamente projetados para melhorar a compreensão do modelo sobre as semelhanças e relações entre os dois idiomas.
Apesar de ser menor que os modelos multilíngues, o Jina-Embeddings-V2-Based-German supera consistentemente seus concorrentes, alcançando pontuações mais altas em tarefas de busca de alemão para alemão, alemão para inglês e inglês para alemão.
Comparação de desempenho de busca entre diferentes modelos de embedding
Os resultados mostram a superioridade dos embeddings bilíngues da Jina AI sobre modelos multilíngues populares como Multilingual E5 e Cohere Embed V3, tanto em tarefas de busca monolíngues quanto translinguísticas.
O que considerar ao criar aplicações RAG com Jina-Embeddings-V2
Ao desenvolver aplicações de Geração Aumentada por Recuperação (RAG) usando Jina-Embeddings-V2, é essencial entender como o modelo lida com documentos de comprimentos variados e com o posicionamento de informações relevantes nesses documentos. Bo Wang destacou várias considerações importantes:
Documentos curtos: Se seus documentos sempre tiverem menos de 512 tokens, o Jina-Embeddings-V2 terá desempenho comparável ao de outros codificadores médios, como E5 ou BGE.
Documentos longos (informações no início): Se seus documentos tiverem mais de 512 tokens, mas as informações relevantes estiverem no início, o Jina-Embeddings-V2 pode ter um desempenho pior.
Documentos longos (informações posteriores): Se seus documentos tiverem mais de 512 tokens, e as informações relevantes estiverem no meio ou no final, o Jina-Embeddings-V2 aumenta significativamente o desempenho de busca.
Integração da Jina AI com o banco de dados vetorial Milvus
Tanto os bancos de dados vetoriais quanto os modelos de embedding são indispensáveis para criar sistemas eficientes de recuperação de informações e aplicações RAG. Esses componentes geralmente são integrados para realizar tarefas de busca e recuperação por similaridade vetorial.
Milvus é um banco de dados vetorial de código aberto projetado para armazenar e recuperar de forma eficiente embeddings vetoriais em escala de bilhões. Recentemente, os embeddings da Jina foram integrados à biblioteca de modelos PyMilvus, agilizando o desenvolvimento de aplicações RAG ou outras aplicações de GenAI ao eliminar a necessidade de componentes adicionais de embedding.
A recente introdução do Milvus Lite, uma versão leve do Milvus, simplificou ainda mais esse processo. O Milvus Lite compartilha a mesma API que a versão completa do Milvus implantada no Docker ou Kubernetes, mas pode ser facilmente instalado por meio de um comando pip de uma linha, sem configurar um servidor. Ele é ideal para prototipagem e pode fazer uma transição perfeita para várias implantações do Milvus conforme seus requisitos aumentam.
Para saber mais sobre essa integração, consulte os seguintes recursos:
Documentação do Milvus: Integrar o Milvus com Jina Embeddings
Blog: Implementando um RAG de histórico de chat com Jina AI e Milvus Lite
Olhando para o futuro: Jina-Embeddings-V3
A equipe da Jina AI já está trabalhando no Jina-Embeddings-V3, que promete trazer ainda mais avanços:
Velocidade e eficiência: O Jina-Embeddings-V3 será mais rápido e mais eficiente em termos de memória, especialmente para sequências mais longas.
Suporte multilíngue: A nova versão oferecerá distribuição de idiomas otimizada e melhor tratamento de dados multilíngues.
Resolução de problemas do mundo real: O Jina-Embeddings-V3 abordará problemas do mundo real com análise de falhas compressivas no V2 e em outros modelos de embedding.
Aprimoramentos específicos por tarefa: Ele incluirá instruções de tarefa e cabeçotes de tarefa cuidadosamente projetados, juntamente com roteamento inteligente para lidar melhor com diferentes tarefas.
Consciência de chunks e schema: O modelo terá consciência de chunks e schema, melhorando sua compreensão de dados semiestruturados e embeddings hierárquicos.
Resumo
Os modelos de embedding da Jina apresentam alto desempenho, com uma janela de entrada de 8192 tokens que se destaca na representação abrangente de dados. Com suporte multilíngue e integração perfeita com plataformas líderes como OpenAI, esses embeddings são ideais para aplicações entre idiomas.
Modelos de embedding e bancos de dados vetoriais são essenciais para busca por similaridade e recuperação de informações eficientes. Ao integrar os modelos de embedding da Jina ao PyMilvus, o SDK Python para Milvus, o desenvolvimento de RAG e várias aplicações de GenAI se torna mais eficiente e direto.
Em uma palestra recente de Bo Wang, ele discutiu a criação de embeddings de texto da Jina para busca vetorial moderna e sistemas RAG. Ele também compartilhou metodologias para treinar modelos de embedding que codificam efetivamente informações extensas, juntamente com orientações sobre como selecionar os modelos de embedding mais apropriados para várias necessidades de negócios.
Para mais detalhes, assista ao replay da palestra de Bo Wang no Youtube.
Continue lendo

Top 10 Context Engineering Techniques You Should Know for Production RAG
A practical guide to context engineering for production LLM systems, covering RAG, context processing, memory, agents, and multimodal context.

Will Amazon S3 Vectors Kill Vector Databases—or Save Them?
AWS S3 Vectors aims for 90% cost savings for vector storage. But will it kill vectordbs like Milvus? A deep dive into costs, limits, and the future of tiered storage.

Vector Databases vs. Document Databases
Use a vector database for similarity search and AI-powered applications; use a document database for flexible schema and JSON-like data storage.


