Provence:用于检索增强生成的高效而强大的上下文修剪器

📖阅读时长:25分钟

🕙发布时间:2025-02-06

近日热文:全网最全的神经网络数学原理(代码和公式)直观解释
欢迎关注知乎和公众号的专栏内容
LLM架构专栏
知乎LLM专栏
知乎【柏企
公众号【柏企科技说】【柏企阅文

检索增强生成(RAG)技术在提升大语言模型(LLMs)生成能力的同时,也面临着长上下文带来的计算开销,以及检索到的无关信息融入生成回复等问题。上下文修剪技术旨在解决这些问题,它会在大语言模型生成内容之前去除检索到的上下文里的无关部分,但目前还没有一个通用模型,能在广泛场景下既高效又稳健,比如上下文相关信息量或长度多变,或是在不同领域进行评估时。

为了解决这一难题,本文提出了Provence(检索相关上下文的修剪与重排序,Pruning and Reranking Of retrieVEd relevaNt ContExts),这是一种用于问答任务的高效且稳健的上下文修剪器,它能根据给定上下文动态确定所需的修剪量,并且可以直接应用于多个领域。

关键贡献

  • 提出了一种训练适应性强、稳健且高效的问答上下文修剪器的方法,并发布了训练好的模型。该方法的三个关键要素为:将上下文修剪表述为序列标记任务、在单一模型中统一上下文修剪和重排序,以及在多样化数据上进行训练。
  • 在多个问答领域对Provence进行测试,结果显示它能直接用于修剪上下文,几乎不会导致性能下降,且成本极低,显著优于基线方法。

    详细贡献

1. 将上下文修剪问题视为序列标记任务

微调DeBERTa模型,对查询 - 上下文对进行编码,并输出二进制掩码,以此过滤掉无关的上下文部分。

训练所用的标签由Llama - 3 - 8B - Instruct自动生成,被称为银标签。这种方法克服了现有上下文修剪器的一些局限性:

  • 该模型能够处理上下文中不同程度的噪声,并选择合适的修剪比例。
  • 查询与上下文句子一起编码(交叉编码),相比像extractive RECOMP这样独立编码查询和上下文句子的方法,能提供更丰富的表示。
  • 使用轻量级编码器,使得该方法比基于大语言模型或抽象方法更高效。

    2. 统一重排序和上下文修剪

    在RAG流程中,不再将重排序和上下文修剪视为不同步骤。在Provence中,重排序和修剪可以在一次前向计算中完成,这样就消除了上下文修剪带来的计算开销,使得Provence几乎“零成本”。

    数据准备

    1. 训练数据

  • MS MARCO文档排名数据集的训练集,包含37万个查询。MS MARCO数据集是从网络爬取的320万份文档,领域多样,这是最终模型对不同领域具备稳健性的必要条件,该数据集常被用于训练检索器和重排序器。
  • Natural Questions的训练集,包含8.7万个查询。

    2. 数据处理

  • 将MS MARCO文档拆分为由N个连续句子组成的段落(N是1到10之间的随机整数),创建检索数据集。
  • 对于每个问题,使用由SPLADEv3检索器和DeBERTa - v3重排序器组成的强大检索流程,检索出前5个相关段落。

    3. 银标签生成

  • 给定一个问题和检索到的段落(上下文),将段落拆分为句子,然后让Llama - 3 - 8B - Instruct选择与该问题相关的句子。
  • 要求大语言模型仅使用给定上下文中的信息回答问题,如果没有相关信息则输出“No answer”。

    训练与推理

    1. Provence的训练

    作为一个基于令牌的二分类器进行训练,基本事实标签来自银数据标注,该模型可以作为一个独立的修剪器使用,即检索 >> 重排序 >> Provence(独立)>> 生成。

    2. 统一压缩和重排序

    重排序头为BOS令牌输出一个标量预测,而修剪头为段落令牌输出每个令牌的预测,如本文第一张图所示。

建议在标记目标上进一步微调预训练的重排序器,同时添加一个排名“正则化器”以保留初始的重排序能力。

正则化器是对初始重排序器重排序分数的均方误差损失,可以看作是一个直接的逐点分数蒸馏过程,其中初始模型作为教师模型,这种方法在信息检索中已被证明非常有效。

最终的损失函数如下:

其中,N是数据点(查询 - 段落对)的数量,$x_{n}$是由$L_{n}+1$个输入令牌组成的序列(连接查询、段落并在第0位置添加BOS),$z_{n}$是模型输出的$L_{n}+1$个预测序列,$y_{n}$是用于上下文修剪的$L_{n}$个目标二进制标签序列,$s_{n}$是教师分数(初始重排序器),$z_{n,0}$是从BOS表示预测的排名分数。

对于统一模型,重排序和上下文修剪只需要编码器进行一次前向计算,即检索 >> Provence(带重排序)>> 生成,这使得上下文修剪在执行时间上几乎没有额外开销。

3. 使用Provence进行推理

将问题和检索到的段落连接起来输入Provence,它会输出每个令牌包含在最终上下文中的概率,在统一模型的情况下还会输出段落分数。

使用阈值T对令牌概率进行二值化(保留或舍弃),这会直接影响压缩率。

实验

1. 结果

上下文修剪器通常只在有限领域的数据上进行测试,例如使用维基百科数据集。本研究的一个重要方面是在一系列问答领域评估上下文修剪效果。

下图展示了在不同问答数据集和上下文修剪方法下,压缩率(效率)和大语言模型评估性能(质量)之间的权衡:

从结果中可以得出以下关键结论:

  • 在相似的压缩率下,Provence在各种修剪方法中性能最高。
  • Provence优于那些计算量更大的方法,如LLMLingua模型,这表明它在保证效率的同时并没有牺牲效果。
  • Provence是唯一一种在所有数据集上都能实现高压缩率且不会(或仅有轻微)导致性能下降的方法。此外,对于一些数据集,如PopQA,使用Provence进行修剪由于过滤了噪声,反而提升了性能。
  • Provence的修剪率会根据数据集自动在50%到80%之间变化,这表明相同的T值在所有考虑的领域都能很好地工作,说明Provence对超参数的选择具有稳健性。

在衡量效率方面,下表报告了不同修剪方法所需的压缩时间和MFLOPS:

修剪方法压缩时间MFLOPS
LongLLMLingua(基于Llama - 2 - 7B - chat)最慢-
RECOMP abstr.-比Provence少,但实际中自回归特性使其较慢
Provence(统一模型)几乎无额外开销(作为重排序步骤的一部分)-

2. 分析

  • 对上下文中相关信息位置的稳健性:设计了一个“大海捞针”实验,用于在简单示例中测试Provence的性能,并评估其对输入上下文中相关信息位置的稳健性。

    下图展示了“大海捞针”测试,该测试可以控制真实句子在上下文中的位置:

在大多数情况下,Provence不会选择任何无关句子,对于较简单的(1个句子)和较难的(2个句子)“目标句子”,结果相似,这显示了它在检测相关句子数量方面的灵活性。

  • 对可变数量相关句子的适应性:下图展示了银预测器(LLaMA - 3 - 8B - Instruct)和Provence选择句子数量的比较。热力图按行归一化:位置$(i, j)$的单元格表示银预测器修剪为$i$个句子的上下文中,被Provence修剪为$j$个句子的比例。

结果表明,在大多数情况下,Provence检测到的相关句子数量与银标签预测值接近,而extractive RECOMP总是选择预先设定数量的句子。

  • 对上下文粒度的稳健性: 下图展示了在不同上下文长度设置下测试Provence的情况。所有实验均使用统一的Provence,$T = 0.1$。

Provence在所有情况下都表现出色,修剪后的上下文性能与使用原始上下文的性能相近。

  • 重排序有效性:下表比较了基线重排序方法和统一Provence(其训练基于前者)的重排序性能。

结果表明,联合训练过程(同时针对修剪和排序任务)能够学习到一个保留初始重排序能力的上下文修剪器。

  • 在不同设置中的适用性:下图展示了Provence在可变检索 - 生成设置中的适用性,其结果与实验第一部分“结果”中报告的结果相似。

结论

本文介绍了Provence,这是一种稳健、适应性强且高效的问答上下文修剪器,它既可以与重排序功能集成在一个模型中,也可以作为轻量级的独立模型使用。

与以往的提取式方法不同,Provence能根据给定上下文动态检测所需的修剪比例,并且可直接应用于各种问答领域。

实验表明,Provence在修剪上下文时几乎不会导致性能下降,在某些情况下,由于去除了上下文噪声,甚至还能提升性能。

论文链接https://arxiv.org/abs/2501.16214

模型链接https://huggingface.co/naver/provence-reranker-debertav3-v1

本文由mdnice多平台发布


柏企科技圈
1 声望0 粉丝

时间差不多了,快上车!~