检索后精排 — Cross-Encoder Reranking
Skill-RAG-Reranking-CrossEncoder · 08-知识图谱
causalexperimentoptimizationrecommendationragknowledge_graphmulti_agent客服与VOC推荐与搜索知识图谱与RAGMAS与智能体工程WF-C 客服分诊WF-F 动态定价WF-G Listing内容优化
年化 ROI28 万
业务视角
适用角色选品负责人 / 运营负责人 · 数据分析师 · 供应链负责人
适用平台Amazon 品类体系 · 竞品 ASIN 网络分析
什么情况下用品类很多,不清楚品类间的关联,没法做系统性类目扩张规划;竞品矩阵太复杂,品牌/SKU/渠道理不清
成功是什么样的建立品类知识图谱,清晰看到哪些是入口品/引流品/利润品,指导下一步选品扩张方向
业务痛点
1. 解决的问题
RAG 管道的检索阶段(BM25/向量检索)优先保证召回率,会返回大量候选文档(top-50~100)。但这些候选文档与查询的相关性排序往往不准——召回阶段的 Bi-encoder 是独立编码查询和文档,无法捕捉两者间的细粒度交互。
2. 核心算法逻辑
RAG 管道的检索阶段(BM25/向量检索)优先保证召回率,会返回大量候选文档(top50~100)。但这些候选文档与查询的相关性排序往往不准——召回阶段的 Biencoder 是独立编码查询和文档,无法捕捉两者间的细粒度交互。
3. 业务应用场景
业务问题: 母婴出海卖家的客服 FAQ 系统包含 2000+ 条目,覆盖退换货政策、安全认证、喂养指南等话题。混合检索召回 top-20 候选后,LLM 直接基于这 20 条生成答案,但排名靠后的高相关 FAQ 经常被 LLM 忽略(注意力随位置衰减)。
解决方案: 引入 BGE-Reranker-v2 对 top-20 候选重排,将最相关的 5 条 FAQ 放在前面送给 LLM,显著减少 LLM 忽略关键信息的概率。
业务价值: - 客服自动回复准确率提升 21pp - 人工客服介入率从 38% 降至 21% - 年化节省人工客服成本约 ¥28 万(月均 5000 工单 × 17% 减少量 × 人均成本)
4. 输入数据要求
请查看原始代码模板获取输入规格。
5. 输出结果
请查看原始代码模板获取输出规格。
6. 业务价值 / ROI
28 万
7. 代码模板
代码块数量:4 · 路径:未检测到
"""
检索后精排系统(Cross-Encoder Reranking)
基于 arXiv:2310.07554 和 arXiv:2304.09542
功能:
1. Pointwise Cross-Encoder 精排(Mock + 真实模型接口)
2. Listwise LLM 精排(Mock 实现)
3. 融合元数据的混合精排
4. 母婴 FAQ 精排演示 + 3 测试用例
5. NDCG@k 评估指标
Author: paper2skills
Date: 2026-06-06
"""
import math
import re
import ast
from typing import List, Dict, Tuple, Optional, Callable
from dataclasses import dataclass, field
# ============================================================
# 数据模型
# ============================================================
@dataclass
class Candidate:
"""精排候选文档"""
doc_id: str
text: str
title: str = ""
initial_rank: int = 0 # 召回阶段排名
initial_score: float = 0.0 # 召回阶段分数
metadata: Dict = field(default_factory=dict)
def full_text(self) -> str:
return f"{self.title} {self.text}".strip()
@dataclass
class RerankResult:
"""精排结果"""
doc_id: str
rerank_score: float
rerank_rank: int
initial_rank: int
rank_change: int # 正数=上升,负数=下降
document: Optional[Candidate] = None
# ============================================================
# Cross-Encoder 精排器(Pointwise)
# ============================================================
class CrossEncoderReranker:
"""
Pointwise Cross-Encoder 精排器
s(q, d) = BERT([CLS] q [SEP] d [SEP])
8. 论文来源
- 2304.09542
- 2309.15088
- 2310.07554