增强Haystack的RAG管道:引入DiversityRanker和LostInTheMiddleRanker
2023年08月09日 由 alex 发表
664
0
自然语言处理(NLP)和长格式问答(LFQA)最近的进步在几年前听起来像是科幻小说里的东西。谁能想到,如今我们的系统可以像专家一样精确地回答复杂的问题,同时还能从大量的资源中快速合成这些答案?LFQA 是一种检索增强生成 (RAG),最近利用大型语言模型 (LLM) 的最佳检索和生成功能取得了重大进展。
但如果我们能进一步完善这个设置呢?如果我们可以优化RAG选择和利用信息的方式来提高其性能,会怎么样呢?本文基于最新的研究和我们的经验,介绍了两个旨在改进RAG的创新组件,并从LFQA中提取了具体的例子- DiversityRanker和LostInTheMiddleRanker。
把LLM的上下文窗口想象成一顿美食,每一段都是独特的、美味的食材。就像烹饪杰作需要多样化、高质量的食材一样,LFQA问答需要一个充满高质量、多样化、相关且不重复段落的上下文窗口。
在LFQA和RAG的复杂世界中,充分利用LLM的上下文窗口是至关重要的。任何浪费的空间或重复的内容都会限制我们提取和生成答案的深度和广度。适当地布局上下文窗口的内容是一种微妙的平衡行为。本文提出了掌握这种平衡行为的新方法,这将增强RAG提供精确、全面响应的能力。
背景
Haystack是一个开源框架,为实际的NLP构建器提供端到端解决方案。它支持广泛的用例,从问答和语义文档搜索一直到LLM代理。它的模块化设计允许集成最先进的NLP模型、文档存储和当今NLP工具箱所需的各种其他组件。
Haystack中的一个关键概念是管道的概念。管道表示特定组件执行的一系列处理步骤。这些组件可以执行各种类型的文本处理,允许用户通过定义数据如何流经管道以及执行处理步骤的节点顺序,轻松创建功能强大且可定制的系统。
管道在基于Web的长格式问答中起着至关重要的作用。它从一个WebRetriever组件开始,该组件从Web上搜索和检索与查询相关的文档,自动将HTML内容剥离为原始文本。但是,一旦我们获取了与查询相关的文档,我们如何充分利用它们呢?我们如何填补LLM的上下文窗口,以最大限度地提高答案的质量?如果这些文档虽然高度相关,但重复且数量众多,有时塞满了LLM上下文窗口,该怎么办?
这就是我们今天要介绍的组件发挥作用的地方——DiversityRanker和LostInTheMiddleRanker。他们的目标是解决这些挑战,并改进LFQA/RAG管道生成的答案。
DiversityRanker增强了为上下文窗口选择的段落的多样性。LostInTheMiddleRanker通常位于管道中的DiversityRanker之后,有助于缓解当模型必须在长上下文窗口中间访问相关信息时所观察到的LLM性能下降。
DiversityRanker
DiversityRanker是一个新颖的组件,旨在增强为RAG管道中的上下文窗口选择的段落的多样性。它的运作原则是,多样化的文档集可以提高LLM产生更广泛和更深入的答案的能力。
DiversityRanker使用句子变换来计算文档之间的相似度。句子转换器库提供了强大的嵌入模型,用于创建句子、段落甚至整个文档的有意义的表示。这些表示或嵌入捕获文本的语义内容,使我们能够度量两段文本的相似程度。
DiversityRanker使用以下算法处理文档:
1. 首先使用句子转换模型计算每个文档和查询的嵌入。
2. 然后选择语义上最接近查询的文档作为第一个选择的文档。
3.对于每个剩余的文档,计算与已经选择的文档的平均相似度。
4. 然后选择与已经选择的文档平均而言最不相似的文档。
5. 这个选择过程一直持续,直到所有文档都被选中,从而得到一个文档列表,从对整体多样性贡献最大的文档排序到贡献最小的文档。
DiversityRanker使用贪婪本地方法按顺序选择下一个文档,这可能无法为文档找到最优的总体顺序。DiversityRanker更关注多样性而不是相关性,所以它应该放在另一个组件(如TopPSampler)或另一个更关注相关性的相似性排名器之后。通过在选择最相关文档的组件之后使用它,我们可以确保从已经相关的文档池中选择不同的文档。
LostInTheMiddleRanker
LostInTheMiddleRanker优化了LLM上下文窗口中选定文档的布局。这个部分是一种解决最近研究中发现问题的方法,该问题表明LLM很难在长上下文中关注相关段落。LostInTheMiddleRanker交替地将最佳文档放在上下文窗口的开头和结尾,使LLM的注意力机制能够轻松地访问和使用它们。为了理解LostInTheMiddleRanker如何对给定的文档排序,想象一个简单的示例,其中文档由从1到10的单个数字组成,按升序排列。LostInTheMiddleRanker将按以下顺序对这十个文件进行排序:[1 3 5 7 9 10 8 6 4 2]。
虽然这项研究专注于一个问答任务——从文本中提取答案的相关跨度——但我们推测,LLM的注意力机制在生成答案时也会更容易集中在上下文窗口的开头和结尾的段落上。
LostInTheMiddleRanker最好定位为RAG管道中的最后一个排名,因为给定的文档已经根据相似性(相关性)选择并按多样性排序。
在管道中使用新的排名
我们将研究LFQA/RAG管道的实际用例,重点关注如何集成DiversityRanker和LostInTheMiddleRanker。
管道中的第一个组件是一个WebRetriever,它使用编程搜索引擎API (SerperDev, Google, Bing等)从网络上检索查询相关文档。检索到的文档首先去掉HTML标记,转换为原始文本,并可选地预处理为更短的段落。然后,它们依次传递给TopPSampler组件,该组件根据与查询的相似性选择最相关的段落。
TopPSampler选择相关段落后,将它们传递给DiversityRanker。反过来,DiversityRanker根据段落的多样性对其进行排序,从而减少了TopPSampler排序文档的重复性。
然后将选定的文档传递给LostInTheMiddleRanker。正如我们前面提到的,LostInTheMiddleRanker将最相关的段落放在上下文窗口的开头和结尾,而将排名最差的文档推到中间。
最后,合并的段落被传递给PromptNode, PromptNode会根据这些选定的段落给LLM设定条件,让它回答问题。
新的排名已经被合并到Haystack的主分支中,并将在2023年8月底即将发布的1.20版本中提供。
结论
我们已经探索了Haystack用户如何通过使用两个创新的排名器:DiversityRanker和LostInTheMiddleRanker来增强他们的RAG管道。
DiversityRanker确保LLM的上下文窗口充满了不同的、不重复的文档,为LLM提供了更广泛的段落来综合答案。同时,LostInTheMiddleRanker优化了上下文窗口中最相关段落的位置,使模型更容易访问和利用最佳支持文档。
文章来源:https://towardsdatascience.com/enhancing-rag-pipelines-in-haystack-45f14e2bc9f5