使用 Sentence Transformers 训练和微调稀疏嵌入模型

Hugging Face 发布了一份详细的技术指南,介绍如何使用 Sentence Transformers 库来训练和微调稀疏嵌入模型(sparse embedding models)。这些模型对于混合搜索场景至关重要,通过提供可解释的高维稀疏表示,在传统的词法方法(如 BM25)和稠密嵌入模型(dense embedding models)之间提供了折中方案。

理解稀疏嵌入模型

稀疏嵌入模型将文本转换为高维向量(例如 30,000+ 维),其中大部分数值为零。与使用大部分数值非零的低维向量的稠密模型不同,稀疏模型将激活的维度映射到模型词表中的特定 token。

核心能力

  • 查询与文档扩展: 神经稀疏模型会自动使用语义相关的术语扩展文本(例如,将“天气”扩展为包含“晴朗”或“美丽”),从而解决词汇不匹配问题。
  • 可解释性: 由于每个维度都对应一个 token,用户可以通过解码嵌入来查看哪些单词对相似度评分做出了贡献。
  • 混合搜索潜力: 当稀疏模型与稠密模型结合使用时,能够同时捕捉精确的词法匹配和语义含义,效果非常出色。

稀疏编码器的架构选项

根据具体的用例,开发者可以从 Sentence Transformers 框架中的几种不同架构中进行选择:

SPLADE

SPLADE 模型利用掩码语言模型(MLM)Transformer,随后接一个 SpladePooling 模块。当向 SparseEncoder 类提供 fill-mask 模型时,这是默认架构。

无推理 SPLADE (Inference-free SPLADE)

该架构使用 Router 模块来分别处理查询和文档。它对查询采用轻量级的 SparseStaticEmbedding 以确保近乎即时的推理,而文档则使用完整的 MLM Transformer 和 SpladePooling 进行处理。这对于对查询延迟要求极高的应用场景非常理想。

对比稀疏表示 (CSR)

CSR 模型在稠密 Sentence Transformer 模型之上应用 SparseAutoEncoder 模块。与 SPLADE 不同,CSR 嵌入的规模并不等同于基础模型的词表,这意味着它们无法通过解码 token 直接解释,但对于高维稠密编码器来说非常有效。

微调工作流

微调允许稀疏模型学习特定领域的术语(例如,识别出“cephalalgia”是“headache”的同义词)。训练过程涉及几个核心组件:

训练组件

  1. 模型: 预训练的 Sparse Encoder 或基础模型(如 BERT 或 RoBERTa)。
  2. 数据集: 通过 datasets 库从 Hugging Face Hub 或本地文件(CSV、JSON、Parquet 等)加载的数据。
  3. 损失函数:SpladeLossCSRLoss 等函数,它们在主损失函数中添加稀疏正则化。
  4. 评估器: 使用 NDCG、MRR 或 MAP 等指标评估性能的工具。可用的评估器包括 SparseNanoBEIREvaluatorSparseTripletEvaluator
  5. 训练器: SparseEncoderTrainer 类,它整合所有组件以执行训练循环。

训练技巧与最佳实践

  • 蒸馏: 强大的稀疏模型通常是使用来自更强教师模型(如 Cross-Encoder)的蒸馏来训练的,而不是直接从文本对中训练。
  • 稀疏度监控: 不仅要根据检索准确度评估模型,还要评估其嵌入的稀疏度;低稀疏度会增加存储成本和检索延迟。
  • 多数据集训练: SparseEncoderTrainer 支持使用 MultiDatasetBatchSamplers(例如 ROUND_ROBINPROPORTIONAL)同时在多个数据集上进行训练。

评估与部署

混合流水线中的性能

实验结果表明,结合稀疏和稠密排序(使用如 Reciprocal Rank Fusion 等方法)的效果显著优于任何单一方法。例如,在 NanoMSMARCO 数据集上,混合方法比仅使用稠密模型的基准线在 NDCG@10 上有大幅提升。

向量数据库集成

对于生产环境部署,稀疏嵌入可以索引在向量数据库中,如 Qdrant、OpenSearch、Elasticsearch 或 Seismic。例如,Qdrant 提供对稀疏向量的原生支持,从而实现大规模的高效语义搜索。

Sources