news 2026/1/29 16:44:52

3.2 重排序 (Reranker)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
3.2 重排序 (Reranker)

目录

1. 核心概念:什么是重排序?

2. Cross-Encoder 模型:重排序的利器

2.1 整体架构

2.2 输入表示层 (Input Representation)

2.3 Transformer 编码器层

2.4 输出层与目标函数

1.[CLS] 标记的特殊作用

2.分类/回归头

2.5 与双塔模型的对比

3. 训练方式与损失函数

4. BGE-Reranker 介绍

5. 实践步骤:如何在RAG中集成重排序

6. 优势与考量

总结


1. 核心概念:什么是重排序?

在典型的“检索-生成”两阶段流程中:

  1. 召回(Retrieval):使用快速的向量检索模型(如BGE-Embedding, 双塔模型)从海量文档库中初步筛选出Top-K(例如100个)最相关的候选文档。
  2. 重排序(Reranking):使用一个更强大但更耗时的模型,对召回阶段得到的Top-K个候选文档进行精细化评分和重新排序,筛选出最相关的Top-N(例如3-5个)文档,再交给大模型生成最终答案。

为什么需要重排序?

  • 向量检索的局限性:第一阶段的向量检索(双塔模型)追求速度,文档和查询被分别编码为向量,通过向量相似度(如余弦相似度)快速匹配。这种“独立编码”方式无法捕捉查询和文档之间深层次的、细粒度的语义交互,可能导致排序不够精准。
  • 精度提升:重排序模型(通常是Cross-Encoder)虽然慢,但它能对“查询-文档”对进行深度交互和联合编码,更准确地判断两者的相关性,从而将真正最相关的文档排到最前面,提升最终答案的质量和减少大模型的幻觉。

2. Cross-Encoder 模型:重排序的利器

Cross-Encoder是实现精排的核心架构。

2.1 整体架构

它将查询(Query)和文档(Document)拼接成一个完整的序列,输入到Transformer编码器(如BERT、RoBERTa)中。 模型通过自注意力机制,让查询和文档的每一个词元(Token)进行充分的、双向的交互,从而理解它们之间复杂的语义关系。

输入: [CLS] Query [SEP] Document [SEP] ↓ 嵌入层 (Embedding Layer) ↓ Transformer 编码器堆叠 (12-24层,BERT/RoBERTa等) ↓ [CLS] 标记的隐藏状态 ↓ 分类/回归头 (Head) ↓ 输出: 相关性分数
2.2 输入表示层 (Input Representation)

(1)序列构建

格式:[CLS] 用户查询 [SEP] 候选文档文本 [SEP]

例如:[CLS] 机器学习是什么 [SEP] 机器学习是人工智能的一个分支... [SEP]

(2)三重嵌入组合(同bert)

# 伪代码表示 final_embedding = token_embedding + segment_embedding + position_embedding

2.3 Transformer 编码器层

Cross-Encoder 使用标准的 Transformer 编码器堆叠,通常为12或24层。

https://blog.csdn.net/qq_54708219/article/details/148997862?spm=1011.2415.3001.5331https://blog.csdn.net/qq_54708219/article/details/148997862?spm=1011.2415.3001.5331https://blog.csdn.net/qq_54708219/article/details/157139026https://blog.csdn.net/qq_54708219/article/details/157139026

2.4 输出层与目标函数
1.[CLS] 标记的特殊作用
  • 序列的第一个 token[CLS]的最终隐藏状态作为整个序列的聚合表示
  • 经过 Transformer 的多层处理,[CLS]编码了查询和文档交互的全局信息
2.分类/回归头
h_[CLS] = 最后一层Transformer的[CLS]隐藏状态 (维度: 768) 分数 = W·h_[CLS] + b # 线性变换

不同任务形式

  • 二分类sigmoid(分数)→ 相关概率
  • 回归:直接使用分数或经过缩放
  • 多级分类softmax(W·h_[CLS] + b)→ 多个相关性等级
2.5 与双塔模型的对比

特性

双塔模型(Bi-Encoder)

交叉编码器(Cross-Encoder)

编码方式

查询和文档分别独立编码为向量。

查询和文档拼接后联合编码。

速度

极快。适合从百万级文档库中快速召回。

很慢。需要对每个查询-文档对单独计算,适合对少量候选做精排。

精度

相对较低,损失了细粒度交互信息。

非常高。能捕获深层次的语义相关性。

典型应用

大规模召回/检索阶段。

小规模(如Top-100)重排序阶段。

3. 训练方式与损失函数

重排序模型通常使用以下两种范式进行训练:

  1. 点式学习(Pointwise)
    • 将重排序视为一个回归或分类任务。
    • 输入一个(Query, Document)对,模型直接输出一个相关性分数(如0-1之间),或者预测一个相关等级(如“不相关/相关/高度相关”)。
    • 损失函数: 均方误差损失(MSE):
      交叉熵损失(Cross-Entropy):
    • 优点:简单直接。
  2. 列表式学习(Listwise)
    • 更接近实际应用场景。模型一次性看到针对同一个查询的一组候选文档,学习如何为它们进行相对排序
    • 常用损失函数
      • RankNet/ListNet
        学习文档对之间的偏序关系:
        s_i = model(query, doc_i) # 更相关的文档
        s_j = model(query, doc_j) # 较不相关的文档
        i 比 j 更相关的概率:
      • 对比学习损失(如InfoNCE)
        对于一个查询,有一个正样本和多个负样本
        拉大正样本(相关文档)和负样本(不相关文档)得分的差距:
        正样本:s_pos = model(query, doc_pos)
        负样本:s_negs = [model(query, doc_neg) for doc_neg in neg_docs]
        总损失:
    • 优点:能学习到更好的全局排序能力,效果通常优于点式学习。

BGE-Reranker等先进模型通常采用列表式对比学习进行训练,使用难负例挖掘技术,使其在区分高度相似的文档方面表现优异。

4. BGE-Reranker 介绍

BGE-Reranker是智源研究院推出的开源重排序模型系列,是基于Cross-Encoder架构、专为中文和英文优化的大规模预训练重排模型。

  • 特点
    • 强大性能:在MTEB中文重排榜等多个权威评测中名列前茅。
    • 多尺寸:提供BAAI/bge-reranker-base,BAAI/bge-reranker-large,BAAI/bge-reranker-v2-m3等多种尺寸,满足不同精度和速度需求。
    • 易用性:与Transformers库和FlagEmbedding库无缝集成,几行代码即可调用。
    • 多语言:在中文和英文上均表现优异。

5. 实践步骤:如何在RAG中集成重排序

以下是典型的集成步骤:

# 伪代码示例 from transformers import AutoModelForSequenceClassification, AutoTokenizer import torch # 1. 召回阶段 query = "如何学习机器学习?" retrieved_docs = vector_store.similarity_search(query, k=100) # 使用向量库召回Top-100 # 2. 加载重排序模型 model_name = "BAAI/bge-reranker-large" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForSequenceClassification.from_pretrained(model_name) model.eval() # 3. 对召回结果进行重排序 pairs = [[query, doc.page_content] for doc in retrieved_docs] # 构建(Query, Doc)对 with torch.no_grad(): inputs = tokenizer(pairs, padding=True, truncation=True, return_tensors='pt', max_length=512) scores = model(**inputs, return_dict=True).logits.view(-1, ).float() # 获取相关性分数 # 4. 根据新分数重新排序 reranked_indices = scores.argsort(descending=True) # 按分数降序排列 final_top_k_docs = [retrieved_docs[i] for i in reranked_indices[:5]] # 选取新的Top-5 # 5. 将精排后的文档输入给LLM生成答案 context = "\n".join([doc.page_content for doc in final_top_k_docs]) prompt = f"基于以下上下文:\n{context}\n\n请回答:{query}" final_answer = llm.generate(prompt)

6. 优势与考量

优势

  • 显著提升相关性:能将最相关文档的排名大幅提升,是提升RAG答案质量性价比最高的手段之一。
  • 降低大模型负担和幻觉:给大模型更精准的上下文,减少其胡言乱语或依赖错误信息的可能。
  • 模块化设计:与召回和生成阶段解耦,可以独立优化和升级重排序模型。

考量与挑战

  • 计算开销:Cross-Encoder需要对每个(Query, Doc)对进行前向计算,当k较大时(如100),会显著增加延迟。需要在精度和速度间权衡。
  • 上下文长度限制:Transformer有最大长度限制(如512),长文档可能需要截断或分块处理,可能损失信息。
  • 训练数据:高质量的(Query, Relevant Doc, Irrelevant Doc)三元组数据对模型效果至关重要。

总结

引入Cross-Encoder 模型进行重排序,是构建高性能RAG系统的关键优化步骤。它通过查询和文档的深度语义交互,弥补了快速向量检索在精度上的不足,像一道“质检关卡”,确保最终输入给大模型的上下文是最相关、最可靠的。BGE-Reranker等优秀开源模型的出现,使得这一技术变得触手可及,能有效提升问答系统、搜索引擎等应用的核心体验。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/28 15:21:06

Qwen3-4B-Instruct加载缓慢?SSD加速读取部署优化实战

Qwen3-4B-Instruct加载缓慢?SSD加速读取部署优化实战 1. 问题现场:为什么Qwen3-4B-Instruct启动总要等半分钟? 你刚点下“启动镜像”,浏览器里显示“正在加载模型权重……”,进度条纹丝不动。 后台日志刷着Loading l…

作者头像 李华
网站建设 2026/1/29 10:52:01

TurboDiffusion游戏开发应用:NPC动作生成系统搭建指南

TurboDiffusion游戏开发应用:NPC动作生成系统搭建指南 1. 为什么游戏开发者需要TurboDiffusion? 你有没有遇到过这样的问题:为一个开放世界游戏设计上百个NPC,每个都要配独立动作——走路、驻足、挥手、转身、战斗待机……美术团…

作者头像 李华
网站建设 2026/1/28 4:47:42

cv_resnet18_ocr-detection部署报错?常见问题解决步骤详解

cv_resnet18_ocr-detection部署报错?常见问题解决步骤详解 1. 模型与工具简介 1.1 cv_resnet18_ocr-detection 是什么 cv_resnet18_ocr-detection 是一个专为中文场景优化的轻量级 OCR 文字检测模型,基于 ResNet-18 主干网络构建,兼顾精度…

作者头像 李华
网站建设 2026/1/29 13:55:16

JAVA|智能仿真并发项目-并行与并发

文章目录 一、核心定义二、底层原理1. 并发的实现原理(单核 CPU 场景)2. 并行的实现原理(多核 CPU 场景) 三、适用场景四、总结 一、核心定义 概念核心定义比喻并发(Concurrency)同一时间段内处理多个任务…

作者头像 李华
网站建设 2026/1/28 6:19:42

为什么Z-Image-Turbo总启动失败?Supervisor守护进程配置指南

为什么Z-Image-Turbo总启动失败?Supervisor守护进程配置指南 1. Z-Image-Turbo到底是什么? Z-Image-Turbo不是又一个“跑不起来”的AI绘画模型,而是阿里通义实验室真正打磨出来的高效文生图工具。它脱胎于Z-Image,但通过知识蒸馏…

作者头像 李华
网站建设 2026/1/28 16:09:46

麦橘超然影视预演案例:分镜图自动生成系统搭建

麦橘超然影视预演案例:分镜图自动生成系统搭建 1. 为什么影视预演需要“分镜图自动生成”? 你有没有遇到过这样的场景:导演刚讲完一场戏,美术组还在手绘分镜,编剧在改第三版对白,制片却已经催着要确认拍摄…

作者头像 李华