车中草同学 2025-06-01 13:12 河南
RAG-Retrieval提供了全链路的 RAG 检索模型的微调(train)和推理(infer)以及蒸馏(distill)代码,也支持了多种loss,多个检索模型,一些先进的方法和trick。
首先呢,和大家介绍下RAG-Retrieval每个模块完整的功能以及最近的一些工作(学术方面的),最后进行一个总结和展望(R1时代,RAG-Retrieval技术新思路)。
https://zhuanlan.zhihu.com/p/1910467318322004914
1.Embedding模型。
支持的模型:支持微调大多数开源的embedding模型(不管是基于llm的还是基于bert,也可以从裸的语言模型开始训练,只要你的模型支持sentence_transformers,我们就可以训练)。
支持的训练方式:
有监督微调:支持了InfoNCE loss,两种数据,1.query和pos(batch内随机负例,支持cross-device的随机负例,scale up负例个数,来提升效果),2.query和pos以及hard neg。(负例是难负例以及batch内随机负例)
无监督蒸馏:我们实现了stella模型先进的向量蒸馏方法(stella在发布时,在MTEB模型以1.5b击败7b模型,取得英文第一,总共被下载800W次),理论上,你可以通过我们的代码通过蒸馏取得MTEB 第一名。
特别支持:
1.支持多机多卡(deepspeeds和fsdp)。
2.对于有监督微调的infoNCE loss,支持了cross-device的batch内随机负例。(scale up负例个数,来提升效果),在业务场景验证有效果。
3.以上所有的训练方法,我们都支持了动态消减向量维度的俄罗斯套娃表征学习(MRL)(你可以减少开源检索模型的向量维度,减少存储压力,工业界友好),我们做过消融。
4.在学术上,也复现REPLUG类方法,基于LLM偏好监督Fusion-In-Decoder方法来指导RAG embedding微调。
2.Reranker模型
支持的模型:可以微调大多数开源的reranker模型(基于llm的和基于bert的)。
支持的数据格式&训练方式:point-wise和group-wise( point-wise代表监督信号来自单点评估,group-wise 代表监督信号来自列表排序评估,例如 RankGPT,或者模型蒸馏场景)
1. point-wise训练方式:支持了MSE 和BCE loss(二分类以及soft label下的交叉熵loss)。
支持的loss:
2. group-wise训练方式:支持了pairwise RankNet loss 和Listwise Cross Entropy Loss。
pairwise RankNet loss:会自动根据query和doc的score,来组成pair对计算loss,并通过两者的差值来自动对loss加权。
Listwise Cross Entropy Loss:支持传统的listwise loss(一个正例,多个负例),或者蒸馏场景下的使用。
特别支持:
1.支持多机多卡(deepspeeds和fsdp)。
2.我们也基于RAG-Retrieval写了一篇博客,探索 LLM 在 Reranker 任务上的最佳实践:在不同数据量,不同难负例下,探索了 LLM 做 Reranker 任务的两种建模方式(生成和判别),并与 BERT 类模型做比较,同时尝试将 LLM 的 Reranker 模型蒸馏到 BERT 中。其全部代码也发布在RAG-Retrieval中了。
3.学术方面
- Stella和Jasper模型的技术报告:
我们发布了被下载了800w次的stella模型和jasper模型的技术报告,介绍了其中的向量蒸馏技术,目前发布4个月已经有21个引用了,对应的代码已发布在RAG-Retrieval中。
https://arxiv.org/abs/2412.19048
Jasper and Stella: distillation of SOTA embedding models
2. 检索模型的短视陷阱。
我们最近设计了一套评估框架(两个数据集),来衡量当gold answer出现在文档不同位置的内容(前,中,后)时,现代 SOTA 检索模型(包括 BM25、嵌入模型、ColBERT 类模型和重排序器)的性能表现。
https://arxiv.org/pdf/2505.13950
一些结论:
BM25 尽管简单,但由于其位置无关的词匹配机制,展现出了极强的鲁棒性。
随着答案位置向文档后半部分移动,嵌入模型和 ColBERT 式检索器的性能持续下降。 在相同的训练配置下,ColBERT 式方法比单向量嵌入方法更能有效缓解偏差。
重排序模型(例如基于深度交叉注意力的模型)在很大程度上不受“短视陷阱”的影响。
4.总结&展望
总的来说:RAG-Retrieval提供了全链路的 RAG 检索模型的微调(train)和推理(infer)以及蒸馏(distill)代码。
对于微调:RAG-Retrieval 支持微调任意开源的 RAG 检索模型,包括向量模型(bert-based,llm-based embedding)、迟交互式模型(colbert)、重排序模型(bert-based, llm-based reranker)。
对于推理:RAG-Retrieval 专注于重排序(reranker),开发了一个轻量级的 python 包 rag-retrieval,提供统一的方式调用任意不同的 RAG 排序模型(cross encoder, llm-based reranker),并对长文本推理进行优化。
对于蒸馏: RAG-Retrieval 支持向量和排序模型的蒸馏,可以将较大的模型蒸馏到较小的模型中。
高级算法:对于 embedding 模型,支持增加 MRL loss(动态向量维度),以及集成了 Stella 模型的向量蒸馏算法。
多卡训练:支持 FSDP 以及 DeepSpeed。
展望:
1,目前得益于deepseek-r1的横空出世,让RL-based 训练方法如火如荼的发展,在检索领域也有很多应用RL的工作。
一类是很火的deepsearch 或者说search-agent,比如search-r1(直接用强化学习来端到端的让模型边推理,边利用搜索引擎来生成最后的答案)
一类是直接将RL应用于检索任务,比如用rl做reranker,做query改写。
对于直接将RL应用于检索任务的工作,但目前除了做改写任务让人比较惊艳外,其他暂时还没看到 比较惊艳的工作。我们也在探索这个方向,希望后续能和大家分享一些工作吧,这里先分享一些这个方向的论文。
O1 Embedder: Let Retrievers Think Before Action
Rank1: Test-Time Compute for Reranking in Information Retrieval
Rank-R1: Enhancing Reasoning in LLM-based Document Rerankers via Reinforcement Learning
ReasonIR: Training Retrievers for Reasoning Tasks
Rank-K: Test-Time Reasoning for Listwise Reranking
DeepRetrieval: Powerful Query Generation for Information Retrieval with Reinforcement Learning
推荐阅读 欢迎关注我的公众号“PaperAgent”,每天一篇大模型(LLM)文章来锻炼我们的思维,简单的例子,不简单的方法,提升自己。