跳到正文

向量检索怎么保准又保真?

Embedding 质量、检索算法、重排序等维度提升准确性与相关性

原题:在向量检索系统中,有哪些技术和方法可以保证检索结果的准确性和相关性?

模型微调 · 美团真题

30 秒回答

  1. Embedding模型选型与微调
  2. 多路召回与混合检索策略
  3. 重排序(Rerank)机制
  4. 查询理解与改写

回答与解析

答案要点

  • Embedding模型选型与微调
  • 多路召回与混合检索策略
  • 重排序(Rerank)机制
  • 查询理解与改写
  • 检索结果评估与迭代优化

1. Embedding层优化

  • 模型选型:根据领域特点选择模型(通用场景用BGE/M3E,垂直领域用微调模型)
  • 领域适配:用业务数据对Embedding模型做对比学习微调,缩小语义鸿沟
  • 动态更新:商品/内容Embedding随属性变化及时刷新,避免语义漂移

2. 多路召回策略

召回方式 适用场景
向量召回 语义相似,理解用户意图
关键词/BM25 精确匹配,保证核心词命中
倒排索引 结构化属性过滤(价格、距离等)
图召回 用户行为相似推荐
  • 各路召回结果融合时,用加权或机器学习模型做初选

3. 重排序(Rerank)精排

  • 粗排:向量相似度Top-K快速筛选
  • 精排:Cross-Encoder交互式模型(如BGE-Reranker)计算查询-文档相关性分数
  • 业务规则:结合点击率、转化率、时效性等业务特征最终排序

4. 查询侧优化

  • 查询改写:扩写同义词、纠错、补全意图("火锅"→"重庆火锅/老北京涮肉")
  • 查询理解:识别地理位置、价格区间等约束条件,做前置过滤

5. 评估与迭代

  • 离线:Recall@K、MRR、NDCG指标监控
  • 在线:AB实验看点击率、转化率、满意度
  • Badcase分析:建立标注平台,持续回流数据优化模型

口语版讲法(约4分钟)

  • 本质是平衡语义理解与精确匹配
  • 混合检索:向量+关键词,各有适用场景
  • 重排序:从粗到精,用交互模型修正
  • 查询改写:让用户输入更匹配索引
  • 落地风险:数据分布、延迟、评估闭环

这道题问的是怎么让向量检索系统既准又相关,其实本质是在解决一个矛盾:用户想要的到底是语义上的相似,还是字面上的精确匹配。这两个东西有时候是冲突的,你要做的是在不同场景下找到平衡点,而不是追求单一指标的最优。

具体来说,我一般从几个层面去考虑。先说最基础的 Embedding 层。模型选型很重要,通用场景用 BGE 或者 M3E 这类通用模型就够了,但如果是垂直领域,比如电商客服场景里用户问‘退款多久到账’,通用模型可能把‘退款’和‘退货’混在一起,这时候就得用业务数据做对比学习微调,缩小语义鸿沟。不过这里有个前提:你的标注数据质量得过关,不然微调反而会带偏。

再一个就是召回策略。我倾向于走 混合检索,就是向量召回和 BM25 关键词召回一起上。向量召回擅长理解意图,比如用户说‘想找个便宜点的火锅店’,它能找到语义相似的店;但用户如果明确说‘海底捞’,关键词召回就能保证精确命中。这两条路各有适用场景,落地上我一般会加权融合,权重根据业务数据调。比如在订单检索场景里,用户输入‘2024年3月15号的订单’,关键词匹配订单号或者日期就比语义相似重要得多,我会把关键词召回权重调高。

有了候选集之后,下一步是重排序。粗排阶段用向量相似度快速筛出 Top-K,精排阶段再用 Cross-Encoder 这种交互式模型去算 query 和每个文档的相关性分数。这个步骤很关键,因为 Bi-Encoder 的向量相似度有时候会漏掉一些细微的匹配,比如‘苹果手机’和‘iPhone’在向量空间里可能很近,但‘苹果’和‘水果’也可能很近,Cross-Encoder 能更好地做区分。不过它的计算成本高,所以只能用在精排阶段,对候选集大小有限制,一般几百条以内。

还有一个容易被忽略的点是查询侧优化。用户输入的 query 往往很随意,比如‘火锅’可能想找‘重庆火锅’或者‘老北京涮肉’,这时候做查询改写,扩写同义词、纠错、补全意图,就能显著提升召回率。另外,如果 query 里带有结构化约束,比如‘附近’、‘100块以内’,我会在查询理解阶段把它抽出来做前置过滤,而不是全扔给向量检索。

说到查询改写,这里面其实有个坑:如果改写太激进,比如把‘手机’扩写成‘智能手机、移动电话、手持设备’,反而可能引入噪声,拉低精度。所以我会先做意图分类,对模糊 query 才做改写,对精确 query 尽量保持原样。这个度怎么把握,其实是挺值得细聊的。

最后,整个系统上线后一定要有评估和迭代的闭环。离线指标我会看 Recall@K 和 NDCG,在线通过 AB 实验看点击率和转化率。更重要的是建立 Badcase 分析机制,比如用户搜‘充电宝’返回了‘充电器’,这种案例回流回来,可能发现是 Embedding 模型没区分好,或者重排序模型没学到这个模式,然后针对性优化。

所以整体上,我更倾向于把向量检索系统看作一个组合工程,而不是单个模型的比拼。混合检索搭骨架,重排序做精调,查询改写做入口优化,再加上持续的评估迭代,这样才能在真实业务里跑得稳。

关键一句:查询改写时激进扩写会引入噪声,需要先做意图分类,对模糊query改写,精确query保持原样。

面试官还可能这样问

  1. 问法 1 · 场景切入

    假设你在做电商搜索,用户搜“红色连衣裙”,向量召回出来一堆语义相关的,但有些根本不是红色,有些是短裙。你怎么保证返回的结果既准确又相关?

  2. 问法 2 · 层层追问

    向量检索怎么让结果更准?……除了调模型,还有什么办法?……召回后怎么保证排序符合用户意图?

  3. 问法 3 · 直球架构

    在一个向量检索系统中,有哪些关键技术和策略能提升检索结果的准确性和相关性?从模型、召回、排序到查询优化,你整体怎么设计?

同模块相关题目