提升检索增强生成(RAG)的重排技术(Re-ranking)

云的事情不好说 2024-08-01 18:50:49

在通用人工智能(GenAI)的世界中,我们经常会碰到“检索增强生成”(RAG)这个术语。本质上,RAG 就是给大型语言模型(LLMs)提供额外的相关信息(上下文)以及查询,以帮助它们生成更好、更相关的回答。

搭建一个基础的 RAG 系统并不复杂,但它在提供高度精确的回答方面常常不尽人意。一个主要原因是,这种设置并不总是能为 LLM 提供最精确的上下文。

在下面的架构图中,只有来自向量搜索的 top_k 响应被作为上下文传递给 LLM。但是,如果其他返回的向量包含了与查询更相关的信息会怎样呢?在这种情况下,我们没有将这些额外的相关信息传递给 LLM,这可能导致 LLM 生成的回答不够准确。

这里的问题是,通过只考虑 top_k 响应,我们可能会错过能够提高 LLM 回答准确性的有价值的上下文。这个限制凸显了需要一种更健壮的方法来选择和提供上下文给 LLM,确保它能够访问生成准确回答的最相关信息。

问题是什么?

在 RAG 中,主要关注点是跨大量数据集进行语义搜索,这些数据集可能包含数万份文档。为了执行语义搜索,这些文档被转换成向量,使用相似性度量(如余弦相似性)与查询向量进行比较。

然而,在将文档转换为向量的过程中,存在信息丢失的潜力,因为向量以压缩的数值格式表示内容。此外,较大的文档通常需要被分割成较小的部分以便嵌入到向量格式中,这使得在所有较小部分之间保持上下文变得具有挑战性。

在 RAG 中实现向量搜索时,上下文丢失的问题变得明显。这是因为我们通常只考虑向量搜索的 top_k 结果,可能忽视了低于这个截止点的相关信息。因此,当 LLM 接收到作为上下文的 top_k 结果可能与查询并不完全相关时,它可能导致 LLM 的回答质量较差。

我们不能简单地将所有向量搜索结果发送给 LLM 的原因有两个:

(1)LLM 上下文限制:LLM 对可以传递给它们的文字数量有限制,这被称为“上下文窗口”。尽管最近的进步已经导致了更大的上下文窗口,例如 Antropic 的 Cloude 有 100K tokens 或 GPT-4 有 32K tokens,更大的上下文窗口并不能保证更准确的结果。即使有更大的窗口,LLM 能够有效处理的信息量仍然有限。

(2)LLM 召回性能:LLM 召回指的是模型从给定上下文中检索信息的能力。研究表明,如果上下文窗口中包含太多 tokens,LLM 的召回性能可能会降低。因此,简单地将更多信息塞进上下文窗口并不总是可行的解决方案,因为它可能对 LLM 检索相关信息的能力产生负面影响。

解决方案是什么?

作为改进 RAG 实现的一部分,一个关键步骤是重排(re-ranking)。

重排模型是一种计算给定查询和文档对匹配分数的模型。然后,这个分数可以用来重新排列向量搜索结果,确保最相关的结果被优先放在列表的顶部。

总结来说,最初的步骤是使用向量搜索从大型数据集中检索相关文档,因为它速度快。一旦获得这些相关文档,就应用重排来优先考虑顶部最相关的文档。然后,这些与用户查询紧密对齐的 top-ranked 文档被传递给 LLM,以提高结果的准确性和精确性。

需要注意的是,与向量搜索相比,重排模型通常较慢。因此,它们不用于初始步骤中查找与用户查询相关的文档,以保持效率。

通过实施重排( re-ranking)过程,我们观察到检索信息的相关性有了显著提高。这种增强转化为 RAG 的显著性能提升,因为我们在最大化包含相关信息的同时最小化输入到我们 LLM 的噪声。

使用向量搜索可以实现大规模的高效搜索,而重排的结合确保只有最相关的文档被优先考虑,从而提高了 RAG 框架内结果的整体质量。



0 阅读:1

云的事情不好说

简介:感谢大家的关注