Loading…
Loading…
google/embeddinggemma-2(2026-10-06 发布,740M 多模态嵌入模型)的中文能力实测与中文微调工作仓。
本仓库包含两样东西:
| 内容 | 状态 | |
|---|---|---|
| ① | google/embeddinggemma-2 文本骨干的 C-MTEB 全量中文实测(31 任务,同机同 harness 对照 bge-m3) |
✅ 结论明确,见下 |
| ② | 在其上做的中文 LoRA 微调权重(本仓库根目录的 model.safetensors) |
⚠️ 实测结论是「零和」,用前请务必读完「中文微调」一节 |
微调不是本仓库的卖点,结论才是。下面把涨的和跌的全部列出,不做选择性披露。 代码与完整原始结果:https://github.com/Weidows/embeddinggemma2-zh
google/embeddinggemma-2 的官方评测覆盖 MTEB(多语言 v2)、MIEB、MAEB,
但发布后 48 小时内没有任何中文基准数字:声明 base_model=google/embeddinggemma-2
的 60 个衍生仓库里零中文;GitHub 搜 embeddinggemma + C-MTEB 与 + chinese 均为 0 仓库;
中文圈内容全部是转载/新闻。(核实时间:2026-10-08)
MTEB(cmn, v1),31 个中文任务)只加载文本骨干(config_kwargs={"vision_config": None, "audio_config": None},271.0M 参数),
bf16,截断 2048,batch 16。
| 模型 | 参数量 | 总体 | 来源 |
|---|---|---|---|
google/embeddinggemma-2(文本骨干) |
271M | 0.5815 | 本仓实测,单卡 RTX 5070 Ti,173.8 min |
BAAI/bge-m3 |
568M | 0.6068 | 同 harness 同机实跑,84.9 min |
Qwen/Qwen3-Embedding-0.6B |
595M | 0.6748 | mteb/results 公开条目 |
用 bge-m3 一半的参数量,拿到它约 96% 的中文成绩;7 个单项反超 bge-m3。
| 任务类型 | embeddinggemma-2 | bge-m3 | Qwen3-Embedding-0.6B |
|---|---|---|---|
| Retrieval | 0.6179 | 0.6546 | 0.7103 |
| Reranking | 0.5664 | 0.6280 | 0.6258 |
| PairClassification | 0.6732 | 0.6846 | 0.7642 |
| Clustering | 0.4925 | 0.4615 | 0.6874 |
| STS | 0.4441 | 0.4994 | 0.5461 |
| Classification | 0.6948 | 0.7129 | 0.7149 |
| 任务 | 本模型 | bge-m3 | 差 |
|---|---|---|---|
| AFQMC | 0.2783 | 0.4000 | −0.1218 |
| ATEC | 0.3447 | 0.4647 | −0.1200 |
| CMedQAv1-reranking | 0.6650 | 0.7769 | −0.1120 |
| MedicalRetrieval | 0.4335 | 0.5427 | −0.1092 |
| CMedQAv2-reranking | 0.6882 | 0.7909 | −0.1026 |
| BQ | 0.4731 | 0.5739 | −0.1008 |
→ 收敛为两块:医疗领域(检索 + reranking) 与 中文 STS(AFQMC / ATEC / BQ)。
针对上面 6 个短板做的定向微调。结果是净收益 +0.0037,实质为零,涨的和跌的几乎抵消。
| 项 | 值 |
|---|---|
| 基座 | google/embeddinggemma-2 文本骨干(271.0M) |
| LoRA | r=32 / α=64 / dropout 0.05 / 9 个 target(q,k,v,o,gate,up,down + embedding_projection + 24 层 per_layer_projection),可训练 10.92M(4.03%) |
| 训练数据 | 273,549 对 = 中文 STS 156k(AFQMC/ATEC/BQ/LCQMC/PAWSX/STSB 的 train split)+ 医疗 120k(cMedQA-V2.0 的 question→answer) |
| 去污染 | STS 侧剔除与评测 pair 完全相同的 91 条;医疗侧剔除命中评测查询的 7,592 行 + 命中评测语料的 8,776 行 → 查询/文档重叠均为 0 |
| 超参 | 1 epoch / bs 64 / lr 2e-4 / max_seq_length 192 / bf16 / 禁用 fp16 |
| 成本 | 85.2 min,train_loss 0.9009 → 0.2512,eval_loss 0.2099,峰值显存 9.85 GB |
| 任务类型 | 微调前 | 微调后 | Δ |
|---|---|---|---|
| Retrieval | 0.6179 | 0.5893 | −0.0287 |
| Reranking | 0.5664 | 0.6219 | +0.0555 |
| PairClassification | 0.6732 | 0.6249 | −0.0483 |
| Clustering | 0.4925 | 0.4962 | +0.0037 |
| STS | 0.4441 | 0.4853 | +0.0412 |
| Classification | 0.6948 | 0.6933 | −0.0014 |
| 总体 | 0.5815 | 0.5851 | +0.0037 |
涨的
| 任务 | 微调前 | 微调后 | Δ | vs bge-m3 |
|---|---|---|---|---|
| BQ | 0.4731 | 0.6396 | +0.1665 | +0.0657 反超 |
| CMedQAv1-reranking | 0.6650 | 0.8003 | +0.1353 | +0.0234 反超 |
| CMedQAv2-reranking | 0.6882 | 0.8200 | +0.1317 | +0.0291 反超 |
| CmedqaRetrieval | 0.2451 | 0.3361 | +0.0910 | −0.0013 追平 |
| AFQMC | 0.2783 | 0.3685 | +0.0902 | −0.0315 |
| ATEC | 0.3447 | 0.4344 | +0.0897 | −0.0303 |
| IFlyTek | 0.4302 | 0.4948 | +0.0646 | +0.0180 反超 |
| MedicalRetrieval | 0.4335 | 0.4726 | +0.0391 | −0.0701 |
跌的
| 任务 | 微调前 | 微调后 | Δ |
|---|---|---|---|
| CovidRetrieval | 0.7721 | 0.6433 | −0.1288 |
| MMarcoRetrieval | 0.7825 | 0.6997 | −0.0829 |
| EcomRetrieval | 0.6040 | 0.5532 | −0.0508 |
| Cmnli | 0.7167 | 0.6672 | −0.0494 |
| Ocnli | 0.6297 | 0.5826 | −0.0471 |
| MMarcoReranking | 0.2511 | 0.2088 | −0.0423 |
| DuRetrieval | 0.7637 | 0.7243 | −0.0393 |
| MultilingualSentiment | 0.7255 | 0.6868 | −0.0387 |
| JDReview | 0.7964 | 0.7587 | −0.0377 |
| QBQTC | 0.3372 | 0.3006 | −0.0366 |
| T2Retrieval | 0.7618 | 0.7292 | −0.0326 |
max_seq_length=192,而评测用 2048。→ 想把这轮微调做成正收益,缺口的补法是明确的:补 Ocnli/Cmnli 的 train split(NLI 正负对, 这两个数据集本身就有 train split)和 通用中文 (query, passage) 对,并把训练长度提到 512。 本轮没有继续迭代 —— 把这个"零和"结论和完整回归数据如实公开,比发布一个只报喜的权重更有用。
| 任务 | 训练数据来源 | 能否与零样本模型比 |
|---|---|---|
| AFQMC / ATEC / BQ / LCQMC | 它们自己的官方 train split | ❌ 不能。这是有监督 in-domain 微调,不是零样本成绩,不要拿去和榜单上的零样本条目对比 |
| 医疗三项(MedicalRetrieval / CmedqaRetrieval / CMedQAv1&2-reranking) | cMedQA-V2.0(与评测所用的 cMedQA-V1.0 不同版本,已去污染) | ✅ 跨数据集迁移 |
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("Weidows/embeddinggemma-2-zh") # 271M 文本骨干
model.max_seq_length = 2048 # 建议显式设置(见下)
emb = model.encode(["蚂蚁借呗怎么关闭", "花呗额度怎么提升"], normalize_embeddings=True)
⚠️ 建议显式设置
max_seq_length:该模型的 config 会让 sentence-transformers 解析出一个溢出的 默认值(约1e30,等于完全不截断)。这与微调无关,原版google/embeddinggemma-2同样如此。
注意:本权重是纯文本骨干版(config.json 里 vision_config / audio_config 均为 null),
不含原版 740M 的图像/音频塔,因此不支持多模态输入。
如果你想改从源码仓库 google/embeddinggemma-2 手动加载配置,而不是用本仓库的 config.json:
# 必须显式关掉编解码器:否则会实例化视觉塔(768 宽),
# 其 Gemma4ClippableLinear 会与 peft 冲突,也会白白加载 1.5GB 权重
SentenceTransformer("google/embeddinggemma-2",
config_kwargs={"vision_config": None, "audio_config": None})
用 sentence-transformers 直接 encode() 时,若某条输入"整串就是一个媒体 URL",
默认路径会把它当作媒体去解码:
| 输入 | 结果 |
|---|---|
http://www.youtube.com/ehowatHomeChannel |
❌ ImportError: 要解码 YouTube 视频需要先装 yt_dlp |
https://example.com/clip.mp4 |
❌ libtorchcodec 报错 |
https://www.baidu.com |
✅ 正常 |
看这段 https://example.com/a.mp4 |
✅ 正常(只有整串是媒体 URL 才触发) |
网页抓取的中文语料里这类文档很常见(mteb/MMarcoRetrieval 语料第 98275 条就是裸 YouTube 链接),
一次全量评测会因此崩在语料编码中途。把 sentence-transformers pin 到纯 text modality 可绕开,
且 embedding 数值不变(200 条中文文本上 np.allclose(atol=1e-4) == True),
吞吐同时提升约 4 倍(92 → 376 docs/s)。
git clone https://github.com/Weidows/embeddinggemma2-zh && cd embeddinggemma2-zh
uv sync
./src/phase2/eval_finetuned.sh # 微调后权重跑 8 个靶任务(约 29 min)
./src/phase2/eval_finetuned.sh --full # 全量 31 任务(约 174 min)
本机需要直连 + 本地代理,不能用 HF 镜像(镜像会让 hf download 报
Local entry not found. [SSL: UNEXPECTED_EOF_WHILE_READING])。
mteb 2.24.0,benchmark MTEB(cmn, v1),逐任务原始分数在同仓 results/,
本仓库 eval/ 下也放了一份(含微调前后的原始 JSON)mteb/results 公开条目per_layer_projection_norm 会把
[batch, seq, 24 层, 512 维] 上采样到 fp32)。C-MTEB 语料 p99 ≈ 1.3k token,影响有限,
但医疗长文档任务可能被低估。google/embeddinggemma-2