AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


通过Reranking来优化RAG:提升信息检索的精准度
发布日期:2024-11-16 08:12:24 浏览次数: 1743 来源:大模型之路



RAG(Retrieval-Augmented Generation作为一种重要的信息检索与生成技术(RAG(Retrieval Augmented Generation)及衍生框架:CRAG、Self-RAG与HyDe的深入探讨),在帮助用户获取准确答案方面发挥着重要作用。然而,随着数据量的不断增长和用户需求的日益复杂,传统 RAG 系统在检索准确性和上下文相关性方面面临着诸多挑战。Reranking(重新排序)技术的出现为解决这些问题提供了新的思路和方法。通过在 RAG 系统中引入 Reranking 模型,可以对检索到的初始结果进行重新评估和排序,从而提高最终提供给用户的上下文质量,进而提升整个系统的性能。今天我们一起了解一下Reranking 技术。

一、Reranking 介绍

1、基本概念

Reranking 是一种在信息检索系统中用于优化搜索结果排序的技术。在 RAG 系统中,它主要在检索步骤之后、答案生成步骤之前发挥作用。其核心思想是通过更精细的模型对初始检索到的候选结果进行重新评估,以确定它们与用户查询的相关性程度,并根据相关性对结果进行重新排序。

2、与传统检索方法的区别

传统的基于embedding的检索方法通常利用强大的嵌入模型将查询和文档转换为向量表示,然后通过计算向量之间的相似度来获取初始的候选结果集。然而,这些嵌入模型在处理一些复杂的语义关系和用户意图时可能存在局限性。例如,它们可能无法准确捕捉到查询与文档之间的细微语义差异,或者难以理解用户在查询中隐含的比较、总结等意图。
Reranking 模型则不同,它采用了更为复杂的机制来处理查询和文档之间的关系。以本文中使用的 bge-reranker 为例,它采用了交叉编码(cross-encoding)的方法,能够同时处理查询和文档,从而显式地建模查询 - 文档交互。这种方式使得 Reranking 模型能够更好地理解查询与文档之间的语义关联,进而提供更符合用户需求的结果排序。

3、Reranking 模型的训练方式

Reranking 模型通常是在监督学习的框架下进行训练的。训练数据通过人工标注的方式为每个查询 - 文档对赋予相关性分数,模型则学习根据这些标注数据预测相关性分数。这种监督学习的方式使得 Reranking 模型能够学习到人类对于相关性的判断标准,从而在实际应用中提供更准确的结果排序。

二、Reranking在RAG中的应用

  1. 基线RAG模型的建立

在引入Reranking之前,我们首先建立一个基线RAG模型。这个模型使用简单的嵌入式检索方法,从大型文档(如PDF)中提取文本块(Retrieval-Augmented Generation (RAG 检索增强生成) 创新切块策略),并为这些文本块创建嵌入表示,存储在向量数据库中。当用户输入查询时,模型会计算查询的嵌入表示,并在向量数据库中搜索与之最相似的文本块,作为初步检索结果。

  1. Reranking模型的集成

为了优化基线RAG模型的检索结果,我们引入了Reranking模型。这个模型使用Huggingface Transformers库中的预训练序列分类模型(如BAAI/bge-reranker-v2-m3),对初步检索到的结果进行重新排序。具体来说,我们将查询与每个初步检索到的文本块组成对,输入到Reranking模型中,模型会输出一个相关性分数,表示查询与文本块之间的匹配程度。然后,我们根据这些相关性分数对初步检索结果进行排序,得到最终的检索结果。

# Instantiate the rerankerfrom transformers import AutoModelForSequenceClassification, AutoTokenizer
reranker_tokenizer = AutoTokenizer.from_pretrained('BAAI/bge-reranker-v2-m3')reranker_model = AutoModelForSequenceClassification.from_pretrained('BAAI/bge-reranker-v2-m3').to("mps")reranker_model.eval()
# results = ... put code to query your vector database here...# Note that in our case the results are a dataframe containing the text# in the "chunk" column.
# Perform a reranking# Form query-chunk-pairspairs = [[query, row['chunk']] for _, row in results.iterrows()]
# Calculate relevance scoreswith torch.no_grad():inputs = reranker_tokenizer(pairs, padding=True, truncation=True, return_tensors='pt', max_length=512).to("mps")scores = reranker_model(**inputs, return_dict=True).logits.view(-1,).float()
# Add scores to the results DataFrameresults['rerank_score'] = scores.tolist()
# Sort results by rerank score and add new rankreranked_results = results.sort_values('rerank_score', ascending=False).reset_index(drop=True)

三、评估 Reranking 模型的效果

(一)评估指标设定

为了全面评估 Reranking 模型对 RAG 系统的改进效果,设定了多个评估指标。这些指标主要关注 Reranking 模型在以下几个方面的表现:

1、上下文信息丰富度:判断 Reranking 是否为上下文添加了重要信息。例如,是否引入了新的关键事实、概念或观点,使得用户能够获得更全面的信息来回答问题。

2、冗余度降低:检查 Reranking 是否减少了上下文中的冗余内容。冗余信息可能会干扰用户对关键信息的获取,降低系统的效率。通过去除重复或相似的文本块,Reranking 可以提高上下文的质量和可读性。

3、相关性提升:评估 Reranking 是否将最相关的结果排在更高的位置。这是衡量 Reranking 模型性能的关键指标之一,直接关系到用户能否快速获取最有用的信息。具体通过比较 Reranking 前后结果集中最相关文本块的排名变化来衡量。

(二)测试查询分类

为了全面测试 Reranking 模型在不同类型问题上的表现,将测试查询分为以下几类:

1、事实性问题:例如 “什么是刚性运动?” 这类问题通常在文档中有一个明确的答案来源,并且措辞相对直接,甚至可能通过简单的文本搜索就能找到答案。

2、改写后的事实性问题:如 “在某些点云分类方法的架构中,使它们对点的顺序不变的机制是什么?” 这类问题在提及具体术语时不太明确,需要模型具备一定的语义理解能力,例如识别点云分类和架构之间的关系。

3、多源问题:例如 “Co-Fusion 方法与论文中提出的方法相比如何工作?它们有哪些相似之处和不同之处?” 这类问题需要检索多个相关来源,并对这些来源进行比较或综合分析。

4、总结或表格相关问题:比如 “手部分割实验中使用了哪些网络和参数大小?” 这类问题旨在获取文本中的总结性信息或表格内容,测试 Reranking 模型是否能够更好地识别文档中具有总结性质的部分并将其作为相关结果检索出来。

经过Reranking后,结果如下:

通过以上实验,我们可以看到reranking技术是一种有效的优化RAG性能(小模型在RAG(Retrieval-Augmented Generation)系统中的应用:提升效率与可扩展性的新路径)的方法。通过引入reranking技术,我们可以显著提高检索结果的准确性和相关性,从而减少噪声数据的影响并捕捉用户的真实意图。


53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询