检索增强生成不再另设重排器:同一个9B主干先打分再作答,HotpotQA答案F1提高0.045
核心概要
检索增强生成通常把重排和作答交给两个模型,候选段落因此被处理两遍。Glance 给生成器加一个轻量决策适配器和指针头,让候选段落只做一次共享预填充,再由每个段落自己的短探针给出相关性分数。在 MS MARCO 上微调39分钟后,它在 SciFact 与 NFCorpus 上的 nDCG@10 分别为 0.741 和 0.345,高于 bge-reranker-v2-m3 的 0.721 和 0.326;在 300 道 HotpotQA 问题上,同一基础生成器使用它选出的上下文,答案 F1 比交叉编码器选出的上下文高 0.045。
深度剖析
生成器本身可以兼任重排器,候选段落不必先交给另一个模型打分再交给生成器阅读。 此前的做法是交叉编码器逐对编码查询与段落,或让大模型逐段判断,两种方式都要额外常驻一个模型,并在生成器读到选中上下文之前把候选段落处理一遍。 在 SciFact 与 NFCorpus 两个 BEIR 数据集上,经 39 分钟 MS MARCO 微调后,Glance 的 packed_all 单次预填充取得 nDCG@10 0.741 与 0.345,bge-reranker-v2-m3 为 0.721 与 0.326;这些 BEIR 差异未做显著性检验。
同一份常驻的 9B 主干既负责重排也负责作答,切换模式不改变权重。 重排与生成分属两个模型时,两份权重都要驻留显存,段落也要各自编码。 在 HotpotQA distractor 的前 300 道验证题上,同一基础生成器在适配器关闭时使用 Glance 选出的前三段,答案 F1 为 0.718,交叉编码器选出的前三段为 0.683;在 20 次重排与生成交替中,进入适配器关闭状态的中位耗时为 11 毫秒,离开为 2.8 毫秒,显存占用保持 16.77 GiB。
候选段落只做一次共享预填充,每个段落从缓存分出一条短探针,由指针头把探针转成相关性分数。 逐对编码要为每个查询—段落对单独预填充,逐段判断则要为每个段落各跑一次。 在零样本设置下,packed_all 在 SciFact 上取得 0.715 nDCG@10,接近同一 9B 模型 20 次独立判断的 0.729,而延迟为 614 毫秒对 2210 毫秒;候选数扩展到 200 个、约 43k token 时,trained-long 适配器取得 0.717,同一批 100 条查询上交叉编码器为 0.659。
启示与展望
已展示的范围是两个 BEIR 检索数据集(SciFact 300 条测试查询、NFCorpus 323 条测试查询)、HotpotQA distractor 前 300 道验证题,以及一个混合 9B 主干家族;作者把这一结果定位为概念验证,并指出后续问题是这些收益如何扩展到更大基准与更多主干家族。
评测集规模为数百条查询,只覆盖两个 BEIR 数据集和一个 QA 数据集,且只测了一个混合 9B 主干家族;BEIR 差异未做显著性检验,逐段基线也未用训练后适配器重跑。零样本适配器在候选数超过 50 后退化,在 200 个候选时单次调用显存不足,当前实现下显存随上下文长度增长;激活适配器与缓存复用结果是单种子、100 题,位级缓存校验用的是 0.8B 模型,且缓存续用时生成器看到的是全部段落而非重排后的子集。延迟来自不同且部分共享的 GPU,专用交叉编码器每查询仍然更快。
