超越基础RAG:检索加权

在检索增强生成 (RAG) 系统中,通常认为只需将整个文本语料库喂给系统并依赖简单的...

Beyond Basic RAG: Retrieval Weighting

在检索增强生成 (RAG) 系统中,通常认为只需将整个文本语料库喂给系统并依赖简单的检索就能产生不错的结果。但这往往会导致系统在未优先处理关键信息时缺乏特异性,从而无法提供准确的答案。核心问题在于焦点——噪声过多意味着所选块无助于LLM构建准确答案的可能性更高。

在本文中,我们将探讨检索加权如何通过优先处理更相关的信息来解决此问题,最终提高生成响应的可靠性。

为何检索加权如此重要

RAG 可以视为一个语言模型从数据库中提取信息的过程。在此过程中,即使检索方面的微小改进也能直接影响最终答案的质量。这对于需要利用语料库多个部分来形成答案的情况尤其重要,在这种情况下,如果缺少一两个关键块,响应可能会完全错误。

当系统检索到不相关的信息时,可能导致一系列错误,随着时间的推移,这会削弱用户对整个基于 RAG 的系统的信任。

元数据过滤

如果减少噪声很重要,那么元数据过滤可能是目前解决此问题的主流技术。通过利用发布日期、作者或文档类型等属性,可以包含或排除特定块,从而有效缩小数据池。这是一种基于规则的有效方法,用于排除不相关信息并简化检索过程。

然而,元数据过滤并不能总是解决剩余数据中的细微差别。过滤后,您可能仍然会剩下一些技术上相关但在有用性上差异很大的块。此外,硬性过滤(例如,“日期 < 2021”)可能过于激进,无意中删除了文档中有效或互补的部分。

加权(或软过滤)允许采用更细致的方法。它会考虑诸如时新性、来源可靠性和上下文相关性等因素来对块进行评分。这有助于确保检索到的信息具有相关性,并以更贴近预期任务的方式进行优先排序。因此,加权不是应用硬性过滤,而是通过系统自身“无法”确定的预设因素来对检索分数进行加权。

下面我们将探讨一些加权技术,提供示例和简洁解释,说明如何使用“软”方法应用这些因素。

基于时间的加权

在新闻等快节奏领域,信息的关联度高度依赖于其时新性。

基于时间的加权通过考虑信息的时新性来增强传统的检索方法,并应用每日增加的衰减因子来优先处理较新的内容。

通过在排序之前将这些因子与计算出的相似度相乘,较旧的文章会逐渐被降权。

示例

对于加密货币查询,对较旧数据应用衰减因子,今天的信息权重为 1.0,昨天的为 0.98,以此类推。

指数时间衰减:关联度随时间非线性衰减,旧数据逐渐失去权重。来源:作者。

这个概念自然可以扩展以适应特定需求,例如包括自定义趋势或考虑季节性。

基于来源的加权

在信息检索中,来源可信度可能与内容本身同样重要。基于来源的加权允许您根据来源的可靠性和权威性分配权重,确保在排序时优先处理更可信的信息。

为具有既定可信度的来源分配更高的权重可以显著提高检索内容的质量。这在准确性是关键的领域特别有用,例如医学、法律或学术研究。

示例

在研究论文中,手动分配与同行评审员数量或其他有助于论文可信度的因素成比例的权重。

上下文加权

上下文加权涉及分析文档结构并为其各个部分分配不同的权重。这在文档中某些部分固有包含更多相关信息时特别有价值。

通过为更有可能直接回答查询的文档部分分配更高的权重,您可以提高检索系统的精确度。这项技术确保系统不仅检索任何相关文本,而且重点关注文档中最有可能提供有意义答案的部分。

一篇论文的章节在文本分割前通过预处理进行结构化。来源:作者。

示例

  • 研究论文: 侧重于方法论或实现,而非引言、摘要或结论,因为这些部分可能包含冗余信息。
  • 金融新闻: 淡化前言、标题或公司描述,优先处理最新新闻或财务数据。

请注意,这种技术需要在分割文档之前将其分解为分类部分。

💡 Langflow 刚刚发布了与 Unstructured IO 的集成,提供了高级文档解析功能!点击此处查看。

长度归一化

另一种创意加权方法是防止大型语料库在检索中占据主导地位,通过对不同文档的分数进行归一化。

使用固定的分割窗口,较大的文档会产生更多的块,这自然会为同一文档提供更多机会来匹配查询。这可能导致较长的文档在检索过程中占据主导地位,使其结果相对于较小的(有时是更专业的)文档产生偏差。

长度归一化是一种通过调整文档分数来平衡其影响的技术。较长文档的分数会与其长度成比例地缩减(类似于 TF-IDF 长度归一化),确保所有来源——无论大小——都能得到公平体现。

示例

对来自大型综合报告的块的分数应用较小的缩减因子,可以使小型、有针对性的研究对检索结果做出更显著的贡献。


本文是“超越基础 RAG”系列的一部分。阅读更多:超越基础 RAG:相似性 ≠ 关联性

在 Langflow,我们正在构建从 RAG 原型到生产的最快路径。它是开源的,并提供免费的云服务!请访问 https://github.com/langflow-ai/langflow 查看 ✨