微信扫码
与创始人交个朋友
我要投稿
点击“蓝字” 关注我们
RAG(Retrieval-Augmented Generation)作为一种重要的信息检索与生成技术(RAG(Retrieval Augmented Generation)及衍生框架:CRAG、Self-RAG与HyDe的深入探讨),在帮助用户获取准确答案方面发挥着重要作用。然而,随着数据量的不断增长和用户需求的日益复杂,传统 RAG 系统在检索准确性和上下文相关性方面面临着诸多挑战。Reranking(重新排序)技术的出现为解决这些问题提供了新的思路和方法。通过在 RAG 系统中引入 Reranking 模型,可以对检索到的初始结果进行重新评估和排序,从而提高最终提供给用户的上下文质量,进而提升整个系统的性能。今天我们一起了解一下Reranking 技术。
Reranking 是一种在信息检索系统中用于优化搜索结果排序的技术。在 RAG 系统中,它主要在检索步骤之后、答案生成步骤之前发挥作用。其核心思想是通过更精细的模型对初始检索到的候选结果进行重新评估,以确定它们与用户查询的相关性程度,并根据相关性对结果进行重新排序。
Reranking 模型通常是在监督学习的框架下进行训练的。训练数据通过人工标注的方式为每个查询 - 文档对赋予相关性分数,模型则学习根据这些标注数据预测相关性分数。这种监督学习的方式使得 Reranking 模型能够学习到人类对于相关性的判断标准,从而在实际应用中提供更准确的结果排序。
二、Reranking在RAG中的应用
基线RAG模型的建立
在引入Reranking之前,我们首先建立一个基线RAG模型。这个模型使用简单的嵌入式检索方法,从大型文档(如PDF)中提取文本块(Retrieval-Augmented Generation (RAG 检索增强生成) 创新切块策略),并为这些文本块创建嵌入表示,存储在向量数据库中。当用户输入查询时,模型会计算查询的嵌入表示,并在向量数据库中搜索与之最相似的文本块,作为初步检索结果。
Reranking模型的集成
为了优化基线RAG模型的检索结果,我们引入了Reranking模型。这个模型使用Huggingface Transformers库中的预训练序列分类模型(如BAAI/bge-reranker-v2-m3),对初步检索到的结果进行重新排序。具体来说,我们将查询与每个初步检索到的文本块组成对,输入到Reranking模型中,模型会输出一个相关性分数,表示查询与文本块之间的匹配程度。然后,我们根据这些相关性分数对初步检索结果进行排序,得到最终的检索结果。
# Instantiate the reranker
from 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-pairs
pairs = [[query, row['chunk']] for _, row in results.iterrows()]
# Calculate relevance scores
with 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 DataFrame
results['rerank_score'] = scores.tolist()
# Sort results by rerank score and add new rank
reranked_results = results.sort_values('rerank_score', ascending=False).reset_index(drop=True)
为了全面评估 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+中大型企业
2024-11-16
从RAG到TAG:探索表增强生成(TAG)的力量
2024-11-15
复旦发布:最佳RAG方案
2024-11-15
破解PDF解析难题:RAG中高效解析复杂PDF的最佳选择
2024-11-15
RAG技术全解析:从基础到前沿,掌握智能问答新动向
2024-11-15
RAG在未来会消失吗?附RAG的5种切分策略
2024-11-15
HtmlRAG:利用 HTML 结构化信息增强 RAG 系统的知识检索能力和准确性
2024-11-15
打造自己的RAG解析大模型:表格数据标注的三条黄金规则
2024-11-13
RAGCache:让RAG系统更高效的多级动态缓存新方案
2024-07-18
2024-07-09
2024-05-05
2024-07-09
2024-05-19
2024-06-20
2024-07-07
2024-07-07
2024-07-08
2024-07-09
2024-11-06
2024-11-06
2024-11-05
2024-11-04
2024-10-27
2024-10-25
2024-10-21
2024-10-21