【RAG】检索后排序 提高回答精度

问题: RAG中,有时,最合适的答案不一定排在检索的最前面

user_query = "how safe is llama 2"
search_results = vector_db.search(user_query, 5)for doc in search_results['documents'][0]:print(doc+"\n")response = bot.chat(user_query)
print("====回复====")
print(response)

方案:ReRank

  1. 检索时过召回一部分文本
  2. 通过一个排序模型对 query 和 document 重新打分排序

在这里插入图片描述

# !pip install sentence_transformers
from sentence_transformers import CrossEncoder# model = CrossEncoder('cross-encoder/ms-marco-MiniLM-L-6-v2', max_length=512) # 英文,模型较小
model = CrossEncoder('BAAI/bge-reranker-large', max_length=512) # 多语言,国产,模型较大user_query = "how safe is llama 2"
# user_query = "llama 2安全性如何"
scores = model.predict([(user_query, doc)for doc in search_results['documents'][0]])
# 按得分排序
sorted_list = sorted(zip(scores, search_results['documents'][0]), key=lambda x: x[0], reverse=True)
for score, doc in sorted_list:print(f"{score}\t{doc}\n")
0.918857753276825	In this work, we develop and release Llama 2, a family of pretrained and fine-tuned LLMs, Llama 2 and Llama 2-Chat, at scales up to 70B parameters. On the series of helpfulness and safety benchmarks we tested, Llama 2-Chat models generally perform better than existing open-source models.0.7791304588317871	We believe that the open release of LLMs, when done safely, will be a net benefit to society. Like all LLMs, Llama 2 is a new technology that carries potential risks with use (Bender et al., 2021b; Weidinger et al., 2021; Solaiman et al., 2023).0.47571462392807007	We provide a responsible use guide¶ and code examples‖ to facilitate the safe deployment of Llama 2 and Llama 2-Chat. More details of our responsible release strategy can be found in Section 5.3.0.47421783208847046	We also share novel observations we made during the development of Llama 2 and Llama 2-Chat, such as the emergence of tool usage and temporal organization of knowledge. Figure 3: Safety human evaluation results for Llama 2-Chat compared to other open-source and closed source models.0.16011707484722137	Additionally, these safety evaluations are performed using content standards that are likely to be biased towards the Llama 2-Chat models. We are releasing the following models to the general public for research and commercial use‡: 1.

1. ReRank 的核心作用

在 RAG(检索增强生成)系统中,ReRank 用于优化初步检索结果,解决传统向量检索的两大痛点:

  1. 语义模糊性:向量检索可能返回语义相关但细节不匹配的文档。
  2. 精度天花板:仅依赖向量相似度无法捕捉复杂的语义关联。

示例场景
当用户查询 "how safe is llama 2" 时,向量检索可能返回包含 "llama 2 model architecture""safety guidelines for AI" 的文档,而 ReRank 会进一步识别与 "safety" 直接相关的内容。


2. 代码解析

(1) 安装依赖与导入库
# !pip install sentence_transformers
from sentence_transformers import CrossEncoder
  • sentence_transformers:提供预训练模型和工具,用于文本向量化、排序等任务。
  • CrossEncoder:交叉编码器模型,同时处理查询和文档,计算相关性得分。
(2) 加载 ReRank 模型
# 英文小模型(适合快速实验)
# model = CrossEncoder('cross-encoder/ms-marco-MiniLM-L-6-v2', max_length=512)# 多语言大模型(中文优化,精度高)
model = CrossEncoder('BAAI/bge-reranker-large', max_length=512)
  • 模型选择
    • cross-encoder/ms-marco-MiniLM-L-6-v2: 轻量级英文模型,适合低资源场景。
    • BAAI/bge-reranker-large: 北京智源研究院的中英多语言模型,支持更长文本和复杂语义。
(3) 定义查询与待排序文档
user_query = "how safe is llama 2"
# user_query = "llama 2安全性如何"# 假设 search_results 是初步检索结果
search_results = {'documents': [["Llama 2 introduced safety fine-tuning to reduce harmful outputs.","The model architecture of Llama 2 uses a transformer-based design.","Safety in AI involves rigorous testing and ethical guidelines."]]
}
(4) 计算相关性得分并排序
# 生成 (query, doc) 对
pairs = [(user_query, doc) for doc in search_results['documents'][0]]# 计算得分
scores = model.predict(pairs)# 按得分从高到低排序
sorted_list = sorted(zip(scores, search_results['documents'][0]),key=lambda x: x[0],reverse=True
)# 输出结果
for score, doc in sorted_list:print(f"{score:.4f}\t{doc}\n")

输出示例

0.8762	Llama 2 introduced safety fine-tuning to reduce harmful outputs.0.2345	The model architecture of Llama 2 uses a transformer-based design.0.1287	Safety in AI involves rigorous testing and ethical guidelines.

3. 关键技术:交叉编码器 vs 双编码器

特性双编码器 (Bi-Encoder)交叉编码器 (Cross-Encoder)
工作原理分别编码查询和文档,计算余弦相似度同时编码查询和文档,直接计算相关性得分
速度快(适合大规模检索)慢(适合对少量候选文档重排序)
精度较低(独立编码损失细节)较高(联合编码捕捉细粒度交互)
典型应用初步检索(如向量数据库)精细化排序(如 ReRank)

4. 如何选择 ReRank 模型?

模型名称语言支持精度速度适用场景
cross-encoder/ms-marco-MiniLM-L-6-v2英文英文简单查询,资源受限环境
BAAI/bge-reranker-large中英多语言复杂查询、多语言混合、高精度需求

5. 实际应用中的优化建议

  1. 分块策略

    • 文档分块时保留上下文(如使用 sliding windowoverlap),避免关键信息被截断。
  2. 截断文本

    • 根据模型 max_length(如 512 token)截断输入,优先保留头部和尾部关键信息。
  3. 混合排序

    • 将向量检索得分与 ReRank 得分加权融合,平衡精度与效率:
      final_score = 0.7 * rerank_score + 0.3 * retrieval_score
      
  4. 异步处理

    • 在高并发场景下,将 ReRank 部署为独立服务,避免阻塞主流程。

6. 完整流程示例

# 1. 初步检索(向量数据库)
from vector_db import search  # 假设的向量数据库接口
search_results = search(user_query, top_k=50)# 2. 重新排序
pairs = [(user_query, doc) for doc in search_results['documents']]
scores = model.predict(pairs)
reranked_docs = [doc for _, doc in sorted(zip(scores, search_results['documents']), reverse=True)]# 3. 截断 Top-K 文档输入大模型
context = "\n".join(reranked_docs[:5])
prompt = f"基于以下上下文回答:{context}\n\n问题:{user_query}"
response = llm.generate(prompt)

总结

通过 ReRank 技术,RAG 系统的答案精度可提升 20-30%(尤其在复杂查询场景)。通过 BAAI/bge-reranker-large 模型实现精细化排序,核心步骤包括:

  1. 加载交叉编码器模型。
  2. 对初步检索结果生成 (query, doc) 对。
  3. 计算相关性得分并排序。

在实际应用中,需权衡 精度、延迟、成本,选择适合的模型和分块策略。

一些 Rerank 的 API 服务

  • Cohere Rerank:支持多语言
  • Jina Rerank:目前只支持英文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/30648.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线程安全问题(面试重难点)

这里只是简单介绍以下线程安全,具体情况要结合代码进行判断 线程 是随机调度,及 抢占式执行 ,具有随机性,就可能会让我们的结果出现不同 当我们得到的结果并不是我们想要的时候(不符合需求),就会被认定为BUG,此时就是出现了线程安全问题 那么存在线程不安全的代码就被认为是…

数据结构第七节:红黑树(初阶)

【本节要点】 红黑树概念红黑树性质红黑树结点定义红黑树结构红黑树插入操作的分析 一、红黑树的概念与性质 1.1 红黑树的概念 红黑树 ,是一种 二叉搜索树 ,但 在每个结点上增加一个存储位表示结点的颜色,可以是 Red和 Black 。 通过对 任何…

读书报告」网络安全防御实战--蓝军武器库

一眨眼,20天过去了,刷完了这本书「网络安全防御实战--蓝军武器库」,回味无穷,整理概览如下,可共同交流读书心得。在阅读本书的过程中,我深刻感受到网络安全防御是一个综合性、复杂性极高的领域。蓝军需要掌…

从传统到智能:Node-red工控机助力农业大棚高效监控

智慧农业逐渐成为现代农业发展的主流方向。在这一背景下,农业用工控机(简称“农控机”)作为智慧农业的核心设备之一,正在为农业大棚的智能化管理提供强有力的支持。本文将详细探讨农控机在智慧农业大棚监控中的应用,并…

硬件学习笔记--48 磁保持继电器相关基础知识介绍

目录 1.磁保持继电器工作原理 2.磁保持继电器内部结构及组成部分 3.磁保持继电器主要参数 4.总结 1.磁保持继电器工作原理 磁保持继电器利用永磁体的磁场和线圈通电产生的磁场相互作用,实现触点的切换。其特点在于线圈断电后,触点状态仍能保持&#…

WOA-Transformer鲸鱼算法优化编码器时间序列预测(Matlab实现)

WOA-Transformer鲸鱼算法优化编码器时间序列预测(Matlab实现) 目录 WOA-Transformer鲸鱼算法优化编码器时间序列预测(Matlab实现)预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现WOA-Transformer鲸鱼算法优化编…

K8S学习之基础十九:k8s的四层代理Service

K8S四层代理Service 四层负载均衡Service 在k8s中,访问pod可以通过ip端口的方式,但是pod是由生命 周期的,pod在重启的时候ip地址往往会发生变化,访问pod就需要新的ip地址,这样就会很麻烦,每次pod地址改变就…

R语言的基础命令及实例操作

> T & F [1] FALSE > T & T [1] TRUE > T | F [1] TRUE > F | F [1] FALSE > a <- c(T,F,T) > b <- c(F,F,T) > a & b [1] FALSE FALSE TRUE > a | b [1] TRUE FALSE TRUE 在 R 中&#xff0c;大小写是敏感的&#xff0c;也就是说…

LLM 模型 Prompt 工程

目录 1、Prompt 基础概念 2、Prompt 主要构成 3、Prompt 相关技术 3.1、思维链 3.2、自洽性 3.3、思维树 1、Prompt 基础概念 Prompt 工程是通过设计和优化自然语言提示&#xff08;Prompt&#xff09;&#xff0c;引导LLM生成符合特定任务需求的输出的技术。其核心目标是…

Springboot基础篇(4):自动配置原理

1 自动配置原理剖析 1.1 加载配置类的源码追溯 自动配置的触发入口&#xff1a; SpringBootApplication 组合注解是自动配置的起点&#xff0c;其核心包含 EnableAutoConfiguration&#xff0c;该注解使用AutoConfigurationImportSelector 实现配置类的动态加载。 启动类的注…

【大模型系列】开发工具Cursor使用配置及备忘

开发工具cursor使用过程的配置备忘 最近一段时间大模型开发工具cursor是比较火爆的&#xff0c;其提供的一个比较有价值的特性就是其ai辅助功能&#xff0c;其内部集成了若干大模型 提供免费使用期&#xff1b; 做大模型开发这个话题应该是绕不过的&#xff0c;就像开发java使…

vtkAppendPolyData vtkMultiBlockDataGroupFilter 区别 合并数据

Summary: vtkAppendPolyData vtkMultiBlockDataGroupFilter 区别 两个都是合并数据&#xff1b; 用于处理多块数据集的两种不同的过滤器&#xff08;filters&#xff09;&#xff0c;它们在处理和合并多块数据集方面有不同的用途和实现方式。 Part2:区别 它们的主要区别在于…

C++入门——输入输出、缺省参数

C入门——输入输出、缺省参数 一、C标准库——命名空间 std C标准库std是一个命名空间&#xff0c;全称为"standard"&#xff0c;其中包括标准模板库&#xff08;STL&#xff09;&#xff0c;输入输出系统&#xff0c;文件系统库&#xff0c;智能指针与内存管理&am…

定制开发开源AI智能名片S2B2C商城小程序:以“晒”为桥,构建信任,助力社交新零售飞跃

摘要&#xff1a;随着互联网的深入发展和社交媒体的普及&#xff0c;社交新零售逐渐成为商业领域的新热点。在这个充满机遇与挑战的时代&#xff0c;如何快速建立与陌生消费者的信任关系&#xff0c;成为决定商业成功的关键。本文将以定制开发开源AI智能名片S2B2C商城小程序为研…

【Linux】Linux Progress Pulse-进度条

> &#x1f343; 本系列为Linux的内容&#xff0c;如果感兴趣&#xff0c;欢迎订阅&#x1f6a9; > &#x1f38a;个人主页:【小编的个人主页】 >小编将在这里分享学习Linux的心路历程✨和知识分享&#x1f50d; >如果本篇文章有问题&#xff0c;还请多多包涵&a…

Zypher Network :基于零知识证明方案为 AI 赋予可信框架

Zypher Network 提出的系列方案正逐步成为破解这一困局的关键&#xff0c;其不仅为 LLM 和 AI Agent 等采用提供了一个可信的框架&#xff0c;也为其在更广泛行业中的应用铺平了道路。 LLM 的 “黑盒特性” 像 ChatGPT、DeepSeek、Grok 等大型语言模型&#xff08;LLM, Large …

从Manus到OpenManus:多智能体协作框架如何重构AI生产力?

文章目录 Manus&#xff1a;封闭生态下的通用AI智能体OpenManus&#xff1a;开源社区的闪速复刻挑战与未来&#xff1a;框架落地的现实边界当前局限性未来演进方向 OpenManus使用指南1. 环境配置2. 参数配置3. 替换搜索引擎4. 运行效果 协作框架开启AI生产力革命 Manus&#xf…

深入理解与配置 Nginx TCP 日志输出

一、背景介绍 在现代网络架构中&#xff0c;Nginx 作为一款高性能的 Web 服务器和反向代理服务器&#xff0c;广泛应用于各种场景。除了对 HTTP/HTTPS 协议的出色支持&#xff0c;Nginx 从 1.9.0 版本开始引入了对 TCP 和 UDP 协议的代理功能&#xff0c;这使得它在处理数据库…

Python - 轻量级后端框架 Flask

Flask是什么&#xff1f; Flask是一个轻量级的Python Web框架&#xff0c;用于构建Web应用程序和API。简单、灵活、易扩展&#xff0c;适合小型项目或需要快速开发的应用。 接口的输入和输出 输入&#xff1a;request GET参数、POST JSON数据、POST表单 from flask import…

<论文>MiniCPM:利用可扩展训练策略揭示小型语言模型的潜力

一、摘要 本文跟大家一起阅读的是清华大学的论文《MiniCPM: Unveiling the Potential of Small Language Models with Scalable Training Strategies》 摘要&#xff1a; 对具有高达万亿参数的大型语言模型&#xff08;LLMs&#xff09;的兴趣日益增长&#xff0c;但同时也引发…