Notes · Benchmark

Qwen3-Embedding vs bge-m3 vs EmbeddingGemma 2 for Chinese retrieval

We needed open models for Chinese-first search, so we ran four embedding models and two rerankers through one fixed protocol on the full C-MTEB Chinese corpora, plus two English sets for contrast.

Short answer

  • Embedding: Qwen3-Embedding-0.6B was the best small model on our Chinese sets (nDCG@10 84.29 / 84.71). Qwen3-Embedding-4B scored 3.8 / 5.7 points higher with about 6.7× the parameters.
  • Reranker: for Chinese, bge-reranker-v2-m3 (+2.34 / +4.99). For English, Qwen3-Reranker-0.6B (+6.74 / +2.65).
  • EmbeddingGemma 2 trailed Qwen3-Embedding-0.6B by 7.3 / 8.0 points on Chinese and is not in vLLM 0.29.0’s native model registry.
  • Pitfall: truncating the whole query-plus-document pair silently breaks Qwen3-Reranker. Clip the document, then apply the template.

Protocol

Every model saw the same four evaluation sets, byte for byte: we built them once with a fixed seed and checked their SHA-256 on every machine.

Chinese setsC-MTEB T2Retrieval and DuRetrieval, dev split. 300 queries sampled with seed 0; the full C-MTEB corpora (118,605 and 100,001 passages).
English setsMTEB SciFact (300 queries, 5,183 documents) and NFCorpus (323 queries, 3,633 documents), full test splits.
MetricsnDCG@10 with exponential gain (2rel − 1) and Recall@100, averaged over queries, ×100; cosine similarity. T2Retrieval, DuRetrieval and SciFact have binary labels, where this equals the linear gain MTEB uses. NFCorpus has graded labels (1, 2), so its column is not directly comparable with MTEB’s.
Embedding input512 tokens per document and per query, prompt prefixes included, each model’s own tokenizer, special tokens kept.
PromptsQwen3-Embedding: Instruct: …\nQuery: on queries only, with one English task instruction per set (in eval.py). bge-m3: none. EmbeddingGemma 2: the model card’s task: … | query: and title: … | text: formats.
RerankingTop 50 from Qwen3-Embedding-0.6B. Each document clipped to 512 tokens, then wrapped in the reranker’s template; queries not clipped. Qwen3-Reranker uses its model card template with the same English task instructions.
RuntimevLLM 0.29.0 pooling runner, bfloat16. EmbeddingGemma 2 through sentence-transformers 6.2.0 and transformers 5.20.2, bfloat16.
HardwareRented single-GPU machines (A40, RTX A6000, L40S), one model per machine. This note does not compare speed.
RunsEach configuration evaluated once. Query sampling is seeded; run-to-run and cross-GPU variation were not measured.

Queries are sampled but corpora are complete, so these scores compare with each other, not with the full-query C-MTEB leaderboard.

Embedding results

nDCG@10, Recall@100 in brackets. Bold is the best in each column. *EmbeddingGemma 2: 0.74B in total, of which the text path is 0.27B.
ModelParamsDimT2 (zh)Du (zh)SciFact (en)NFCorpus (en)
Qwen3-Embedding-0.6B0.6B102484.29 (95.15)84.71 (97.47)69.81 (96.33)36.30 (32.68)
Qwen3-Embedding-4B4B256088.07 (97.96)90.39 (99.10)78.41 (97.67)41.34 (38.79)
bge-m3 (dense)0.57B102480.39 (93.80)84.61 (96.77)64.19 (90.70)31.87 (28.36)
EmbeddingGemma 20.74B*76877.03 (91.74)76.68 (94.29)85.07 (97.67)37.17 (36.04)
  • Small models, Chinese: Qwen3-Embedding-0.6B leads bge-m3 by 3.9 points on T2 and ties it on Du (+0.1). EmbeddingGemma 2 trails Qwen3-Embedding-0.6B by 7.3 / 8.0 points and bge-m3 by 3.4 / 7.9.
  • Going to 4B: +3.8 on T2 and +5.7 on Du, with 6.7× the parameters and 2.5× the vector size of 0.6B.
  • EmbeddingGemma 2 leads on SciFact by 6.7 points over the 4B model while trailing it on the other three sets. We did not audit training-data overlap for any model; validate all candidates on held-out data from your own domain.
  • bge-m3 was measured in dense mode only. Its sparse and multi-vector outputs are not part of vLLM’s embeddings endpoint.

Reranking results

nDCG@10 after reranking the top 50 from Qwen3-Embedding-0.6B; change from the retriever alone in brackets.
RerankerT2 (zh)Du (zh)SciFact (en)NFCorpus (en)
None (retriever)84.2984.7169.8136.30
bge-reranker-v2-m386.63 (+2.34)89.70 (+4.99)73.95 (+4.14)35.07 (−1.23)
Qwen3-Reranker-0.6B80.32 (−3.97)85.50 (+0.79)76.55 (+6.74)38.95 (+2.65)

The rerankers trade places by language. Qwen’s model card (checked 26 October 2026) also puts bge-reranker-v2-m3 slightly ahead on Chinese, 72.16 against 71.31 for Qwen3-Reranker-0.6B on its CMTEB-R suite, reranking the top 100 from the same retriever; on our two sets the gap is larger. Possible reasons we have not tested: T2Retrieval passages contain a lot of HTML markup, and we rerank only the top 50 with documents clipped to 512 tokens. If your traffic is mostly Chinese, test bge-reranker-v2-m3 first.

Pitfalls we hit

The two numbers in the first two pitfalls come from exploratory runs that we discarded; they are not in the published results.

Truncating the pair breaks Qwen3-Reranker

Qwen3-Reranker is a causal language model that scores the probability of “yes” at the position after its prompt suffix (<|im_start|>assistant …). Our first run truncated the whole query-plus-document string to 1,024 tokens from the end, which cut the suffix off long passages. Reranking then pushed T2 down from 84.29 to 68.28, with no error anywhere. Clip the document text first and wrap it in the template afterwards.

Random distractors make Chinese retrieval look easier

Our first Chinese sets used the relevant passages plus 20,000 random ones. Qwen3-Embedding-0.6B scored 91–93 nDCG@10, compressing the differences between models; with the full corpora the same model scores 84–85. To cut evaluation cost without making the task easier, sample queries and keep the full corpus.

EmbeddingGemma 2 needs a newer stack

Its config declares EmbeddingGemma2Model and was saved with a transformers 5.18 development build. Transformers 5.16 has no such architecture, and vLLM 0.29.0’s native model registry does not list it; we did not try vLLM’s Transformers fallback. Transformers 5.20.2 with sentence-transformers 6.2.0 loads it once Pillow is installed for its processor. Use bfloat16 or float32: the model card says float16 returns NaN or degraded embeddings.

Limits

  • One run per configuration and 300 queries per Chinese set. We did not compute confidence intervals; we would not decide on a difference of about one point.
  • Two Chinese and two English sets, all public. Your domain may rank models differently.
  • Quality only. Latency, throughput and memory on the hardware you deploy to are a separate measurement.
  • Training-data overlap with these benchmarks was not audited for any model.

Reproduce

The scripts, pinned model and dataset revisions, set hashes and aggregate results are below. We rebuilt the four sets from the pinned dataset revisions on a second machine and their hashes matched sets.sha256.

Two Python 3.12 environments: one for vLLM, one for sentence-transformers (EmbeddingGemma 2 only).

shell
export EVAL_WORKDIR=/workspace      # default
python3.12 -m venv vllm-env && vllm-env/bin/pip install vllm==0.29.0 numpy pyarrow huggingface_hub
python3.12 -m venv st-env && st-env/bin/pip install transformers==5.20.2 sentence-transformers==6.2.0 torch pillow numpy pyarrow huggingface_hub

vllm-env/bin/python download.py      # models + datasets, pinned
vllm-env/bin/python eval.py prep
(cd $EVAL_WORKDIR && sha256sum -c /path/to/sets.sha256)

vllm-env/bin/python eval.py embed Qwen3-Embedding-0.6B vllm
vllm-env/bin/python eval.py embed Qwen3-Embedding-4B vllm
vllm-env/bin/python eval.py embed bge-m3 vllm
st-env/bin/python eval.py embed embeddinggemma-2 st
vllm-env/bin/python eval.py rerank bge-reranker-v2-m3 Qwen3-Embedding-0.6B
vllm-env/bin/python eval.py rerank Qwen3-Reranker-0.6B Qwen3-Embedding-0.6B

Check each dataset’s license before using it beyond evaluation.

FAQ

Which small open embedding model is best for Chinese retrieval?
In our October 2026 run, Qwen3-Embedding-0.6B scored nDCG@10 84.29 on T2Retrieval and 84.71 on DuRetrieval with the full C-MTEB corpora, ahead of bge-m3 (80.39, 84.61) and EmbeddingGemma 2 (77.03, 76.68). Qwen3-Embedding-4B scored 3.8 and 5.7 points higher (88.07, 90.39) with about 6.7 times the parameters.
Is bge-reranker-v2-m3 or Qwen3-Reranker-0.6B better for Chinese?
On our two Chinese sets bge-reranker-v2-m3 was better: it raised nDCG@10 by 2.34 on T2Retrieval and 4.99 on DuRetrieval, while Qwen3-Reranker-0.6B changed it by −3.97 and +0.79. On our two English sets the order reversed.
Can vLLM serve EmbeddingGemma 2?
Its architecture, EmbeddingGemma2Model, is not in vLLM 0.29.0's native model registry. We did not try vLLM's Transformers fallback; we ran the model with sentence-transformers 6.2.0 and transformers 5.20.2 in bfloat16. The model card warns against float16.
Why does Qwen3-Reranker make my ranking worse?
Check how you truncate. Qwen3-Reranker scores the token that follows its prompt suffix. If you truncate the whole query-plus-document string from the end, long documents lose the suffix and the score becomes noise; in an exploratory run that dropped T2Retrieval from 84.29 to 68.28. Clip the document first, then wrap it in the template.

Sources

More from tokenflow

tokenflow routes OpenAI- and Anthropic-compatible traffic across our own GPUs. Read the other notes, see how to use it from coding agents, or request access. Found an error in this note? Write to support@tokenflow.dev.