3.1 高级检索技术:混合检索与查询重写


3.1 高级检索技术:混合检索与查询重写

本节摘要:检索优化是 RAG 提效的第一现场。本节讲四项核心技术——语义检索的深化(嵌入模型与向量库的选型逻辑)、混合检索(关键词与语义结果的加权融合)、查询重写(扩展、纠错、意图明确、模型重写四种手法)、上下文感知检索(历史查询、对话历史、用户画像三类信息源)。每项技术都给出适用条件与代价,帮你按需引入而不是全量堆砌。读完你应当能把检索命中率作为可管理、可优化的指标来经营。

学习目标

阅读完本节,你应当能够:

  1. 说明语义检索的实现三要素(嵌入模型、向量数据库、相似度计算);
  2. 实现关键词与语义结果的加权融合,并理解权重调节的直觉;
  3. 针对口语化查询选择合适的重写手法;
  4. 把对话历史与用户画像融入检索过程;
  5. 判断自己的系统最该先上哪项技术。

一、先问一句:你的检索差在哪

"检索不准"是个笼统的抱怨,拆开是三种病:查不到(该命中的没命中,召回率低)、排不对(命中了但排在后面,被 Top-K 截掉)、理解偏(用户说的和库里写的根本不是一个表述方式)。四项技术各治各的病:语义检索治理解偏,混合检索治查不到,查询重写治理解偏加查不到,上下文感知治理解偏。诊断先行,再往下读。

二、语义检索的深化

第 2 章讲过语义检索的骨架,这里补三块深化内容。

嵌入模型选型:通用场景用主流句子嵌入模型(如各类 Sentence-BERT 系模型)即可;领域术语密集(医疗、法律)时,用领域语料微调嵌入模型,收益常常显著——检索器和生成器甚至可以联合训练,端到端优化整个框架。

向量数据库:FAISS、Milvus、Chroma、Weaviate 各有生态位,选型原则第 2 章已述——规模未及瓶颈前,别在产品对比上空耗。

分块的再强调:语义检索的上限有一半在分块。语义分块(按句子段落边界而非字符数切)加重叠分割(相邻块保留一至两成重叠),是两项回报最稳的改造。

三、混合检索:两路合围

关键词检索和语义检索的互补性,第 2 章已经摆过擂台。混合检索就是把两路结果融合:BM25 一路、向量相似度一路,各自的得分归一化后加权求和,按融合分排序。

图:混合检索的融合逻辑

图:混合检索的融合逻辑

融合的工程细节有两处容易踩坑。其一,分数归一化:BM25 分数和余弦相似度量纲不同,直接加权没有意义,先各自归一到同一区间。其二,权重设定:精确查询多的场景(型号、编号、法条)偏关键词权重,开放表述多的场景偏语义权重;更精细的做法是用排序学习模型学出权重。线性加权是性价比最高的起点。

混合检索之上还可以加一层重排序:用交叉编码器模型对融合后的前几十个候选逐个精细打分。它的精度高于双向量的相似度(因为查询和文档一起送进模型做深度交互),但计算贵,所以只精排头部候选——先粗筛后精排,两级漏斗。

四、查询重写:把口语变成检索友好的形态

用户的真实查询是什么样?"那个报错咋回事"、"上次说的那个方案靠谱吗"。直接拿去检索,命中率惨淡。查询重写有四种手法:

手法 做法 治什么
同义词扩展 用词典或模型把关键词扩展为近义表述 换说法查不到
拼写纠错 编辑距离等算法修正错别字 输入错误
意图理解 用实体识别、关系抽取补全上下文与约束 意图模糊
模型重写 让大模型直接改写为更具体明确的查询 综合治理

模型重写是当前的主流做法——一句话指令("把以下用户查询改写为适合知识库检索的完整、具体的问题")就能让大模型把残缺口语补成规范问句。代价是多一次模型调用、多一点延迟,对查询量大的系统要算这笔账。

一个相关的进阶技巧是查询分解:把复杂问题拆成多个子问题分别检索再合并。比如"对比 A 和 B 两个产品的退款政策"拆成 A 的政策、B 的政策两个子查询。多跳检索也属于这一族:先检索一轮,用第一轮结果改写查询再检索一轮,逐步逼近需要串联多份文档才能回答的问题。

五、上下文感知检索

对话场景里,当前这句话往往不是完整的意思。"那退货呢?"——检索器必须知道上文在聊订单。上下文感知检索引入三类信息:

  • 历史查询:同一用户近期的查询串,捕捉兴趣走向;
  • 对话历史:多轮对话的完整上下文,把指代补全("那"指什么)后再检索;
  • 用户画像:兴趣、偏好、知识背景,用于结果个性化。

实现上最直接的做法是把上下文与当前查询融合后再编码检索——比如让模型先把"那退货呢"结合对话历史改写成"订单签收后七天内退货的流程是什么",再走向量检索。查询重写与上下文感知在工程上常常合为同一个步骤。

六、重排序的细节与一个完整的优化案例

重排序值得再给一节篇幅,因为它是"投入产出比最高"却最常被跳过的技术。展开讲三点。

为什么交叉编码器更准? 向量检索是"背对背"打分——查询和文档各自编码成向量,再算距离,两者从未见过面。交叉编码器是"面对面"打分——查询和文档拼在一起送进模型,逐词交互地判断相关性,能捕捉"词相同但所指不同"这类细粒度差异。代价是每个候选对都要跑一次模型,所以只对头部候选(几十个)精排,不能全库扫。

重排序器的选型:开源的交叉编码器模型即插即用,效果立竿见影;追求更高精度可以上通用大模型做重排序(给模型看查询和候选,让它输出相关性判断),成本更高但判断力更强。工程上常见"轻量交叉编码器日常跑、大模型重排给高价值查询"的分层配置。

一个完整案例串起本节全部技术。 某企业知识库助手,初期朴素向量检索,用户投诉"查不到"。诊断发现三类坏案例:查询口语化("报销被驳回了咋整")占四成,型号类精确查询失手占三成,多轮指代失灵占三成。处方:上查询重写治口语化(大模型改写),上混合检索治精确查询失手(关键词路召回型号),上对话改写治指代(历史融入重写),最后加重排序兜底排序质量。四项全部落地后,坏案例集命中率从六成出头提到九成以上,总延迟增加不到一倍(重写与重排各一次轻量调用)。这个案例的启示:四种技术各治各的病,组合使用才有完整覆盖——单押任何一项都救不了全局。

案例背后还有一个值得提炼的方法论:优化是"按坏案例分类开药"的过程,不是"按技术清单施工"的过程。如果当初团队拿到一份"高级检索技术清单"逐项实施,先上了最时髦的多跳检索,口语化查询的四成坏案例一个都治不了,还平添了延迟。先分类、再开方、最后逐项验证——这个顺序比任何单项技术都值钱。

再补充实施时的优先级判断依据:改动半径与验证难度。改动半径指技术侵入管线多深(重排序只在检索出口加一层,半径最小;查询重写要在检索入口加一次模型调用,半径中等;多跳检索要重构整个检索循环,半径最大)。验证难度指效果多容易被度量(重排序的排序改善立竿见影;上下文感知的个性化收益则难以归因)。半径小且易验证的先上,半径大且难验证的慎上——这不是保守,是让每一步优化都处在可控反馈之内。团队里推动这类决策时,把两个维度画成四象限图摆出来,优先级争议通常能当场平息:右上角(半径小、易验证)立即做,左下角(半径大、难验证)留到确有必要时再碰。这张四象限图也适合贴在团队的看板上,每引入一项新技术就标注一次位置——一年下来,你会发现团队的技术决策从"追新"悄悄变成了"按证据推进",这个转变本身就是工程成熟的标志,它让每一次技术债务的引入都变得有意识、可追踪,而不是随波逐流地累积。

⚠️ 常见坑:把整段对话历史无差别拼进查询。历史里的旧话题会污染当前检索的语义焦点,命中率反而下降。正确做法是先做指代消解与话题聚焦,只保留与当前问题相关的上下文。

💡 引入顺序建议:重排序(改动最小、收益直接)→ 混合检索(治精确查询失手)→ 查询重写(治口语化查询)→ 上下文感知(多轮对话系统才需要)。每加一项,都在坏案例集上验证增量的收益。

本节要点回顾

  • 先诊断后开方:查不到、排不对、理解偏三种病,分别对应不同技术,别盲目全上。
  • 混合检索:关键词与语义两路召回,分数归一化后加权融合,权重随查询类型调整;可再加交叉编码器重排序做两级漏斗。
  • 查询重写四法:同义词扩展、拼写纠错、意图理解、模型重写;模型重写是主流,查询分解与多跳检索处理复杂串联问题。
  • 上下文感知:历史查询、对话历史、用户画像三类信息源,关键是融合前的指代消解与话题聚焦。
  • 引入有顺序:重排序最先、上下文感知最后,每步用坏案例集验证增量收益。

动手引入这些技术时还有个团队协作层面的提醒:每引入一项,就把它的开关、参数与预期收益写进一份简短的技术决策记录,注明日期与验证用的坏案例编号。半年后有人问为什么权重这么配、为什么不上知识图谱,这份记录就是答案,省掉一轮重新试错。技术债往往不是选错技术,而是忘了当初为什么这么选。

检索端武装完毕,下一节转向生成端:拿到一堆或冗长或残缺的资料,模型怎么用好它们。详见第 2 节。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U