Press "Enter" to skip to content

在Haystack中增强RAG流水线:引入DiversityRanker和LostInTheMiddleRanker

最新排序器如何优化检索增强生成(RAG)流水线中LLM上下文窗口的利用

自然语言处理(NLP)和长篇问答(LFQA)领域的最新进展在几年前可能听起来像来自科幻领域的东西。谁曾想过,现在我们拥有的系统可以以专家的精确度回答复杂问题,同时可以从大量来源中合成这些答案?LFQA是最近取得重大进展的一种检索增强生成(RAG)方法,它利用了大型语言模型(LLM)的最佳检索和生成能力。

但是,如果我们能进一步优化这个设置呢?如果我们能优化RAG的信息选择和利用方式以提高其性能呢?本文介绍了两个创新组件,旨在通过最新的研究和我们的经验,改进RAG并提供具体的LFQA实例——DiversityRanker和LostInTheMiddleRanker。

将LLM的上下文窗口视为一道美食大餐,其中每个段落都是独特而美味的成分。就像烹饪杰作需要多样、高质量的成分一样,LFQA问答也需要一个上下文窗口,其中包含高质量、多样化、相关且不重复的段落。

在复杂的LFQA和RAG世界中,充分利用LLM的上下文窗口至关重要。任何浪费的空间或重复的内容都会限制我们提取和生成答案的深度和广度。适当地布置上下文窗口的内容是一个微妙的平衡行为。本文介绍了掌握这种平衡行为的新方法,将增强RAG提供精确、全面回答的能力。

让我们探索这些令人兴奋的进展以及它们如何改进LFQA和RAG。

背景

Haystack是一个开源框架,为实际的NLP构建者提供端到端的解决方案。它支持广泛的用例,从问答和语义文档搜索到LLM代理。其模块化设计允许集成最先进的NLP模型、文档存储和当今NLP工具箱中所需的各种其他组件。

Haystack中的一个关键概念是流水线。流水线代表特定组件执行的处理步骤序列。这些组件可以执行各种类型的文本处理,用户可以通过定义数据如何在流水线中流动以及执行其处理步骤的节点的顺序来轻松创建功能强大且可定制的系统。

流水线在基于网络的长篇问答中发挥着至关重要的作用。它始于WebRetriever组件,该组件从网络中搜索和检索与查询相关的文档,并自动将HTML内容剥离为原始文本。但是,一旦我们获取了与查询相关的文档,我们如何充分利用它们呢?我们如何填充LLM的上下文窗口以最大限度地提高答案的质量?如果这些文档虽然高度相关,但是重复且数量众多,有时会超出LLM的上下文窗口怎么办?

这就是我们今天要介绍的组件发挥作用的地方——DiversityRanker和LostInTheMiddleRanker。它们的目标是解决这些挑战,改进LFQA/RAG流水线生成的答案。

DiversityRanker增强了上下文窗口中选择的段落的多样性。LostInTheMiddleRanker通常位于流水线中的DiversityRanker之后,帮助减轻LLM在长上下文窗口中访问相关信息时性能下降的问题。接下来的章节将更深入地探讨这两个组件,并展示它们在实际用例中的有效性。

DiversityRanker

DiversityRanker是一个新颖的组件,旨在增强RAG流水线中上下文窗口选择的段落的多样性。它的工作原理是,多样化的文档集合可以增加LLM生成更广泛和更深入答案的能力。

Figure 1: An artistic interpretation of the DiversityRanker algorithm’s document ordering process, courtesy of MidJourney. Please note that this visualization is more illustrative than precise.

多样性排序器(DiversityRanker)使用句子转换器(sentence transformers)来计算文档之间的相似度。句子转换器库提供了强大的嵌入模型,用于创建句子、段落甚至整个文档的有意义的表示。这些表示,或者嵌入,捕捉了文本的语义内容,使我们能够衡量两个文本之间的相似程度。

多样性排序器使用以下算法处理文档:

1. 首先,使用句子转换器模型计算每个文档和查询的嵌入。

2. 然后,选择与查询语义最接近的文档作为第一个选定的文档。

3. 对于每个剩余的文档,计算其与已选定文档的平均相似度。

4. 然后,选择平均相似度最低的文档作为下一个选定的文档。

5. 这个选择过程继续进行,直到所有文档都被选定,得到一个按照对整体多样性影响最大到对整体多样性影响最小排序的文档列表。

需要注意的技术说明:多样性排序器使用贪婪局部方法按顺序选择下一个文档,这可能不能找到最优的文档整体顺序。多样性排序器更注重多样性而不是相关性,因此应该放在另一个组件(如TopPSampler或另一个更注重相关性的相似性排序器)之后。通过在选择最相关文档的组件之后使用它,我们确保从已经相关文档池中选择多样性文档。

LostInTheMiddleRanker

LostInTheMiddleRanker优化了LLM上下文窗口中选定文档的布局。这个组件是为了解决最近的研究[1]中发现的一个问题,该研究表明LLM在长上下文的中间难以关注相关段落。LostInTheMiddleRanker交替地将最好的文档放置在上下文窗口的开始和结束,使LLM的注意机制能够轻松访问和使用它们。为了理解LostInTheMiddleRanker如何对给定的文档排序,可以想象一个简单的例子,其中文档由1到10的单个数字按升序排列。LostInTheMiddleRanker将按照以下顺序排序这十个文档:[1 3 5 7 9 10 8 6 4 2]。

虽然这项研究的作者关注的是问题回答任务——从文本中提取相关答案的片段,但我们推测LLM的注意机制在生成答案时也会更容易关注上下文窗口开头和结尾的段落。

图2. LLM在上下文的中间难以提取答案,改编自Liu等人(2023)[1]

LostInTheMiddleRanker最好作为RAG流水线中的最后一个排序器,因为给定的文档已根据相似性(相关性)选择并按多样性排序。

在流水线中使用新的排序器

在本节中,我们将讨论LFQA/RAG流水线的实际用例,重点是如何整合多样性排序器和LostInTheMiddleRanker。我们还将讨论这些组件如何与流水线中的其他组件及彼此交互。

流水线中的第一个组件是WebRetriever,它使用编程搜索引擎API(SerperDev、Google、Bing等)从网络检索与查询相关的文档。检索到的文档首先被剥离HTML标签,转换为纯文本,并可选择进行预处理以生成较短的段落。然后,它们依次传递给TopPSampler组件,该组件根据与查询的相似性选择最相关的段落。

在TopPSampler选择一组相关段落后,它们被传递给多样性排序器。多样性排序器根据多样性对段落进行排序,降低了TopPSampler排序的文档的重复性。

然后,选定的文档被传递给LostInTheMiddleRanker。正如我们之前提到的,LostInTheMiddleRanker将最相关的段落放在上下文窗口的开始和结束,同时将排名较低的文档推到中间。

最后,合并的段落被传递给一个PromptNode,它会根据这些选定的段落条件来回答问题的LLM。

图3. LFQA/RAG管道 — 作者提供的图像

新的排名器已经合并到Haystack的主分支中,并将在即将到来的1.20版本中提供,预计于2023年8月底发布。我们在项目的示例文件夹中添加了一个新的LFQA/RAG管道演示。

该演示展示了如何将DiversityRanker和LostInTheMiddleRanker轻松集成到RAG管道中,以提高生成答案的质量。

案例研究

为了展示包含这两个新排名器的LFQA/RAG管道的有效性,我们将使用半打需要详细回答的问题的小样本。这些问题包括:“俄罗斯和波兰之间长期敌意的主要原因是什么?”,“全球和地方尺度上气候变化的主要原因是什么?”,等等。为了回答这些问题,LLMs需要广泛的历史、政治、科学和文化来源,使它们成为我们的用例的理想选择。

比较使用两个新排名器(优化的管道)和不使用它们(非优化的)的RAG管道生成的答案将需要复杂的评估,包括人类专家判断。为了简化评估并主要评估DiversityRanker的效果,我们计算了注入到LLM上下文中的上下文文档的平均成对余弦距离。我们在两个管道中都限制了上下文窗口大小为1024个单词。通过运行这些示例Python脚本[2],我们发现优化的管道中注入到LLM上下文的文档的平均成对余弦距离增加了20-30% [3]。这个成对余弦距离的增加实际上意味着所使用的文档更加多样化(不重复),从而为LLM提供了更广泛、更丰富的段落范围,供其生成答案。关于LostInTheMiddleRanker及其对生成答案的影响的评估将在我们即将发布的文章中进行。

结论

我们探讨了Haystack用户如何通过使用两个创新的排名器DiversityRanker和LostInTheMiddleRanker来增强他们的RAG管道。

DiversityRanker确保LLM的上下文窗口填充有多样化、非重复的文档,为LLM从中综合答案提供了更广泛的段落范围。与此同时,LostInTheMiddleRanker优化了上下文窗口中最相关段落的放置,使模型更容易访问和利用最佳支持文档。

我们的小型案例研究通过计算优化的RAG管道(包含两个新的排名器)和非优化的管道(不使用排名器)中注入到LLM上下文窗口的文档的平均成对余弦距离来证实了DiversityRanker的有效性。结果显示,优化的RAG管道将平均成对余弦距离增加了约20-30%。

我们已经演示了这些新排名器如何可能增强长篇问答和其他RAG管道。通过继续投资和扩展这些和类似的想法,我们可以进一步提高Haystack的RAG管道的能力,使我们更接近创造出更像魔法而非现实的自然语言处理解决方案。

参考资料:

[1] “Lost in the Middle: How Language Models Use Long Contexts” at https://arxiv.org/abs/2307.03172

[2] 脚本: https://gist.github.com/vblagoje/430def6cda347c0b65f5f244bc0f2ede

[3] 脚本输出(答案): https://gist.github.com/vblagoje/738253f87b7590b1c014e3d598c8300b

Leave a Reply

Your email address will not be published. Required fields are marked *