Agent基础之高级检索技术rerank模型

一、 简介

reranker是在RAG系统中的第二阶段文档过滤器,专门负责对初始检索模块(语义搜索或关键字搜索)检索到的文档内容进行重新排序,也被称为2nd retrieval
进行rerank的目的也很明显,query和文档相关性最高的内容是更希望得到的,进而希望相关性更高的内容优先被选择使用。
在这里插入图片描述

二、 为什么需要rerank

embedding model是将一个sentence的信息压缩到一个768 or 其他dimension的vector,这样会带来一些信息上的损失,同时embedding得到的信息是没有加入query语义的信息。

通过embedding model得到句向量其检索的评价是recall,召回率是指有多少相关文档被检索到,为了不丢失相关信息,recall当然是越大越好,在总检索空间不变的情况下,返回检索到的内容越多,recall越高(根据recall的计算公式)。

但是对于RAG而言,检索到的内容是需要传递给LLM,帮助LLM更好地回答用户的问题。

LLM的输入是存在长度限制的即Context Windows,对于过长的文本是不能全部输入到LLM中,所以返回全部的文档就不现实,同时当上下文越长,LLM的attention机制注意力会被分散到一些和查询相关性不太强的文档上,所以对于输入到LLM中的文档我们是希望相关性更强的文档。

于是rerank这种能提取相关性更大的模型就有了需求。

三、 Bi-Encoder & Cross-Encoder

在这里插入图片描述

上图即为Bi-Encoder的框架:
左侧是查询,查询经过编码器编码之后再经过pooling操作提取出query的特征u,同时在数据库中的内容也会经过编码器编码再经过pooling操作提取处value的特征v,然后u、v特征计算余弦相似度。
Bi-Encoder的优点是计算快,因为存储在db中的value,可以是提前经过编码和pooling的vector。这样当一个查询来临时,就直接和数据库中的vector逐项计算余弦相似度即可。

在这里插入图片描述

Cross-Encoder框架是将query和知识库中的知识进行拼接,然后直接输入到编码器再经过一个分类头即可,这样的优点是可以充分利用上下文信息。当然缺点也很明显,当query来临时,需要将query和value进行拼接,然后送入bert,无法提前将value经过bert预处理好,这就会比较耗时。

结合两者,在初次检索时使用Bi-Encoder提取出相关的 t o p k 1 top_{k_1} topk1然后在rerank时再使用Cross-Encoder重排提取 t o p k 2 top_{k_2} topk2

在这里插入图片描述

四、 总结

概括来说embedding model检索快,但相关性的准确度不高,rerank慢,但相关性的准确度高,两者搭配食用效果更佳

五、 参考内容:

### 如何在Dify中调用Rerank模型 在Dify平台中,为了提升搜索结果的质量和准确性,可以通过集成特定的重排序(rerank模型来优化返回给用户的最终结果列表。虽然直接提及`rerank`模型的具体操作流程并未在现有资料中有详细说明[^2],但是基于该平台对于不同模型的支持以及灵活的工作流编排能力,可以推测出一种可能的方法。 #### 方法概述 假设要在一个已经构建好的Agent基础上加入`rerank`逻辑: 1. **选择合适的LLM**:确保所选的基础语言模型具备良好的语义理解能力和上下文感知特性。 2. **定义中间表示层**:当初始查询经过基础模型处理后,在传递至用户之前引入额外的一轮评估机制——即这里的`rerank`过程。这一步骤可通过自定义函数实现,比如修改或扩展已有的预处理器配置[^4]。 ```python def rerank_results(initial_results, query): """ 对初步检索到的结果集进行重新排序 参数: initial_results (list): 初始获取的结果列表 query (str): 用户输入的问题描述 返回值: list: 经过调整后的更优序排列的结果集合 """ # 假设此处实现了某种算法用于计算各条目与query的相关度得分... ranked_scores = calculate_relevance_score(initial_results, query) sorted_indices = np.argsort(ranked_scores)[::-1] refined_output = [initial_results[i] for i in sorted_indices] return refined_output ``` 3. **更新工作流节点**:将上述定义的功能模块嵌入到现有的Agent交互链条之中,使得每次接收到新的请求时都能自动触发这一环节,从而获得更加精准的回答序列。 4. **持续迭代改进**:随着实际应用场景的变化和技术的发展不断优化内部使用的评分体系及相关参数设置,提高整体系统的性能表现。 需要注意的是,由于官方文档并没有明确指出关于`rerank`特性的具体实施细节,因此以上建议更多是从架构设计角度出发给出的一种通用思路指导而非确切的操作指南。如果有意深入了解这部分内容,则建议关注官方最新动态或者尝试联系技术支持团队寻求帮助。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值