【大模型应用】6.RAG 场景下的向量+关键词混合检索

混合检索

定义

混合检索也叫多路召回或者融合检索,不仅限于向量检索和关键词检索的叠加。

比如同时从文档库和数据库检索,或者同时用多个不同的 Embedding 模型做向量检索,最后把结果融合起来,都算混合检索。

只不过在大模型 RAG 场景下,混合检索最常见的形态就是向量检索 + 关键词检索 。

两种检索方式各有软肋:

● 向量检索:擅长语义理解,比如 "猫捕猎老鼠" 和 "猫追逐老鼠" 能匹配上;但难以精准匹配专有名词(如 "iPhone 15")。

● 关键词检索:精确匹配没问题,但理解不了语义,用户问 "怎么减肥",它匹配不到 "如何瘦身"。

混合检索就是两条路并行走:

  1. 分别执行向量检索和关键词检索
  2. 把两边的结果融合起来
  3. 用权重加权或者 RRF 算法重排序
  4. 取最优结果喂给大模型

实现方案

  1. Elasticsearch 8.0+ :原生支持 dense_vector 字段和 knn 查询,可以在一个查询里同时做向量检索和关键词检索,用 bool query 组合结果。
  2. Milvus + 外部搜索引擎:Milvus 专门做向量检索,配合 Elasticsearch 做关键词检索,在应用层做结果融合。
  3. LlamaIndex / LangChain:这类框架封装了混合检索的能力,简单配置即可使用,适合快速搭建原型系统。

结果融合策略

两路检索的结果怎么合并是个技术活,常见做法有两种:

  1. 加权求和
    给向量检索和关键词检索的分数分别乘以权重,加起来算总分。比如向量检索权重 0.7,关键词检索权重 0.3,最后按总分排序。
  • 权重怎么定?没有万能的黄金比例,需要根据业务场景调:

    • 文档里专有名词、ID 类查询多:关键词检索权重可调高到 0.4-0.5
    • 主要是自然语言问答:向量检索权重可给到 0.7-0.8
  • 调参技巧:准备一批有标注的测试集,跑不同权重组合,观察召回率和准确率的变化,找到最优点;线上还可以做 A/B 测试持续优化。

  1. RRF 算法(Reciprocal Rank Fusion)
    不看分数只看排名,对每个文档计算 1/(k+rank)(k 一般取 60),然后把两路的分数加起来。
    • 好处:不用关心两路检索分数的量纲差异,直接用排名计算,避免了分数归一化的问题。

一些追问

1. 向量检索和关键词检索的权重一般怎么定?有什么调参技巧?

没有万能的黄金比例,得根据业务场景调:

  • 文档里专有名词、ID 类查询多:关键词检索权重可调高到 0.4-0.5。
  • 主要是自然语言问答:向量检索权重可给到 0.7-0.8。
  • 调参技巧:准备一批有标注的测试集,跑不同权重组合,看召回率和准确率的变化,找到最优点;线上还可以做 A/B 测试持续优化。

2. 混合检索和 Rerank 是什么关系?能一起用吗?

能一起用,而且建议一起用:

  • 混合检索解决的是召回阶段的问题,让召回的候选文档更全面。
  • Rerank 解决的是精排阶段的问题,让最终送给大模型的文档更精准。
  • 典型流程:向量检索召回 Top 50,关键词检索召回 Top 50,RRF 融合后取 Top 100,然后用 Rerank 模型精排,最后取 Top 5 喂给大模型。两者是互补关系,不是替代关系。

3. 如果关键词检索和向量检索的结果完全没有交集,怎么处理?

这种情况说明两路检索的视角差异很大,需要分情况处理:

  • 如果用户 Query 明显是搜专有名词或 ID:关键词检索的结果更可信,可以给关键词检索更高权重甚至只用关键词检索的结果。
  • **如果用户 Query 是自然语言问题:**向量检索的结果更可信。
  • 进阶方案:做个简单的 Query 分类器,判断 Query 类型后动态调整两路的权重。
相关推荐
在所不辞兄2 小时前
分层PINN提升多物理场耦合效率
人工智能·深度学习·神经网络·机器学习·工程仿真
AI技术新视界2 小时前
微软确认 GPT‑6 使用 Looped Transformers
人工智能·llm
xuxigifxfh2 小时前
HJ4 字符串分隔
java·开发语言·华为机考
智圣新创012 小时前
智圣新创智慧学生社区线上服务平台 高校一站式育人场景数字化升级全域建设指南
大数据·人工智能
写后端的胖头鱼2 小时前
Java 反射详解 + 场景示例
java·反射
databook2 小时前
什么是范数?用 NumPy 动手算一遍就明白了
python·数学·numpy
MayZork2 小时前
Qt 开发集成CMake + vcpkg
开发语言·c++·qt
朝朝辞暮i2 小时前
VLA 系统学习第 5 课:神经网络的参数到底是什么?——从 nn.Linear 真正理解 W、 b 和 Gradient
人工智能·python·深度学习·神经网络·vla
goujunwe2 小时前
电商品牌 GEO:让 AI 在消费者对比产品时,采信你的品牌信息
大数据·人工智能
XZ-0700012 小时前
week7-文本
python