Benchmark de Modelos de Embedding de Código Aberto para RAG
We benchmarked 14 open-source embedding models, across 500+ manually curated retrieval queries spanning legal contracts, customer support tech notes, and medical abstracts.
NVIDIA Llama-Embed-Nemotron-8B lidera em precisão. Em custo, o EmbeddingGemma-300m do Google roda cerca de 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 ouro 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 primária porque os RAG pipelines de produção alimentam os 3 a 5 blocos 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 ouro aparece no top 10.
MRR@10: Rank recíproco médio no corte 10. O documento ouro na posição 1 pontua 1.000, na posição 2 pontua 0.500 e na posição 10 pontua 0.100. Intenção semelhante ao nDCG@3, mas com penalidade de posição mais acentuada.
Hit Top-1: Fração de consultas em que o documento relevante (ouro) é 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 AVG esconde inversões de domínio. O Harrier vence em CUAD, mas fica em sétimo em TechQA. O SFR-2 fica em segundo em TechQA, mas apenas em quarto em CUAD. O KaLM-12B fica em quinto em MedRAG e em nono em TechQA. nDCG@3 por domínio:
O BM25 é competitivo em MedRAG (0.7862, superando o PubMedBERT e o Granite multilíngue) e fraco em CUAD (0.5844, onde 11 de 14 modelos densos o superam). Contratos jurídicos contêm linguagem densa de entidades que favorece correspondência lexical. Em resumos médicos, os principais modelos densos (Nemotron 0.9629, SFR-2 0.9620, jina-v5 0.9523) superam o BM25 em 0.17 a 0.18 pontos absolutos de nDCG@3.
Os intervalos de confiança bootstrap de 95% por célula (modelo, domínio), incluindo um empate quádruplo em MedRAG no topo e uma sobreposição Harrier-Nemotron em CUAD que o ranking de estimativa pontual achata, são relatados 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 H100 80GB SXM5 da RunPod community cloud a $2.99/h. O tempo de relógio por modelo na passada de 551 consultas e 3 corpora (~46.2M tokens no total) produz as seguintes estimativas de $/1M tokens:
A fórmula:
GPU $/h = $2.99 (a taxa do H100 80GB SXM5 da RunPod community cloud do pod que usamos). wall_seconds = tempo total de relógio de cada modelo na passada de 551 consultas e 3 corpora. total_tokens ≈ 46.22M (soma de 3 corpora + 551 consultas, heurística de contagem de caracteres ÷ 4).
Exemplo trabalhado, Nemotron-8B: ($2.99 / 3600) × (1247.8 × 1.000.000 / 46.220.000) = $0.0224 por 1M tokens.
Cinco modelos lideram sua faixa de custo (nenhuma outra linha custa menos e pontua mais alto): Granite-278m-multilíngue 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 nDCG@3 absoluto (0.6952 a 0.9249).
Especialistas de domínio vs generalistas
O PubMedBERT, fine-tuned em pares título-resumo do PubMed, é a óbvia “ferramenta certa” para recuperação médica de RAG no PubMed. Ele pontua nDCG@3 = 0.7084 em MedRAG, o que está abaixo da linha de base lexical BM25 (0.7862) no mesmo corpus. Generalistas modernos de código aberto o superam em 0.22 a 0.25 pontos absolutos em seu domínio de dados de treinamento:
A razão de o especialista ter desempenho inferior é idade e receita. O PubMedBERT é um BERT de 110M parâmetros de 2022, com mean pooling simétrico e sem prefixo de instrução. Os generalistas de 2024-2026 são construídos em backbones maiores, prefixos assimétricos de consulta e documento e objetivos de recuperação ajustados por instruções. A lacuna arquitetural importa mais do que a correspondência de domínio: um fine-tune de 4 anos não consegue acompanhar um recuperador da geração atual ajustado por instruções, mesmo no próprio corpus de treinamento do fine-tune.
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 em TechQA está estatisticamente separada do segundo lugar
O Nemotron-8B tem AVG nDCG@3 = 0.9249. Por domínio, ele atinge 0.8602 em CUAD, 0.9515 em TechQA e 0.9629 em MedRAG. O resultado em TechQA (0.9515 0.923, 0.977) não se sobrepõe ao segundo lugar SFR-Embedding-2_R (0.9109 0.869, 0.949). Os CIs de bootstrap são claramente separados. A base 8B Llama-3.1, ajustada por instruções para recuperação com um prefixo do lado da consulta Instruct: …\nQuery: … e um prefixo simétrico do lado do documento, impulsiona uma vantagem absoluta de 0.04 nDCG@3 sobre a próxima linha em cargas de trabalho de suporte a documentos longos.
Os dois domínios em que 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. CUAD é o único domínio em que ele não lidera: o Harrier-oss-v1-0.6b da Microsoft (0.8720) supera o Nemotron (0.8602) em contratos jurídicos apesar de ser 13x menor, embora os CIs se sobreponham e a liderança não seja estatisticamente separada neste tamanho de amostra.
Um modelo Harrier da Microsoft de 0.6B supera todos os modelos abertos com menos de 7B parâmetros
O Microsoft Harrier-oss-v1-0.6b (lançado em 2026-04 com uma base Qwen3-0.6B e licença MIT) atinge AVG nDCG@3 = 0.8911, quarto no geral. Ele supera o KaLM-Gemma3 de 12B da Tencent (0.8057, licença comunitária Tencent), o SFR-Embedding-2_R de 7B da Salesforce em 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 nDCG@3 acima do Qwen3-Embedding-0.6B (0.8168), construído sobre a base idêntica Qwen3-0.6B. O corpus de treinamento e a receita de instrução impulsionaram 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 AVG, mas 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 fine-tuned em pares título-resumo do PubMed. É a óbvia “ferramenta certa” para um benchmark médico de RAG no PubMed. Ele pontua nDCG@3 = 0.7084 em MedRAG, o que é 0.078 absoluto abaixo da linha de base lexical BM25 (0.7862) no mesmo corpus. Os principais generalistas de código aberto em 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 parâmetros de 2022, com mean pooling simétrico e sem prefixo de instrução. O campo generalista de 2024 a 2026 é construído em backbones maiores, prefixos assimétricos de consulta e documento e objetivos de recuperação ajustados por instruções. Em consultas 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 em cima disso.
A conclusão prática é não escolher um embedder especialista apenas pelo nome. Faça benchmark com suas próprias consultas antes de se comprometer.
Snowflake Arctic oscila 0.32 nDCG@3 entre domínios
O snowflake-arctic-embed-l-v2.0 da Snowflake (568M, Apache-2.0, derivado do bge-m3-retromae, multilíngue) pontua nDCG@3 = 0.5846 em contratos jurídicos 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 abrange 0.8421 a 0.9620 (lacuna 0.12), Nemotron abrange 0.8602 a 0.9629 (lacuna 0.10), Harrier abrange 0.8408 a 0.9605 (lacuna 0.12).
O mecanismo é a composição dos dados de treinamento. O Arctic foi ajustado em BEIR, MIRACL e CLEF; contratos jurídicos não estão representados. Para uma carga de trabalho de recuperação vertical, os dados de treinamento de domínio importam mais do que a contagem de parâmetros ou o comprimento do contexto.
Como funciona a inference de embedding de código aberto
Modelos de embedding de código aberto rodam 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 e maiores, onde o loop de inference Python padrão do sentence-transformers é lento demais para ser tratável.
A receita por modelo importa mais do que a escolha do backend. Modelos modernos de recuperação 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 de BERT usam CLS pooling; modelos derivados de LLM (Llama, Mistral, Qwen3, base Gemma3) usam last-token pooling; modelos multilíngues frequentemente usam mean pooling. O card do HuggingFace para cada modelo é a fonte de verdade para qual combinação de prefixo e pooling é correta.
Camada de backend:
- vLLM: Nemotron-8B, KaLM-Gemma3-12B, jina-v5-text-small
- sentence-transformers: Qwen3-0.6B, EmbeddingGemma-300m, Granite trio, SFR-2, Conan-v1, PubMedBERT, GIST, Snowflake Arctic, Microsoft Harrier
Padrões assimétricos de prefixo observados:
- Instruct + Query/Document: SFR-2, KaLM-Gemma3, Nemotron-8B, Qwen3-Embedding
- encode_query / encode_document embutidos: EmbeddingGemma, KaLM-Gemma3, Nemotron-8B
- task / prompt_name (parâmetro do sentence-transformers): jina-v5, Snowflake Arctic, Harrier
- Sem prefixo (simétrico): Granite trio, Conan, PubMedBERT, GIST
Tipo de pooling por arquitetura base:
- CLS pooling: Granite r2 trio, Snowflake Arctic
- Last-token pooling: 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 para má configuração, 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 jurídicos 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 dataset é compartilhada com nosso benchmark de modelos de embedding em inglês anterior: geração de consulta por consenso de 3 LLM do Protocolo-A (pool rotativo de escritores, avaliador fixo, dois validadores não escritores 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 interavaliadores Cohen’s κ relatada 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 os sistemas de produção de RAG consomem); métricas secundárias nDCG@10, Recall@10, Recall@100, MRR@10, Top-1 hit.
Especificações específicas de código aberto:
- GPU: 1 x NVIDIA H100 80GB SXM5 via RunPod community cloud
- Template 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 card de modelo HF. ST para 12 modelos, vLLM para Nemotron-8B, KaLM-Gemma3-12B, jina-v5-text-small.
- Chunking por modelo: truncamento em nível de caractere em
max_seq_length x 4caracteres por token, então o tokenizer do modelo trunca para seu comprimento máximo de sequência real. - Recuperação assimétrica: todo modelo que suporta isso recebe o prefixo de consulta e documento documentado no card HF. Sem prefixo é o padrão documentado para alguns.
- Normalização L2: aplicada uniformemente pós-pooling. Alguns modelos fazem isso internamente. Nós 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), CI percentil 95%, seed=2026.
Modelos testados
Ordenado pelo rank AVG nDCG@3. Coluna de backend: ST = sentence-transformers, vLLM = vLLM 0.19.
Resultados dos intervalos de confiança bootstrap de 95%
O leaderboard completo acima é de execução única por célula (modelo, domínio). A variância de inicialização entre sessões não é medida. Para capturar a variância no nível da 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). CI bootstrap de 95% por domínio em nDCG@3:
Os CIs mudam quais inversões os dados suportam. Em CUAD, o Harrier (0.8720, [0.836, 0.906]) e o Nemotron (0.8602, [0.821, 0.897]) se sobrepõem, então a liderança do Harrier em CUAD não é claramente separada neste tamanho de amostra. Em TechQA, o Nemotron (0.9515, [0.923, 0.977]) e o SFR-2 (0.9109, [0.869, 0.949]) não se sobrepõem, então a liderança do Nemotron em TechQA é estatisticamente separada. Em MedRAG, os quatro primeiros (Nemotron 0.9629, SFR-2 0.9620, Harrier 0.9605, jina-v5 0.9523) estão dentro dos CIs uns dos outros e formam um empate estatístico quádruplo. A inversão do PubMedBERT abaixo do BM25 em 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 passada de 3 execuções entre sessões é necessária para resolvê-lo como separado em vez de sobreposto.
Limitações
Execução única por célula (modelo, domínio). A tabela de CI bootstrap acima captura a variância no nível da consulta dentro da execução (10K reamostragens, método percentil, seed=2026), mas a variância de inicialização entre sessões não é medida. Uma passada de 3 execuções entre meias-noites está planejada para a v2.1. Os empates mais próximos revelados pela tabela de CI (por exemplo, o empate quádruplo em MedRAG no topo, a sobreposição Harrier-Nemotron em CUAD, a inversão marginal PubMedBERT-vs-BM25) se beneficiariam mais da passada de múltiplas execuções.
Fator de confusão de comprimento de contexto por modelo. Modelos com janelas de contexto de 512 tokens (Granite-278m-multilíngue, PubMedBERT, Conan, GIST) só veem 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 em TechQA (notas técnicas longas) e MedRAG (resumos longos).
Risco de contaminação dos dados de treinamento do MedRAG. Vários dos modelos avaliados foram treinados em dados derivados do PubMed (PubMedBERT por definição, possivelmente Granite-278m-multilíngue, possivelmente a base Qwen3). Parte do aumento de nDCG@3 em 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 da 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
NVIDIA Llama-Embed-Nemotron-8B lidera com AVG nDCG@3 = 0.9249 com vitórias estatisticamente separadas em 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 AVG 0.8911. O Google EmbeddingGemma-300m roda com custo cerca de 4x menor para 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 Reranker: Top 8 Modelos Comparados
- Modelos de Embedding Multimodais: Apple vs Meta vs OpenAI
- RAG Híbrido: Aumentando a Precisão do RAG
- RAG em Grafo vs RAG Vetorial
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 = aug,
howpublished = {\url{https://aimultiple.com/open-source-embedding-models}},
note = {AIMultiple. Acessado em 10 Agosto 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.