在构建稀疏检索系统(特别是SPLADE类模型)时,词汇表远不止是简单的单词列表。它实际上定义了模型的交互空间——词汇表的大小直接决定了稀疏表示的维度。这个发现源于我在训练韩语SPLADE模型时遇到的一系列问题,这些问题最终都追溯到词汇表的选择上。
通过与sentence-transformers维护者和OpenSearch社区的讨论(参见GitHub issue #3431),我们确认了一个关键结论:在基于学习的稀疏检索中,词汇表的选择对系统性能具有决定性影响。这不同于传统的信息检索系统,在那些系统中,词汇表主要影响索引构建效率,而在现代稀疏嵌入模型中,词汇表质量直接关系到表示能力。
关键发现:当使用jhu-clsp/mmBERT-base这类多语言模型时,如果目标语言(如韩语)在词汇表中覆盖不足,会导致表示空间完全崩溃——所有激活值归零,使得检索系统彻底失效。
我选择了四种具有不同词汇表特性的预训练模型进行对比实验,所有模型都在约90万条本地数据集上训练:
| 模型名称 | 词汇量 | 分词器语言特性 | 关键特点 |
|---|---|---|---|
| klue/roberta-base | 32,000 | 韩语专用 | 纯韩语优化 |
| skt/A.X-Encoder-base | 50,000 | 韩语+英语 | 双语混合 |
| Alibaba-NLP/gte-multilingual-base | 250,048 | 70+种语言 | 中等规模多语言 |
| jhu-clsp/mmBERT-base | 256,000 | 1800+种语言 | 超大规模多语言 |
选择这组模型的目的是验证一个假设:词汇表与目标语言的匹配度比模型规模更重要。前两个模型是韩语优化的,后两个则是通用的多语言模型,其中mmBERT-base覆盖语言最多。
所有模型都采用对比学习框架训练,这是当前训练稀疏检索器最高效的方法之一。具体配置如下:
<查询, 正例, 难负例>,通过BM25采样构建这里特别说明正则化权重的选择:文档侧权重略低于查询侧,这是因为文档通常比查询长,需要更温和的稀疏约束以避免过度惩罚。
所有模型的训练损失都呈现良好收敛趋势,但出现了几个关键现象:
gte-multilingual-base的初始震荡:
mmBERT-base的灾难性崩溃:
实战技巧:当发现验证指标突然下跌时,应立即检查激活维度统计。如果同时出现查询和文档激活归零,很可能是词汇表不匹配导致的崩溃前兆。
在MTEB-ko-retrieval基准上的测试结果如下:
| 模型 | Recall@10 | NDCG@10 | MRR@10 | 查询激活维度 | 文档激活维度 |
|---|---|---|---|---|---|
| A.X-Encoder-base | 0.731 | 0.6618 | 0.688 | 284.2 | 279650.6541 |
| roberta-base | 0.6751 | 0.6234 | 0.659 | 328.3 | 942188.0523 |
| gte-multilingual-base | 0.61 | 0.5224 | 0.538 | 51115.8 | 5822728.6814 |
| mmBERT-base | 0.023 | 0.0103 | 0.006 | 0 | 0 |
几个关键发现:
韩语优化模型的优势:
多语言模型的挑战:
完全失败的案例:
通过检查训练日志,我们发现mmBERT-base的崩溃过程分为两个阶段:
阶段一(前2844步):
阶段二(4266步后):
根本原因有三方面:
分词器-语言不匹配:
稀疏正则化的副作用:
归一化问题:
基于这些实验,我总结出以下词汇表选择原则:
语言覆盖优先于模型规模:
警惕过度多语言模型:
评估词汇表质量的方法:
为了避免出现不可逆的表示崩溃,建议:
实时跟踪这些指标:
设置早期停止条件:
对于必须使用多语言模型的情况:
词汇表过滤:
渐进式正则化:
温度调节:
这些实验揭示了一个更深层的理论观点:在稀疏检索中,词汇表实际上定义了查询和文档的交互空间。与传统稠密检索不同,这里的表示空间是离散且由词汇表显式定义的。
这一发现对模型设计有几个重要启示:
词汇表即归纳偏置:
跨语言迁移的挑战:
动态词汇的可能性:
在实际项目中,我现在会首先花时间评估候选模型的词汇表质量,而不是比较它们的架构或参数量。一个简单但有效的做法是:用目标语料中的典型查询和文档样例,检查模型的分词结果是否保持语义完整性。如果发现大量不合理的子词分割,这个模型很可能不适合作为稀疏检索的骨干网络。