Monday, August 31, 2026

支持多语言混合搜索的模型有哪些,与使用稠密向量+BM25混合搜索相比有哪些优劣

“多语言混合搜索模型”是指一个模型同时产生 dense embedding + learned sparse representation(神经稀疏向量),从而不再需要单独维护 dense + BM25 两套模型/索引,目前最值得关注的是 BGE-M3,另外还有比较新的 MILCO、SPLADE 系列。

目前比较值得看的

模型 多语言 Dense Sparse Multi-vector 特点
BGE-M3 ✅ 100+ 最成熟、生态最好
MILCO 300M/560M ❌/重点在 Sparse 专门解决跨语言稀疏检索
SPLADE v3 主要英语 神经稀疏检索代表
multilingual E5 / Qwen3-Embedding 等 主要还是 dense

BGE-M3 比较特殊:一次 encoder forward 就可以得到 dense、sparse、ColBERT-style multi-vector 三种表示,并支持 100+ 语言、最长 8192 tokens。(BGE Model)


关键问题:它和 Dense + BM25 到底有什么区别?

我认为这是最值得关注的地方。

传统方案:

Query
 ├── Dense Embedding ──→ Vector DB
 │
 └── BM25 ─────────────→ Inverted Index
             ↓
       RRF / 加权融合
             ↓
          Reranker

例如:

score = 0.6 * dense_score + 0.4 * bm25_score

BGE-M3:

                 ┌── dense vector
Query → BGE-M3 ──┼── sparse vector
                 └── multi-vector

其中 sparse 并不是普通 BM25,而是模型学习出来的 lexical weights(词汇权重)。它和 SPLADE 的思路类似:模型会预测哪些词应该参与匹配以及它们的重要程度。(BGE Model)

所以它实际上是:

Dense:
“汽车” ≈ “轿车” ≈ “automobile”

Sparse:
“XR-7742” → XR-7742
“Boeing 737 MAX” → Boeing / 737 / MAX

两者互补。


相比 Dense + BM25,优势是什么?

1. 跨语言能力明显更自然

这是 BGE-M3 这种模型最大的意义之一。

例如:

Query:
What causes battery thermal runaway?

Document:
锂离子电池热失控的主要原因包括……

Dense 本身就能够跨语言匹配。

但传统 BM25:

thermal runaway

和:

热失控

完全不是同一组 token。

BGE-M3 的 sparse 部分则是经过多语言训练的神经词汇匹配,因此可以学习跨语言的 lexical correspondence。BGE-M3 的论文报告其支持 100+ 语言,并针对 multilingual / cross-lingual retrieval 做了训练。(arXiv)

而更进一步的 MILCO 就是专门针对这个问题设计的 multilingual learned sparse retrieval,它把不同语言映射到共享的 lexical space。(Hugging Face)


2. Sparse 比 BM25 更“聪明”

BM25 基本上是:

出现了这个词 → 加分
出现次数、文档频率 → 调整分数

而 learned sparse:

Query
 ↓
Transformer
 ↓
token weights
 ↓
inverted index

模型可以学习:

"car accident"
      ↓
automobile
vehicle
collision
crash

也就是说它可以做一定程度的词汇扩展(lexical expansion)

SPLADE 的核心就是这个思想,而且仍然可以使用倒排索引,因此兼具 lexical matching 和神经语义扩展。(GitHub)

这对技术文档尤其有意思。

例如:

query:
mysql connection pool exhausted

document:
database/sql reports "too many connections"

BM25 可能抓不到足够强的词面关系。

Dense 能理解语义,但可能把很多“数据库连接相关”的文档都召回来。

learned sparse 则有机会同时做到:

connection
pool
exhausted
too many connections

这种语义扩展 + lexical precision


3. 一个模型同时得到 dense + sparse

这是工程上的一个很大的优势。

BGE-M3 可以一次推理得到:

dense_vec
lexical_weights
colbert_vecs

官方也明确建议把 dense + sparse 做 hybrid retrieval,再进行 reranking。(Hugging Face)

因此:

BGE-M3
   │
   ├── dense index
   └── sparse index
          ↓
       fusion
          ↓
       reranker

而不是:

Dense Model
      +
BM25 tokenizer/index

维护两套完全不同的语言处理体系。


但它并不是全面碾压 BM25

这是很重要的。

BM25 有一个非常强的优势:

精确匹配极其可靠。

比如搜索:

ERR_CONNECTION_RESET

或者:

Qdrant 1.19.0

或者:

0x80070005

或者:

github.com/foo/bar

BM25:

找到了就是找到了。

神经 sparse:

模型认为这个 token 重要。

中间反而多了一层模型判断。

所以对于:

  • SKU
  • 产品型号
  • 错误码
  • API 名称
  • 类名
  • 函数名
  • IP 地址
  • UUID
  • 版本号
  • 专有名词

BM25 依然非常强。

这也是为什么实际生产系统中,我通常不会建议:

BGE-M3 sparse

完全替代:

BM25

而更倾向于:

Dense + BM25 + Neural Sparse

或者至少:

Dense + BM25

再根据 benchmark 决定是否加入 neural sparse。


还有一个非常现实的区别:索引大小

Dense:

1024 dimensions × float16
≈ 2 KB / document

百万文档就是大约:

2 GB

还没算 ANN index。

BM25:

倒排索引

通常对于文本搜索非常高效。

Neural sparse:

词 → weight
词 → weight
词 → weight
...

同样可以走 inverted index,因此不会像 dense 那样每个文档固定保存 1024/1536 个浮点数。

SPLADE 的研究也专门研究了如何通过稀疏化降低索引和检索成本,并取得接近 BM25 的检索延迟。(GitHub)


如果你的场景是“多语言 RAG”,我会这么选

如果你现在做的是类似:

中文 + 英文 + 日文 + 韩文
        ↓
     RAG / Qdrant

我会优先考虑:

方案 A:简单、成熟

BGE-M3 dense
       +
BM25
       ↓
     RRF
       ↓
   reranker

这是我最推荐的生产起点。


方案 B:追求检索效果

BGE-M3 dense
      +
BGE-M3 sparse
      +
BM25
      ↓
    RRF
      ↓
 multilingual reranker
      ↓
      LLM

尤其适合:

技术文档、知识库、代码文档、混合语言企业资料。


方案 C:如果你非常看重跨语言 lexical retrieval

可以关注 MILCO

它的目标非常明确:解决 multilingual learned sparse retrieval,而且 2026 年的结果已经开始显示它在 multilingual/cross-lingual sparse retrieval 上可以超过 BGE-M3、Qwen3-Embedding 等基线。(Hugging Face)

不过它的生态成熟度目前显然还不能和 BGE-M3 相比。


一句话总结:

Dense + BM25 是“语义搜索 + 精确词匹配”;BGE-M3 这类模型是“语义搜索 + 模型学习的词汇匹配”,最大的价值在于把 lexical matching 也变成了多语言、可泛化的神经检索。

但对于生产 RAG,我暂时不会因为 BGE-M3 sparse 的出现就把 BM25 扔掉——尤其是你的数据里面如果有大量 API、错误码、版本号、代码、产品型号,BM25 依然是一把非常锋利的手术刀。

如果你现在是准备在 Qdrant 里实现这个方案,BGE-M3 的 dense+sparse 在 Qdrant 里的具体索引结构和 prefetch + fusion 设计也挺值得讲,因为它和单纯的 dense + BM25 + RRF 在数据库层面的实现方式不太一样。

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.

支持多语言混合搜索的模型有哪些,与使用稠密向量+BM25混合搜索相比有哪些优劣

“多语言混合搜索模型”是指 一个模型同时产生 dense embedding + learned sparse representation(神经稀疏向量) ,从而不再需要单独维护 dense + BM25 两套模型/索引,目前最值得关注的是 BGE-M3 ,另外还有比较新的 ...