想象你是一家大公司的招聘负责人。每天有成百上千份简历雪片般飞来,HR 系统先用关键词做第一轮海选——这就是 RAG 里的“召回”(Retrieval)。但海选留下的简历依然太多,质量参差不齐,你需要安排一场真正的“面试”来精挑细选——这就是我们要讲的“重排”(Reranking)。 重排环节有三位性格迥异的“面试官”:Cross-Encoder 是一对一的深度面试官,把简历和岗位要求并排放在桌上逐字研读;ColBERT 是高效的标签速配员,先把双方的关键特质做成标签卡再高速比对;LLM-as-Reranker 则是博学的资深专家评审团,用海量知识做综合判断,但请他们的费用也最高。选哪一位面试官,本质上是在精度、速度和成本之间权衡,这正是本文要帮你建立的选型直觉。
重排模型选型直接决定 RAG 精排效果的上限。学透本文,你能根据业务场景快速圈定技术路线,在效果与延迟之间做出有依据的架构决策,这是 RAG 工程师的核心竞争力之一。
可视化演示
本节配有交互动效(进入视口后自动加载,约 3KB)。
重排定位
招聘季的 HR 邮箱总会被简历淹没。第一轮海选用关键词和基础打分把上万份简历筛到一百份,这道工序对应 RAG 的召回阶段——用 BM25 或向量检索快速拉取候选文档。但海选只看“表面匹配”,岗位真正需要的“深度契合”还得靠面试环节来把关,这就是重排存在的意义。
在 RAG 流水线中,重排位于召回之后、生成之前。召回的职责是“宁可错杀一千,不可放过一个”,保证召回率;重排的职责则是“从一百份里挑出最靠谱的五份”,提升精度。两者配合,才让最终送入大模型的上下文质量有保障。
重排的数学本质,是对“查询-文档”对计算相关性分数并排序。给定查询 $q$ 和候选文档集合 $\mathcal{D}$,重排器为每个文档 $d$ 输出分数 $s(q,d)$,最终按分数降序取 Top-K。这个分数既要反映语义相关性,也要具备足够的区分度——就像面试官必须能清晰分辨“优秀”和“良好”的差别。
回到招聘的比喻:召回是把简历库粗筛到一百份,重排则是从这一百份中通过面试精挑出五份。选错了面试官,轻则错过优秀候选人,重则整个招聘流程白费功夫——重排模型的选择,直接决定了 RAG 精排环节的效果上限。
- 构建候选集合召回阶段产出的所有候选文档 $d$ 构成集合 $\mathcal{D}$,重排只对集合内文档打分,不新增文档。
- 逐对打分重排器对每个查询-文档对 $(q, d)$ 计算相关性分数 $s(q,d)$,分数越高代表越相关。
- 取 Top-K按分数降序排列,取前 K 个文档送入生成阶段,控制上下文长度与质量。
Cross编码器
第一位面试官叫 Cross-Encoder,他的风格是一对一深度面谈。候选人一进门,他就把简历和岗位 JD 并排摆在桌上,逐字逐句对照研究——连实习经历的措辞方式和 JD 里的能力要求都要做词级比对。这种“拼接式阅读”让每个词都能和另一侧的所有词充分互动,信息利用最充分,打分也最精准。
技术实现上,Cross-Encoder 把查询和文档拼成一个序列送入 Transformer 编码器。由于两个文本在同一个注意力计算中双向交互,模型能捕捉到“词语间的细粒度语义匹配”。例如查询“深度学习训练技巧”,文档“PyTorch 训练指南”,模型能准确识别“训练”这一共同主题,而非停留在字面重合。
整个打分过程可以用一个带分类头的编码器描述。拼接序列通过多层 Transformer 后,取出 [CLS] 位置的向量,经过线性层和激活函数映射为相关性分数。因为每一对待排序的文档都必须在线拼接、在线计算,所以无法离线预计算——这是它延迟偏高的根源。
Cross-Encoder 就像一位严谨的面试官:深度够,准度高,但一对一面试注定了它无法批量处理。在候选文档数量不多(几十条)且追求精度的场景下,它是值得信赖的选择。
- 拼接输入序列用
[CLS]开头,查询和文档用[SEP]分隔拼接成一个输入序列。 - Transformer 编码编码器对每个词做双向注意力,查询中的每个词都能“看到”文档中的每个词,实现深度交互。
- 分数映射取
[CLS]位置的输出向量,经线性层和 sigmoid 激活,得到 0 到 1 的相关性分数。
ColBERT方案
第二位面试官 ColBERT 是个高效的速配员,他的思路完全不同:不给双方做深度对谈,而是先把简历和 JD 各自拆解成一张张“特质标签卡”——简历上有"Python""PyTorch"“三年经验”,JD 上有“深度学习”“工程能力”。然后快速比对哪些标签能对上,对得越多分数越高。这就是“后期交互”(Late Interaction)的核心思想。
ColBERT 采用双塔结构,查询和文档分别独立编码为 token 级别的向量序列,互不干扰。因为文档向量只取决于文档本身,与查询无关,所以可以在离线阶段批量为全部文档预计算向量并存入索引。在线阶段只需对查询编码一次,再与预计算的文档向量做快速的矩阵运算即可。
后期交互的数学表达非常简洁:查询的第 $i$ 个 token 向量与文档中最相似的 token 向量做点积,再对所有查询 token 求和。这种“取最大”的操作让每个查询词都能找到文档中最相关的对应词,兼顾了匹配的灵活性与计算的高效性。
回到速配员的比喻:ColBERT 牺牲了一部分深度交互的细腻度,换来了“提前准备标签卡”的巨大红利。在延迟敏感、候选数量上百甚至上千的场景下,它是效率和效果的最佳折中点。
- 查询编码查询通过编码器 $\mathbf{E}_Q$ 转为 token 级向量序列,每个查询词对应一个向量。
- 文档编码文档通过另一个编码器 $\mathbf{E}_D$ 转为向量序列,可在离线阶段预计算并缓存。
- 最大点积求和对每个查询向量,与文档全部向量取点积最大值,然后求和,得到最终相似度分数。
LLM重排
第三位面试官是一位请来的资深专家评审团——大语言模型。他们见多识广,不需要提前准备题库,任何岗位需求都能现场给出专业判断。让 LLM 做重排,就是直接把查询和文档一起喂给模型,让它输出“相关”或“不相关”的判断,或者直接生成相关性分数。
LLM-as-Reranker 的优势在于零样本泛化能力。传统的 Cross-Encoder 需要在特定领域数据上微调才能达到最佳效果,而 LLM 凭借庞大的预训练知识,几乎不需要额外训练就能理解各种专业领域的查询意图。对于冷启动的新业务场景,这无疑极具吸引力。
用分类式提示词,模型对输入对输出答案词的概率经 softmax 归一化后即为相关性分数。以二分类为例,"yes" 的 logit 值越大表示越相关。这种打分方式无需修改模型参数,直接调用即可,部署成本主要在前向推理的算力消耗上。
专家评审虽好,但每面试一个候选人都要支付高昂的“咨询费”。LLM 重排的效果上限最高,但只有在精度需求极端苛刻且预算充足的企业级场景中,请评审团才划算。
- 构造提示词设计模板把查询和文档放入提示中,让模型基于任务指令输出判断。
- 获取 logits模型对答案词表(如 yes/no)输出原始逻辑值,代表对两种判断的置信度。
- Softmax 归一化将 logits 经 softmax 转为概率分布,取“相关”类概率作为相关性分数。
效果对比
三位面试官各有千秋,招聘负责人手上需要一张客观的“战绩表”。综合多个公开基准测试(如 MS MARCO Passage Ranking、BEIR)的典型数据,三者在精度和延迟上呈现明显的梯度分布。
从精度看,LLM-as-Reranker 凭借强大的语义理解能力稳居第一,在零样本场景下优势尤为明显。Cross-Encoder 经过领域微调后精度紧随其后,尤其在垂直领域(如法律、医疗)中,微调后的 CE 表现甚至可以逼近大模型。ColBERT 的精度略低于 CE,但显著优于纯向量召回。
延迟方面则是另一个故事。假设在线重排 50 条候选:ColBERT 因为文档向量离线预计算,线上仅需约 5-15 毫秒;Cross-Encoder 必须逐对实时编码,通常需要 20-60 毫秒;而 LLM 每条要跑一次完整前向,即使小模型也要 100 毫秒以上,大模型更是高达秒级。三者的“时间账”差异巨大。
回到面试官战绩表:LLM 是精度王者但慢如蜗牛,ColBERT 是速度明星但精度略逊,Cross-Encoder 则是“六边形战士”——没有明显短板。你的业务更看重哪一项,决定了你应该任命谁做首席面试官。
- 归一化指标将精度和延迟分别归一化到 0-1 范围,使两个维度可比较。
- 加权损失用权重 $\lambda$ 调节延迟和精度的相对重要性,$\lambda$ 越大越重视延迟。
- 选择最优在所有候选模型中选损失最小的,即找到当前场景下的最佳平衡点。
选型决策
掌握了三位面试官的能力差异,接下来要建立一套系统的“选人标准”。招聘不能只看简历,选重排模型也不能只看精度数字,必须把预算约束、延迟目标和数据规模一起放进天平。
第一个约束是延迟预算。如果产品要求在线搜索体验(如对话式问答、电商检索),用户每等一秒都在流失,此时 ColBERT 或小型 Cross-Encoder 是主流选择。如果重排是离线任务(如夜间批量处理文档库),延迟可以放宽,Cross-Encoder 甚至 LLM 都可以纳入考虑。
第二个约束是数据与训练成本。Cross-Encoder 需要人工标注的相关性数据做微调,标注成本不菲;ColBERT 同样需要训练数据但训练更快;LLM-as-Reranker 几乎不需要训练,零样本即可开箱即用。如果你的团队没有标注资源和 GPU 训练预算,LLM 路线在冷启动阶段有独特优势。
选型就像组建面试团队:先明确“面试时间预算”和“能否提前准备题库”,再决定由谁主面。没有绝对最优的模型,只有与业务约束最匹配的决策。
- 判断延迟预算先看线上服务的时延要求,低于 50 毫秒是硬实时场景。
- 判断数据条件有无标注数据决定了能否走微调路线。有标注则 CE 是最佳候选。
- 兜底方案延迟要求宽松或冷启动无数据时,LLM 作为通用兜底方案。
部署成本
请一位面试官不仅看能力,还得算“薪酬”。部署成本是选型中最容易被低估的一环,尤其当你的系统要支撑高并发流量时,模型参数规模直接决定显存需求和单机吞吐上限。
显存估算是第一项硬支出。以 FP16 精度部署为例,模型显存占用约等于参数量的 2 倍(每参数 2 字节)。MiniLM 级别的 Cross-Encoder(约 22M 参数)只需要 44MB 显存,标准 BERT-base 的 CE(约 110M 参数)需要 220MB。而 7B 参数的 LLM 即使量化到 INT8 仍需约 7GB 显存——差距是两个数量级。
吞吐能力是第二项关键指标。单张 A100 80GB 显卡上,小 CE 模型可以支撑高并发批处理,但 LLM 重排的生成式前向推理吞吐极低。更现实的方案是:对海量候选先用轻量模型粗排,再用强模型精排 top-N——形成“粗排减量、精排提质”的两级漏斗。
算过这笔账,你就明白为什么“越大越好”是危险的直觉。7B 参数的 LLM 是能力超群的专家,但你的 GPU 预算未必养得起。选择模型前先列一张成本表,往往比调参更有价值。
- 确定参数量从模型配置中读取参数量 Params,如 110M 即 1.1 亿参数。
- 乘精度字节数FP16 每参数 2 字节,INT8 每参数 1 字节。实际部署常用 FP16 或 INT8。
- 乘以批大小同时处理的样本数会线性放大显存,单条推理的显存乘以 BatchSize 即为峰值需求。
落地实践
选定了面试官,真正的挑战才刚刚开始——如何让面试流程高效运转。工程落地涉及工具选型、评估指标和持续迭代三个环节,每一步都有成熟的范式可循。
工具链方面,sentence-transformers 库原生支持 Cross-Encoder 和 BiEncoder(ColBERT 的简化形态),配合 FlagEmbedding(BGE-reranker)和 ragas 评估框架,可以快速搭起重排评测原型。生产环境推荐用 ONNX Runtime 或 TensorRT 加速 CE 模型推理,LLM 路线则优先考虑 vLLM 等高性能推理框架。
评估重排效果最经典的指标是 nDCG(归一化折损累计增益)。它同时考虑了排序的相关性等级和位置信息:相关文档排在越前面,得分越高;排在越后面,得分折损越大。nDCG 能真实反映“用户看到的结果质量”,比简单的准确率更贴合重排任务的目标。
落地不是一锤子买卖。先建标注集、定评估指标,再跑基线模型、逐步替换升级,最终形成“召回-粗排-精排”的完整漏斗——就像面试流程需要持续复盘招聘质量,重排系统也需要用线上反馈不断迭代。
- 计算折损增益第 $i$ 位的文档相关性为 $\text{rel}_i$,按位置对数折损。
- 计算理想值假设文档按相关性从高到低完美排序,得到 DCG 的理论上限。
- 归一化实际得分除以理想得分,得到 0-1 之间的 nDCG 值。
AI 应用场景
企业知识库问答精排
阶段:RAG 精排环节
解决的问题:企业知识库(如技术文档、合同档案)的向量召回结果往往混杂大量相似但无关的内容。传统方案只靠向量相似度排序,用户问“合同违约条款”,召回结果却混入合同模板和签订流程文档。引入 Cross-Encoder 重排后,模型对查询和候选文档做深度语义比对,精准揪出真正讨论违约责任的条款。
具体案例:某金融科技公司将 10 万份合规文档接入 RAG 系统,召回 Top-50 后使用 BGE-reranker(Cross-Encoder 架构)精排取 Top-5。上线后回答引用准确率从 62% 提升到 89%,用户问题解决率提高 27%。延迟从纯召回时代的 120ms 增加到 320ms,但仍满足客服系统的 500ms 预算。
电商搜索相关性优化
阶段:在线检索精排
解决的问题:电商搜索中,用户输入“男士运动鞋”时,召回结果可能包含“运动鞋收纳盒”“女士运动袜”等边缘相关商品。传统方法依赖点击率排序,冷启动商品没有点击数据。利用 ColBERT 的预计算特性,对全部商品离线构建 token 级向量索引,在线重排延迟可控制在 20ms 以内,同时显著提升语义匹配精度。
具体案例:某跨境电商平台将搜索召回由 2000 条压缩到 200 条后,用 ColBERT 在线重排取 Top-50。相比 BiEncoder 双塔模型,点击率提升 18%,加购率提升 9%,单次检索增加的算力成本仅 1.2 毫秒 GPU 时间。由于支持离线增量更新,新品上架后 5 分钟即可进入重排候选。
法律文档智能审阅
阶段:离线文档精排
解决的问题:法律尽调场景中,律师需要从数万份判决书中找到与案件最相似的判例。这类场景对精度要求极高、对延迟几乎无要求,非常适合 LLM-as-Reranker 的零样本强泛化能力。无需法律领域标注数据,大模型直接理解“本案争议焦点”与历史判例的深层关联。
具体案例:某法律科技公司对 50 万份裁判文书建立 RAG 系统,召回阶段用 BM25+向量混合召回 Top-100,精排用 7B 开源模型(如 Qwen2.5-7B)以分类式提示词打分。离线批处理每天 2000 个查询,单条处理约 1.5 秒,判例匹配准确率达到 91%,显著超过此前微调 BERT 的 78%。GPU 租用成本约每月 3000 元,在可承受范围内。
Python 演示
from sentence_transformers import CrossEncoder, SentenceTransformerimport numpy as np # 模拟 RAG 召回阶段的候选文档query = "深度学习模型训练技巧"candidates = [ "如何有效抑制深度学习模型的过拟合问题", "深度学习训练中的学习率调节与优化策略", "某品牌奶茶店推出新品芒果冰沙", "基于PyTorch的深度学习模型训练完整指南", "今天天气晴朗适合户外活动与郊游", "大模型微调时的参数配置与显存经验分享", "健身爱好者推荐的增肌高蛋白食谱", "深度学习分布式训练框架的对比与选型",] def cross_encoder_rerank(q, docs, top_k=3): """方案一:Cross-Encoder 深度面试——逐对拼接编码""" model = CrossEncoder("cross-encoder/ms-marco-MiniLM-L-6-v2") pairs = [(q, doc) for doc in docs] scores = model.predict(pairs) ranked = np.argsort(-scores)[:top_k] return ranked, scores def colbert_style_rerank(q, docs, top_k=3): """方案二:ColBERT 思路简化版——独立编码后点积""" model = SentenceTransformer("all-MiniLM-L6-v2") q_vec = model.encode(q, normalize_embeddings=True) d_vecs = model.encode(docs, normalize_embeddings=True) scores = d_vecs @ q_vec ranked = np.argsort(-scores)[:top_k] return ranked, scores if __name__ == "__main__": ce_rank, ce_scores = cross_encoder_rerank(query, candidates) cb_rank, cb_scores = colbert_style_rerank(query, candidates) print("=== Cross-Encoder 深度面试(拼接编码)===") for idx in range(len(candidates)): print(f"分数 {ce_scores[idx]:.3f} | {'★' if idx in ce_rank else ' '} | {candidates[idx]}") print("\n=== ColBERT思路 速配(独立编码+点积)===") for idx in range(len(candidates)): print(f"分数 {cb_scores[idx]:.3f} | {'★' if idx in cb_rank else ' '} | {candidates[idx]}") overlap = len(set(ce_rank) & set(cb_rank)) print(f"\nTop-3 结果重合数: {overlap}/3")
pairs = [(q, doc) for doc in docs]构造查询-文档对,CE 需要每一对都拼接后送入模型,这是它无法预计算的原因。scores = model.predict(pairs)CE 对全部候选对批量打分,在线场景下每对都触发一次完整的前向计算。q_vec = model.encode(q, normalize_embeddings=True)ColBERT 思路中查询独立编码为一个向量,归一化后便于点积计算相似度。d_vecs = model.encode(docs, normalize_embeddings=True)文档同样独立编码,生产环境可离线预计算并缓存这批向量。scores = d_vecs @ q_vec用矩阵乘法一次算完所有文档与查询的点积,这就是后期交互“快”的数学来源。
常见误区
误区重排模型肯定越大越好,直接上一个 70B 的 LLM 做重排,效果一定碾压小模型。反正离线任务,不在乎那点时间。
正解模型规模与效果并非简单的正比关系。在领域内微调过的中型 Cross-Encoder(110M 参数)往往能打败零样本大模型——因为微调让模型“懂行话”。而且 70B 模型的部署成本(显存、推理时间、供电)是指数级增长,边际收益却急剧递减。选型时应先看“微调收益”再谈“模型规模”。
为何常见:公开基准测试里大模型排名靠前,容易让人忽略这些结果大多在零样本通用场景下测得,与垂直领域微调模型没有直接可比性。
误区ColBERT 也是 Transformer 编码器,不是和 BERT 差不多吗?它应该就是 Cross-Encoder 换了种训练方式。
正解两者架构差异巨大。Cross-Encoder 是查询和文档拼接后整体编码,属于“早期交互”(Early Interaction),无法预计算文档向量;ColBERT 是双塔独立编码,query 和 doc 各自编码后在 token 层面做后期交互。ColBERT 的文档向量可以离线缓存,“查询”和“文档”两个塔互不干扰,这是它在速度上碾压 CE 的根本原因。
为何常见:两者底层都用 Transformer,表面看起来“同源”。实际区别在于“何时交互”——交互发生在编码前还是编码后,直接决定了能否预计算。
误区现在大模型推理速度越来越快,LLM 做重排只要一两百毫秒,在线场景也能接受吧。
正解单看一个查询确实是一两百毫秒,但重排是批量任务——假设召回返回 50 条候选,LLM 需要对 50 个“查询-文档”对分别打分,总延迟是单次的 50 倍。7B 模型单次推理约 150ms,50 条就是 7.5 秒,完全无法支撑在线检索。ColBERT 处理同样 50 条仅需 15ms,差距是三个数量级。
为何常见:人们容易把“单次推理延迟”误当成“完整重排延迟”,忽略了重排是一种批量计算任务。
误区只要重排模型够强,召回差一点没关系,反正能从候选里挑出正确答案。
正解重排是对已有候选的打分排序,它无法创造候选。如果召回阶段就把正确答案遗漏了,再强的重排器也“无米下锅”。召回率是重排效果的上限,二者是接力关系而非替代关系。工程上要通过评估级联指标(Recall@K 和 nDCG@K)同时监控两端。
为何常见:重排的效果提升太直观(用户能感知排序变化),而召回质量是“看不见的短板”,容易被归因偏差忽略。
面试题
Q1. Cross-Encoder 将查询和文档以什么方式送入模型?
- A.分别编码后向量拼接
- B.拼接成一个序列编码← 正确答案
- C.先各自编码再点积
- D.只编码查询不编码文档
答案:B。Cross-Encoder 的核心特征是“拼接编码”,将查询和文档通过 [CLS]/[SEP] 拼接成一个输入序列整体编码。选项 A 和 C 描述的分别是 BiEncoder 和 ColBERT 的双塔思路,D 不符合任何重排模型的输入要求。
Q2. ColBERT 相比 Cross-Encoder 最大的延迟优势来自哪里?
- A.模型参数量更小
- B.不需要 Transformer 编码器
- C.文档向量可离线预计算← 正确答案
- D.跳过 token 级数据处理
答案:C。ColBERT 采用双塔结构,文档向量只依赖文档本身、与查询无关,因此可离线批量预计算并缓存。在线阶段只需编码查询并做点积运算。选项 A 并不必然成立,B 和 D 与架构事实不符——它依然使用 Transformer 且需要 token 级处理。
Q3. 某知识库问答系统要求在线重排延迟低于 100ms,候选文档约 200 条,无标注数据,最合适的方案是?
- A.Cross-Encoder 加微调
- B.7B LLM 零样本打分为
- C.70B LLM 打分为重排
- D.ColBERT 加预计算索引← 正确答案
答案:D。无标注数据排除需要微调的 Cross-Encoder(A)。200 条候选若用 7B LLM 逐条打分需累计数秒,远超 100ms(B、C 不可行)。ColBERT 支持文档向量离线预计算,在线仅需编码查询并做点积,最符合低延迟且无标注的条件。
Q4. 重排任务指标 nDCG@K 的取值越高,说明什么?
- A.模型准确率越高
- B.排序结果越接近理想排序← 正确答案
- C.模型延迟越低
- D.召回的文档越多
答案:B。nDCG@K 是实际排序的 DCG 与理想排序 IDCG 的比值,越接近 1 说明排序越接近完美。它衡量排序质量而非准确率(A)或延迟(C),与召回文档数量(D)也无直接关系。
Q5. 单张 A100 80GB 显卡用 FP16 部署一个 110M 参数的 Cross-Encoder,不考虑激活显存,理论上最多可同时推理多少个样本?
- A.约 18000 个
- B.约 36000 个← 正确答案
- C.约 400 个
- D.约 110 个
答案:B。FP16 每参数占 2 字节,110M 参数模型静态显存约 220MB。80GB 除以 220MB ≈ 372 个模型副本,实际批处理还要考虑激活显存,因此理论量级在数百个左右。84GB(A)需约 190GB,不成立;36000 个远超显存;110 个过于保守。
Q6. 下列哪些是 LLM-as-Reranker 的优势?
- A.零样本泛化能力强← 正确答案
- B.不需要领域标注数据← 正确答案
- C.推理延迟远低于 ColBERT
- D.对文档规范程度不敏感← 正确答案
答案:ABD。LLM 凭借预训练知识可零样本处理新领域(A),自然免去标注数据需求(B)。对口语化、非规范文档也有较强鲁棒性(D)。选项 C 错误——LLM 推理延迟通常比 ColBERT 高两个数量级。
Q7. 在 RAG 流水线中,重排环节的输入是什么?
- A.全部知识库文档
- B.召回环节产出的候选文档← 正确答案
- C.用户直接提交的查询词
- D.生成模型产出的回答
答案:B。重排位于召回之后、生成之前,它的输入是召回阶段产出的候选文档集合,输出是重新排序后的 Top-K 文档。重排不会处理全量文档(A),那属于检索环节;生成模型产出(D)属于下游环节。
Q8. 某场景需要重排 1000 条候选且必须 200ms 内完成,以下说法正确的有?
- A.ColBERT 比 Cross-Encoder 更适合← 正确答案
- B.LLM 逐条打分会超时← 正确答案
- C.必须改用更小的召回集合
- D.重排模型可以分批并行← 正确答案
答案:ABD。1000 条候选对 Cross-Encoder 意味着 1000 次前向计算,20-60ms/条累计达数十秒,ColBERT 预计算索引后仅需数十毫秒(A 正确)。LLM 逐条打分同样超时(B 正确)。分批并行可降低整体墙钟时间(D 正确)。C 是缓解方案但并非绝对必须——ColBERT 本身就能扛住这个量级。
Q9. Cross-Encoder 相比 ColBERT,以下说法正确的是?
- A.查询与文档在编码阶段即交互← 正确答案
- B.文档向量无法离线预计算← 正确答案
- C.精度通常更高← 正确答案
- D.适合候选量极大的场景
答案:ABC。CE 将查询和文档拼接后编码,交互发生在编码中(A 正确),导致文档向量依赖查询、无法离线缓存(B 正确)。深度交互带来更高精度上限(C 正确)。正因为它无法预计算,候选量极大时成本线性爆炸,不适合超大候选集(D 错误)。
Q10. 重排效果评估中,nDCG 的取值区间是?
- A.0 到正无穷
- B.0 到 1← 正确答案
- C.-1 到 1
- D.0 到 100
答案:B。nDCG 是实际 DCG 与理想 IDCG 的比值,IDCG 是理论上限,因此约比值恒在 0-1 之间。越接近 1 表示排序越接近理想顺序。正无穷(A)、负数(C)和百分制(D)都不符合归一化比值的定义。