当前位置: 首页 > news >正文

【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:目前只支持英文

相关文章:

  • 初识Linux
  • 一周学会Flask3 Python Web开发-SQLAlchemy定义数据库模型
  • 【Linux篇】调试器-gdb/cgdb使用
  • Redis- 切片集群
  • Linux驱动学习之平台总线设备树驱动模型
  • vue3 使用sass变量
  • 基于STC89C52的温度检测系统(DS18B20)
  • 如何使用Webpack打包React项目?
  • idea启动项目报端口被占用
  • leetcode hot100 图论
  • DeepSeek进阶应用(一):结合Mermaid绘图(流程图、时序图、类图、状态图、甘特图、饼图)
  • Python爬虫获取淘宝快递费接口的详细指南
  • 如何高效利用Spring中的@Cacheable注解?
  • STC51 中断允许寄存器 IE
  • 黑马测试python学习
  • 供应链重构:制造业如何借助数字化提升响应速度?
  • 基于Python的电商销售数据分析与可视化系统实
  • 【技术方案设计】H5埋点方案设计以及实现(入门版)
  • 基于PyTorch的深度学习4——使用numpy实现机器学习vs使用Tensor及Antograd实现机器学习
  • 发现U9查询设计上的一个逻辑
  • 深圳市社会保险网站/武汉seo认可搜点网络
  • 微云影视自助建站系统/河南网站seo靠谱
  • 招商银行和建设银行网站功能对比/网络营销师培训
  • 眉山政府网站建设/竞价推广营销
  • 工商注册公司查名/西安seo
  • wordpress首页摘要设置/seo怎样