使用 Sentence Transformers 训练和微调重新排序模型

Hugging Face 详细介绍了使用 Sentence Transformers 库训练和微调重新排序模型(Cross Encoders)的框架。通过在特定领域的数据上进行训练,开发者可以创建小型、高效的重新排序模型,在专门的检索任务中超越体积大得多的通用模型。

重新排序模型 与 嵌入模型 对比

Cross Encoder 重新排序模型通过将文本对(例如查询和文档)一起输入共享的神经网络,生成单一的输出分数来评估它们的相关性。这与 bi-encoders(嵌入模型)不同,后者会将文本独立嵌入为向量,并通过距离度量计算相似度。

虽然 Cross Encoders 计算成本更高,因为它们需要处理每一对可能的文本,但通常能提供更高的准确率。因此,高性能搜索的行业标准是两阶段的“检索与重新排序”流水线:使用快速的嵌入模型进行初始检索,再使用 Cross Encoder 对前 k 条结果进行精炼。

核心训练组件

训练一个重新排序模型涉及通过 CrossEncoderTrainer 整合的五个主要组件:

1. 数据集

CrossEncoderTrainer 支持 datasets.Datasetdatasets.DatasetDict 对象。数据可以来自 Hugging Face Hub 或本地文件(CSV、JSON、Parquet、Arrow、SQL)。为确保与所选损失函数兼容,数据集必须包含名为 “label”、 “labels”、 “score” 或 “scores” 的标签列,其余列需匹配损失函数所需的输入数量。

2. 硬负样本挖掘

模型性能在很大程度上取决于负样本的质量。 “软负样本” 完全不相关,而 “硬负样本” 是看似相关但实际上不相关的段落。Sentence Transformers 提供了 mine_hard_negatives 函数来识别这些具有挑战性的示例,从而迫使模型在区分上更加精确。

3. 损失函数

损失函数根据可用数据引导优化过程。虽然存在如 LambdaLossListNetLoss 的学习排序损失,但 BinaryCrossEntropyLoss 仍是针对标记对的高效且更简洁的选择。

4. 训练参数

通过 CrossEncoderTrainingArguments 进行自定义,开发者可以调整学习率、批量大小、预热比例以及精度设置(FP16/BF16)。对于使用批内负样本的损失函数,特别推荐使用 batch_sampler=BatchSamplers.NO_DUPLICATES 设置。

5. 评估器

为了在超出简单损失的情况下跟踪性能,Sentence Transformers 提供了多个内置评估器:

  • CrossEncoderClassificationEvaluator:用于二分类或多分类标签。
  • CrossEncoderCorrelationEvaluator:用于相似度分数(例如使用 STSb 数据集)。
  • CrossEncoderRerankingEvaluator:用于使用查询、正例和负例评估重新排序性能。
  • CrossEncoderNanoBEIREvaluator:针对英文重新排序的轻量级评估器。

多数据集训练

CrossEncoderTrainer 支持同时在多个数据集上进行训练,即使它们的格式不同或需要不同的损失函数。这通过一个数据集字典以及可选的损失函数字典来管理。采样策略包括:

  • ROUND_ROBIN:从每个数据集等量抽样,直至其中一个耗尽。
  • PROPORTIONAL:按每个数据集的规模比例抽样,确保所有样本都被使用。

性能评估与结果

在实际应用中,基于 ModernBERT-base 的重新排序模型在 GooAQ 数据集的 99 万查询-答案对上进行微调。使用 BinaryCrossEntropyLoss 和硬负样本挖掘,得到的模型(tomaarsen/reranker-ModernBERT-base-gooaq-bce)在 13 种常见开源重新排序模型中表现最佳,甚至超越了体积最大达其四倍的模型。

GooAQ NDCG@10 结果(前 30 重新排序)

模型 参数 实际 NDCG@10 评估 NDCG@10
Retriever only (No reranking) - 59.12 59.12
BAAI/bge-reranker-large 560M 73.20 77.46
mixedbread-ai/mxbai-rerank-large-v2 1.54B 75.40 80.04
ModernBERT-base-gooaq-bce 150M 77.14 83.51
ModernBERT-large-gooaq-bce 396M 79.42 85.81

技术训练技巧

  • 防止过拟合:Cross Encoders 容易快速过拟合。使用带有 load_best_model_at_endmetric_for_best_model 的评估器,以捕获性能峰值模型。
  • 平衡负样本:仅依赖硬负样本可能导致在较易任务上的性能下降。将随机负样本与硬负样本混合使用可以缓解此问题。
  • 效率:在特定领域数据上微调小型重新排序模型,可在提升搜索准确性的同时,降低推理延迟,相较于使用庞大的通用模型更为高效。

Sources