Avaliamos 14 modelos de embedding de código aberto, auto-hospedados em uma única H100, em mais de 500 consultas de recuperação curadas manualmente, abrangendo contratos legais, notas técnicas de suporte ao cliente e resumos médicos. NVIDIA Llama-Embed-Nemotron-8B lidera em precisão. Em custo, o EmbeddingGemma-300m do Google é aproximadamente 4x mais barato que o Nemotron, ao custo de uma pequena perda de precisão.
Resultados do benchmark de modelos de embedding de código aberto
Métricas explicadas
nDCG@3: Ganho cumulativo descontado normalizado no corte 3. Com um documento relevante por consulta, é 1 / log2(posição + 1) quando o documento alvo fica no top 3, e 0 caso contrário. A posição 1 pontua 1,000, a posição 2 pontua 0,631 e a posição 3 pontua 0,500. Usamos nDCG@3 como métrica principal porque pipelines de RAG em produção alimentam os 3 a 5 trechos principais ao LLM, e o viés de primazia faz a posição 1 importar desproporcionalmente.
nDCG@10: Mesma fórmula com corte 10.
Recall@10: Fração de consultas em que o documento alvo aparece no top 10.
MRR@10: Média da posição recíproca no corte 10. Alvo na posição 1 pontua 1,000, posição 2 pontua 0,500 e posição 10 pontua 0,100. Intenção semelhante ao nDCG@3, mas com penalidade de posição mais acentuada.
Acerto Top-1: Fração de consultas em que o documento relevante alvo é o único resultado no topo. A métrica mais rigorosa e a mais próxima de um fluxo de trabalho de consulta sem LLM.
Resultados de nDCG@3 por domínio
O ranking médio esconde inversões de domínio. O Harrier vence no CUAD, mas fica em sétimo no TechQA. O SFR-2 fica em segundo no TechQA, mas apenas em quarto no CUAD. O KaLM-12B é quinto no MedRAG e nono no TechQA. nDCG@3 por domínio:
O BM25 é competitivo no MedRAG (0,7862, superando o PubMedBERT e o Granite multilíngue) e fraco no CUAD (0,5844, onde 11 dos 14 modelos densos o superam). Contratos legais contêm linguagem densa de entidades que recompensa a correspondência lexical. Em resumos médicos, os melhores modelos densos (Nemotron 0,9629, SFR-2 0,9620, jina-v5 0,9523) superam o BM25 por 0,17 a 0,18 pontos absolutos de nDCG@3.
Intervalos de confiança bootstrap de 95% por célula (modelo, domínio), incluindo um empate quádruplo no MedRAG no topo e uma sobreposição Harrier-Nemotron no CUAD que a estimativa pontual do ranking achata, são reportados na seção de metodologia do benchmark.
Custo por milhão de tokens
O custo auto-hospedado é amortizado pela GPU: a taxa horária dividida pelos tokens processados por hora. O pod que usamos foi um RunPod community-cloud H100 80GB SXM5 a $2,99/hora. O tempo de relógio por modelo na passagem de 551 consultas e 3 corpora (~46,2M tokens no total) gera as seguintes estimativas de $/1M tokens:
A fórmula:
GPU $/hora = $2,99 (a taxa RunPod community H100 80GB SXM5 do pod que usamos). wall_seconds = tempo total de relógio de cada modelo na passagem de 551 consultas e 3 corpora. total_tokens ≈ 46,22M (soma de 3 corpora + 551 consultas, heurística de divisão de caracteres ÷ 4).
Exemplo prático, Nemotron-8B: ($2,99 / 3600) × (1247,8 × 1.000.000 / 46.220.000) = $0,0224 por 1M tokens.
Cinco modelos lideram seu nível de custo (nenhuma outra linha custa menos e pontua mais): Granite-278m-multilingual na base da escada de custo, depois Granite-small-r2, EmbeddingGemma-300m, jina-v5-text-small e Nemotron-8B no topo da escada de qualidade. Os extremos abrangem 13x em custo ($0,0017/M a $0,0224/M) e 0,23 de nDCG@3 absoluto (0,6952 a 0,9249).
Especialistas de domínio vs generalistas
O PubMedBERT, ajustado em pares de título-resumo do PubMed, é a "ferramenta certa" óbvia para recuperação de RAG médico no PubMed. Ele pontua nDCG@3 = 0,7084 no MedRAG, o que fica abaixo da linha de base lexical BM25 (0,7862) no mesmo corpus. Generalistas modernos de código aberto o superam por 0,22 a 0,25 pontos absolutos em seu domínio de dados de treinamento:
A razão pela qual o especialista tem desempenho inferior é idade e receita. O PubMedBERT é um BERT de 110M de parâmetros de 2022, com mean pooling simétrico e sem prefixo de instrução. Os generalistas de 2024-2026 são construídos sobre backbones maiores, prefixos assimétricos de consulta e documento e objetivos de recuperação ajustados por instrução. A lacuna arquitetural importa mais do que a correspondência de domínio: um ajuste fino de 4 anos não consegue acompanhar um recuperador ajustado por instrução da geração atual, mesmo no próprio corpus de treinamento do ajuste fino.
A regra do comprador é testar um especialista de domínio contra um generalista moderno em consultas representativas antes de implantá-lo. A suposição de que "o especialista vencerá em seu domínio" não é mais segura para modelos de embedding de código aberto em 2026.
Descobertas do benchmark de embedding de código aberto
A liderança do Nemotron-8B no TechQA está estatisticamente separada do segundo lugar
Nemotron-8B nDCG@3 MÉDIO = 0,9249. Por domínio, ele atinge 0,8602 no CUAD, 0,9515 no TechQA e 0,9629 no MedRAG. O resultado do TechQA (0,9515 0,923, 0,977) não se sobrepõe ao segundo colocado SFR-Embedding-2_R (0,9109 0,869, 0,949). Os ICs bootstrap são claramente separados. A base 8B Llama-3.1, ajustada por instrução para recuperação com um prefixo de consulta Instruct: …\nQuery: … e um prefixo simétrico do lado do documento, impulsiona uma vantagem de 0,04 de nDCG@3 absoluto sobre a próxima linha em cargas de trabalho de suporte a documentos longos.
Os dois domínios onde o Nemotron vence de forma absoluta (TechQA, MedRAG) são os corpora de documentos longos onde a assimetria de prefixo de instrução mais importa. O CUAD é o único domínio onde ele não lidera: o Harrier-oss-v1-0.6b da Microsoft (0,8720) supera o Nemotron (0,8602) em contratos legais, apesar de ser 13x menor, embora os ICs se sobreponham e a liderança não seja estatisticamente separada neste tamanho de amostra.
Um modelo Harrier de 0.6B da Microsoft supera todos os modelos abertos com menos de 7B de parâmetros
O Microsoft Harrier-oss-v1-0.6b (lançado em 04/2026 com base Qwen3-0.6B e licença MIT) atinge nDCG@3 MÉDIO = 0,8911, quarto lugar geral. Ele supera o 12B Tencent KaLM-Gemma3 (0,8057, licença comunitária da Tencent), o 7B Salesforce SFR-Embedding-2_R no CUAD (0,8421 vs Harrier 0,8720) e o EmbeddingGemma-300m do Google (0,8706). Em uma comparação de mesma arquitetura, o Harrier-0.6b (0,8911) fica 0,074 de nDCG@3 acima do Qwen3-Embedding-0.6B (0,8168), construído sobre a idêntica base Qwen3-0.6B. O corpus de treinamento e a receita de instrução geraram a diferença, não a contagem de parâmetros.
Para compradores, o Harrier é a linha de código aberto mais bem classificada que vem com uma licença adequada para uso comercial sem restrições. SFR-2 (CC-BY-NC), Nemotron (NSCL-v1) e jina-v5 (CC-BY-NC) o superam na escada MÉDIA, mas todos os três são apenas para pesquisa ou não comerciais.
Um embedder especialista médico perde para o BM25
O PubMedBERT-base-embeddings da NeuML foi ajustado em pares de título-resumo do PubMed. É a "ferramenta certa" óbvia para um benchmark de RAG médico no PubMed. Ele pontua nDCG@3 = 0,7084 no MedRAG, o que é 0,078 absoluto abaixo da linha de base lexical BM25 (0,7862) no mesmo corpus. Os melhores generalistas de código aberto no MedRAG ficam muito acima de ambos: Nemotron-8B 0,9629, SFR-Embedding-2_R 0,9620, Harrier-oss 0,9605, jina-v5 0,9523, KaLM-Gemma3-12B 0,9453.
Esta é a inversão que deve mudar como um comprador escolhe um especialista de domínio. O PubMedBERT é um BERT de 110M de parâmetros de 2022, com mean pooling simétrico e sem prefixo de instrução. O campo generalista de 2024 a 2026 é construído sobre backbones maiores, prefixos assimétricos de consulta e documento e objetivos de recuperação ajustados por instrução. Em consultas do MedRAG que já incluem vocabulário médico, a correspondência lexical do BM25 é naturalmente forte, e a especialização do PubMedBERT não acrescenta nada a mais.
A conclusão prática não é escolher um embedder especialista apenas pelo nome. Faça benchmark dele em suas próprias consultas antes de se comprometer.
Snowflake Arctic oscila 0,32 de nDCG@3 entre domínios
O snowflake-arctic-embed-l-v2.0 da Snowflake (568M, Apache-2.0, derivado bge-m3-retromae, multilíngue) pontua nDCG@3 = 0,5846 em contratos legais CUAD e 0,9053 em resumos médicos MedRAG. O mesmo modelo, mesma receita, mesmo formato de consulta, com uma oscilação de 0,32 ponto entre dois domínios. Outros modelos na lista oscilam menos: SFR-2 varia de 0,8421 a 0,9620 (diferença 0,12), Nemotron varia de 0,8602 a 0,9629 (diferença 0,10), Harrier varia de 0,8408 a 0,9605 (diferença 0,12).
O mecanismo é a composição dos dados de treinamento. O Arctic foi ajustado no BEIR, MIRACL e CLEF; contratos legais não estão representados. Para uma carga de trabalho de recuperação vertical, os dados de treinamento do domínio importam mais do que a contagem de parâmetros ou o comprimento do contexto.
Como funciona a inferência de embedding de código aberto
Os modelos de embedding de código aberto são executados em dois backends neste benchmark: sentence-transformers (12 modelos) e vLLM (4 modelos). A divisão não é sobre qualidade; é sobre eficiência de tempo de execução em modelos de 8B ou maiores, onde o loop de inferência Python padrão do sentence-transformers é lento demais para ser viável.
A receita por modelo importa mais do que a escolha do backend. Modelos de recuperação modernos usam prefixos assimétricos: o lado da consulta é envolvido em um prompt estilo Instruct (Instruct: Given a question, retrieve passages...\nQuery: <text>) enquanto o lado do documento é simples. O tipo de pooling varia: modelos derivados do BERT usam pooling CLS; modelos derivados de LLM (Llama, Mistral, Qwen3, base Gemma3) usam pooling do último token; modelos multilíngues frequentemente usam mean pooling. O cartão HuggingFace de cada modelo é a fonte da verdade para qual combinação de prefixo e pooling é a correta.
Camada de backend:
- vLLM: Nemotron-8B, KaLM-Gemma3-12B, jina-v5-text-small
- sentence-transformers: Qwen3-0.6B, EmbeddingGemma-300m, trio Granite, SFR-2, Conan-v1, PubMedBERT, GIST, Snowflake Arctic, Microsoft Harrier
Padrões de prefixo assimétrico observados:
- Instruct + Query/Document: SFR-2, KaLM-Gemma3, Nemotron-8B, Qwen3-Embedding
- encode_query / encode_document integrados: EmbeddingGemma, KaLM-Gemma3, Nemotron-8B
- task / prompt_name (parâmetro sentence-transformers): jina-v5, Snowflake Arctic, Harrier
- Sem prefixo (simétrico): trio Granite, Conan, PubMedBERT, GIST
Tipo de pooling por arquitetura base:
- Pooling CLS: trio Granite r2, Snowflake Arctic
- Pooling do último token: Nemotron, KaLM-Gemma3, SFR-2, jina-v5, Qwen3-Embedding, Harrier
- Mean pooling: EmbeddingGemma, Granite-multilingual, Conan, PubMedBERT, GIST
Usar a receita errada degrada silenciosamente a qualidade da recuperação sem travar. Qualquer benchmark de embedders de código aberto deve incluir um piso de sanidade (Recall@10 abaixo de 0,5 em todos os domínios para qualquer modelo é um sinal de alerta de configuração incorreta, não um resultado).
Metodologia do benchmark de modelos de embedding de código aberto
Três domínios de recuperação foram avaliados: contratos legais CUAD (246 consultas, 509 contratos), notas técnicas de suporte ao cliente TechQA (151 consultas, 28000 notas técnicas da IBM), resumos de saúde MedRAG-PubMed (154 consultas, 50000 resumos). Total de 551 consultas.
A metodologia de construção do conjunto de dados é compartilhada com nosso benchmark de modelos de embedding em inglês anterior: Protocolo-A de geração de consultas por consenso de 3 LLMs (pool rotativo de redatores, avaliador fixo, dois validadores não redatores por tentativa), fixação de corpus por hash SHA-256, listas de permissão de tokens banidos por entidade por domínio para evitar atalhos lexicais do BM25, concordância entre avaliadores κ de Cohen reportada por par de validadores, ranks da linha de base BM25 sintetizados a partir do campo bm25_rank_at_target já presente em cada JSON de consulta (equivalente ao Pyserini). Métrica primária nDCG@3 (realista para RAG, o que sistemas de RAG em produção consomem); métricas secundárias nDCG@10, Recall@10, Recall@100, MRR@10, acerto Top-1.
Especificações específicas de código aberto:
- GPU: 1 x NVIDIA H100 80GB SXM5 via RunPod community cloud
- Modelo de pod:
runpod/pytorch:1.0.2-cu1281-torch280-ubuntu2404
- Stack: PyTorch 2.10.0+cu128, vLLM 0.19.1, transformers 5.6.2, sentence-transformers 5.4.1
- Despacho por modelo: caminho primário do cartão de modelo HF. ST para 12 modelos, vLLM para Nemotron-8B, KaLM-Gemma3-12B, jina-v5-text-small.
- Segmentação por modelo: truncamento em nível de caractere em
max_seq_length x 4caracteres por token, então o tokenizador do modelo trunca para seu comprimento máximo de sequência real.
- Recuperação assimétrica: todo modelo que a suporta recebe o prefixo de consulta e documento documentado no cartão HF. Sem prefixo é o padrão documentado para alguns.
- Normalização L2: aplicada uniformemente após o pooling. Alguns modelos fazem isso internamente. Renormalizamos para garantir paridade em toda a lista.
- Chave de cache de embedding: inclui prefixo + task + prompt_name + max_seq + backend, para que uma troca de prefixo no meio da execução não possa carregar silenciosamente embeddings obsoletos.
- Protocolo estatístico: 10K reamostragens bootstrap por célula (modelo, domínio, métrica), IC de 95% percentil, seed=2026.
Modelos testados
Ordenado por rank de nDCG@3 MÉDIO. Coluna backend: ST = sentence-transformers, vLLM = vLLM 0.19.
Resultados dos intervalos de confiança bootstrap de 95%
O quadro de líderes completo acima é de execução única por célula (modelo, domínio). A variância de inicialização do modelo entre sessões não é medida. Para capturar a variância em nível de consulta dentro da execução, reamostramos o vetor de rank por consulta para cada célula (modelo, domínio) 10.000 vezes com reposição (método percentil, seed=2026, tamanhos de amostra CUAD n=246, TechQA n=151, MedRAG n=154). IC bootstrap de 95% por domínio no nDCG@3:
Os ICs de fato mudam quais inversões os dados suportam. No CUAD, Harrier (0,8720, [0,836, 0,906]) e Nemotron (0,8602, [0,821, 0,897]) se sobrepõem, então a liderança do Harrier no CUAD não é claramente separada neste tamanho de amostra. No TechQA, Nemotron (0,9515, [0,923, 0,977]) e SFR-2 (0,9109, [0,869, 0,949]) não se sobrepõem, então a liderança do Nemotron no TechQA é estatisticamente separada. No MedRAG, os quatro primeiros (Nemotron 0,9629, SFR-2 0,9620, Harrier 0,9605, jina-v5 0,9523) estão dentro dos ICs uns dos outros e formam um empate estatístico quádruplo. A inversão PubMedBERT-abaixo-do-BM25 no MedRAG (0,7084 [0,641, 0,772] vs BM25 0,7862) está na margem da sobreposição. A tendência central claramente coloca o especialista abaixo do BM25, mas uma passagem de 3 execuções entre sessões é necessária para resolvê-la como separada em vez de sobreposta.
Limitações
Execução única por célula (modelo, domínio). A tabela de IC bootstrap acima captura a variância em nível de consulta dentro da execução (10K reamostragens, método percentil, seed=2026), mas a variância de inicialização do modelo entre sessões não é medida. Uma passagem de 3 execuções entre meias-noites está planejada para a v2.1. Os vínculos mais próximos revelados pela tabela de IC (por exemplo, o empate quádruplo no MedRAG no topo, a sobreposição Harrier-Nemotron no CUAD, a inversão marginal PubMedBERT-vs-BM25) se beneficiariam mais da passagem de múltiplas execuções.
Fator de confusão do comprimento do contexto por modelo. Modelos com janelas de contexto de 512 tokens (Granite-278m-multilingual, PubMedBERT, Conan, GIST) veem apenas os primeiros ~2K caracteres de cada documento. Modelos com contexto de 8K ou 32K (Nemotron, KaLM-12B, jina-v5, Harrier, Granite r2 english) veem o documento completo. Isso favorece modelos de contexto longo no TechQA (notas técnicas longas) e MedRAG (resumos longos).
Risco de contaminação de dados de treinamento no MedRAG. Vários dos modelos avaliados foram treinados em dados derivados do PubMed (PubMedBERT por definição, possivelmente Granite-278m-multilingual, possivelmente base Qwen3). Algum aumento no nDCG@3 do MedRAG pode refletir sobreposição de dados de treinamento em vez de qualidade de recuperação.
O Conan-v1 é treinado em chinês. Incluí-lo em domínios apenas em inglês é um ponto de dados instrutivo sobre incompatibilidade de idioma, em vez de uma comparação justa frente a frente na qualidade de recuperação em inglês. Esperamos desempenho inferior em relação aos pares treinados em inglês, e é isso que os dados mostram.
Conclusão
O NVIDIA Llama-Embed-Nemotron-8B lidera com nDCG@3 MÉDIO = 0,9249 com vitórias estatisticamente separadas no TechQA e MedRAG. A escolha de código aberto mais bem classificada sob uma licença irrestrita (MIT) é o Microsoft Harrier-oss-v1-0.6b com MÉDIA de 0,8911. O Google EmbeddingGemma-300m roda a um custo aproximadamente 4x menor por uma pequena perda de precisão.
Leitura adicional
Explore outros benchmarks de RAG, como:
- Top 10 Modelos de Embedding Multilíngues para RAG
- Modelos de Embedding: OpenAI vs Gemini vs Voyage
- Top Banco de Dados Vetorial para RAG: Qdrant vs Weaviate vs Pinecone
- Benchmark de Rerankers: Top 8 Modelos Comparados
- Modelos de Embedding Multimodais: Apple vs Meta vs OpenAI
- RAG Híbrido: Aumentando a Precisão do RAG
- Graph RAG vs Vector RAG
Cite este benchmark
Escolha o formato adequado ao local onde você vai publicar. Colar a versão com link no seu CMS preserva o backlink.
@misc{sari2026,
author = {Sarı, Ekrem},
title = {{Benchmark de Modelos de Embedding de Código Aberto para RAG}},
year = {2026},
month = jul,
howpublished = {\url{https://aimultiple.com/open-source-embedding-models}},
note = {AIMultiple. Acessado em 3 Julho 2026}
}Resultados e carimbos de data/hora de 15 pontos de dados. Baixe os dados utilizados neste artigo como um arquivo ZIP contendo um arquivo CSV e um README.
Seja o primeiro a comentar
Seu endereço de e-mail não será publicado. Todos os campos são obrigatórios. Os comentários são deixados em seu idioma original.