长上下文能取代RAG吗?

  新智元报道

  编辑:alan

  LLM 的上下文长度卷到了恐怖的 1M,RAG 还有存在的必要吗?近日,来自英伟达的研究人员给出了新的答案。

  曾几何时,LLM 还是憨憨的。

  脑子里的知识比较混乱,同时上下文窗口长度也有限。

  检索增强生成(RAG)的出现在很大程度上提升了模型的性能。

  然而,LLM 很快变得强大,上下文窗口长度也迅速膨胀。

  现役的主流大模型,比如 GPT-4o、Claude-3.5、Llama3.1、Phi-3 和 Mistral-Large2 等,都支持 128K 长的上下文,Gemini-1.5-pro 甚至达到了 1M 的长度。

  于是人们不禁要问:在长上下文 LLM 时代,RAG 还有存在的必要吗?

  这样的疑问是有根据的,之前的一项研究就证明了,长上下文(LC)在答案质量方面始终优于 RAG:

  论文地址:https://www.arxiv.org/pdf/2407.16833

  在这勃勃生机、万物竞发的春天里,RAG 当真要失宠了么?

  近日,来自英伟达的研究人员重新审视了这个问题,他们发现, LLM 上下文中检索块的顺序对于答案质量至关重要。

  传统的 RAG 会将检索到的块按照相关性降序排列,但这篇工作表明,保留原始文本中检索块的顺序,能够显著提高 RAG 的答案质量。

  论文地址:https://arxiv.org/pdf/2409.01666

  由此,研究人员提出了保序机制——Order-Preserve RAG(OP-RAG)。

  在 En.QA 数据集上的实验中,OP-RAG 方法(Llama3.1-70B)仅使用 16K 检索到的 token,就实现了 44.43 的 F1-score。

  相比之下,没有 RAG 的 Llama3.1-70B,在充分利用 128K 上下文的情况下,只达到了 34.32 的 F1-score。

  而 GPT-4o 和 Gemini-1.5-Pro 则分别为 32.36 分和 43.08 分。

  上图显示了每组实验平均输入的 token 数量,可以认为 OP-RAG 以很少的资源量达到了超越长上下文的效果。

  ——这也再次证明了 RAG 的独特价值。

  Make RAG Great Again

  RAG 曾帮助早期的 LLM 克服了有限上下文的限制,通过访问最新的信息,显著减少 LLM 的幻觉,提高了事实准确性。

  尽管目前长上下文的研究逐渐获得偏爱,但作者认为超长的语境会导致 LLM 对相关信息的关注度降低,最终使答案质量下降,而本文提出的 OP-RAG 则能够用更少的 token 换来更高的答案质量。

  OP-RAG

  首先通过以下方式表示长上下文:将长文本d切成N个连续且均匀的块c,ci 表示第i块 。给定一个查询q,可以得到 ci 块的相关性得分(通过计算嵌入之间的余弦相似度):

  检索出相似度得分最高的前k个块,但保留这些块在原始长上下文d中的顺序。

  上图直观展示了普通 RAG 与 OP-RAG 之间的差异:一个长文档被切分为 13 块并计算了相似度分数。

  同样是检索相似度得分最高的前 4 个块,Vanilla RAG 按分数降序重排了,而 OP-RAG 保留了块之间的相对顺序。

  实验设置

  研究人员选择了专为长上下文 QA 评估而设计的 EN.QA 和 EN.MC 数据集进行实验。

  En.QA 由 351 个人工注释的问答对组成,数据集中的长上下文平均包含 150,374 个单词,这里使用 F1-score 作为 En.QA 的评估指标。

  EN.MC 由 224 个问答对组成,其注释与 En.QA 类似,但每个问题提供四个答案供选择。

  En.MC 中的长上下文平均包含 142,622 个单词,这里使用准确性作为 En.QA 评估的指标。

  所有数据集上的块大小都设置为 128 个 token,块之间不重叠,使用 BGE-large-en-v1.5 的默认设置来获得查询和块的嵌入。

  消融研究

  上下文长度的影响

  作者评估了上下文长度对 OP-RAG 性能的影响。实验中每个块包含 128 个 token,生成答案时检索块数为 128。

  如下图所示,随着上下文长度的增加,性能最初会提高。这是因为更多的上下文可能有更大的机会覆盖相关的块。

  然而,随着上下文长度进一步增加,答案质量会下降,因为更多不相关的块产生了干扰。

  实验中的 Llama3.1-8B 模型,在 EN.QA 数据集和 EN.MC 数据集上,上下文长度为 16K 时达到性能峰值,而 Llama3.1-70B 模型在 EN.QA 上的最佳性能点为 16K,在 EN.MC 上为 32K。

  Llama3.1-70B 的峰值点晚于 Llama3.1-8B,可能是因为较大规模的模型具有更强的区分相关块和不相关干扰的能力。

  这里有两方面的启示,首先是需要在检索更多上下文来提高召回率,和限制干扰来保持准确性之间进行权衡;

  其次,引入过多的不相关信息会降低模型的性能,这也是当前长上下文 LLM 所面临的问题。

  OP-RAG 和检索块数

  如下图所示,当检索到的块的数量较小(比如8)时,本文提出的保留顺序 RAG 相对于普通 RAG 的优势并不明显。

  而当检索到的块数量很大时,OP-RAG 的性能显著优于普通 RAG。

  在 EN.QA 数据集上,当检索到的块数为 128 时, 普通 RAG 只能实现 38.40 的 F1-score,而 OP-RAG 获得了 44.43 分。

  在 EN.MC 数据集上,检索块数为 192 时,普通 RAG 的 Accuracy 为 81.22,而 OP-RAG 达到了 88.65。

  实验结果

  研究人员将 OP-RAG 与两种类型的基线进行比较。

  第一类方法使用没有 RAG 的长上下文 LLM。如下表所示,在没有 RAG 的情况下,LLM 需要大量 token 作为输入,效率低且成本高。

  相比之下,本文的保序 RAG 不仅显著减少了所需 token 数量,而且提高了答案质量。

  对于 Llama3.1-70B 模型,没有 RAG 的方法在 EN.QA 数据集上,只能实现 34.26 的 F1-score,且平均需要 117K 个 token 作为输入。相比之下,OP-RAG 以 48K 个 token 的输入获得了 47.25 的分数。

  第二类基线采用 SELF-ROUTE 机制 ,它根据模型自我反思将查询路由到 RAG 或长上下文 LLM 。如上表所示,OP-RAG 方法明显优于在 LLM 的输入中使用更少 token 的方法。

  参考资料:

  https://arxiv.org/pdf/2409.01666