爆改RAG检索体验:向量+关键词,双剑合璧的“融合检索”实战指南

向量+关键词:RAG融合检索实战指南

你以为RAG(Retrieval-Augmented Generation)检索只能靠向量?那你可就out了!今天,咱们就来聊聊如何用“向量+关键词”双剑合璧,打造检索界的“六边形战士”——融合检索(Fusion Retrieval)。


一、检索界的“武林大会”:向量 vs. 关键词

在AI知识检索的江湖里,向量检索和关键词检索(BM25)各有绝活:

  • 向量检索:擅长“意会”,能理解“你说的不是你说的,但我懂你说的”。
  • 关键词检索:擅长“言传”,只认死理,谁说得准、谁出现得多,谁就是老大。

但问题来了:

  • 向量检索有时太“通透”,把“苹果”当“水果”,却忘了你其实想要“iPhone”。
  • 关键词检索死磕字面,遇到“同义词”“语境”就抓瞎。

于是,江湖呼唤一个能“文武双全”的检索大侠——融合检索


二、融合检索:检索界的“六边形战士”

融合检索(Fusion Retrieval)就是把向量和关键词检索的优点揉在一起,既能“意会”又能“言传”,让检索结果既懂你心思,又不丢细节。

为什么要融合?

  • 向量检索:适合“模糊搜索”“语义理解”,但有时会漏掉关键词的“硬核”匹配。
  • BM25关键词检索:适合“精确打击”,但对“语义漂移”无能为力。
  • 融合检索:两者结合,既能抓住“关键词”,又能理解“上下文”,检索效果直接起飞!

三、融合检索的“炼丹炉”:整体流程一览

别怕,流程其实很简单,咱们用伪代码和思路带你飞:

  1. 文档处理:PDF提取文本 → 清洗 → 分块(chunking)

  2. 向量化:每个chunk生成embedding,存入向量库

  3. 关键词索引:用BM25为每个chunk建关键词索引

  4. 检索时

    • 用向量检索找“语义相近”的chunk
    • 用BM25找“关键词命中”的chunk
    • 两种分数归一化,按权重融合
    • 综合排序,取Top-K
  5. 生成答案:把Top-K chunk拼成context,丢给大模型生成最终答案

是不是很丝滑?下面我们逐步拆解。


四、文档处理:从PDF到“知识碎片”

1. PDF文本提取

用PyMuPDF等工具,把PDF里的内容一页页扒出来,拼成大文本。

text = extract_text_from_pdf(pdf_path)

2. 文本清洗

去掉多余空格、换行、奇怪符号,保证后续处理不“踩雷”。

cleaned_text = clean_text(text)

3. 分块(Chunking)

把大文本切成小块(比如每1000字符一块,重叠200字符),这样既能覆盖上下文,又不丢细节。

chunks = chunk_text(cleaned_text, chunk_size=1000, chunk_overlap=200)

五、知识入库:向量库 & BM25索引

1. 向量化

用OpenAI/BGE等embedding模型,把每个chunk变成“高维向量”,存进自定义的向量库。

embeddings = create_embeddings([chunk["text"] for chunk in chunks])
vector_store.add_items(chunks, embeddings)

2. BM25关键词索引

用BM25算法,把每个chunk的词分词、建索引,方便后续“关键词检索”。

bm25_index = create_bm25_index(chunks)

六、检索时刻:双剑合璧的“融合检索”

1. 向量检索

用用户query生成embedding,和所有chunk的embedding算余弦相似度,取Top-K。

vector_results = vector_store.similarity_search_with_scores(query_embedding, k=K)

2. BM25检索

把query分词,和BM25索引比对,算分数,取Top-K。

bm25_results = bm25_search(bm25_index, chunks, query, k=K)

3. 分数归一化 & 融合

  • 两种分数都归一化到0~1区间
  • 用权重alpha(比如0.5)加权融合

伪代码如下:

norm_vector_scores = normalize(vector_scores)
norm_bm25_scores = normalize(bm25_scores)
combined_scores = alpha * norm_vector_scores + (1 - alpha) * norm_bm25_scores

4. 综合排序,取Top-K

按combined_scores排序,取前K个chunk,拼成context。


七、生成答案:让大模型“锦上添花”

把Top-K chunk拼成context,和query一起丢给大模型(如Llama3、GPT-4),让它“有理有据”地回答。

response = generate_response(query, context)

八、三大检索法大比拼:谁才是“最强王者”?

我们分别用三种方式回答同一个问题,比如:

“Transformer模型在自然语言处理中的主要应用有哪些?”

1. 向量检索RAG

  • 优点:能理解“transformer”与“NLP”的语义关系
  • 缺点:如果文档没明确提到“transformer”,可能找不到

2. BM25关键词检索RAG

  • 优点:只要文档里有“transformer”,一定能命中
  • 缺点:如果文档用的是“变换器模型”或“self-attention”,就GG了

3. 融合检索RAG

  • 优点:既能抓住“transformer”关键词,又能理解“上下文”语义
  • 缺点:实现稍复杂,计算量略大
实测结果(真实案例):
  • 向量检索:答得还行,但没点名“transformer”的具体应用
  • BM25检索:死磕关键词,没找到就说“没提到transformer”
  • 融合检索:不仅列举了“机器翻译、文本生成、情感分析、文本分类、语言建模”,还解释了transformer在NLP的地位

结论:融合检索完胜!


九、融合检索的“江湖秘籍”:适用场景与调优建议

1. 什么时候用向量检索?

  • 语义理解为主,关键词不确定
  • 用户问题“拐弯抹角”,比如“能自动写诗的AI模型有哪些?”

2. 什么时候用BM25关键词检索?

  • 用户问题“指名道姓”,比如“文档里有没有‘Transformer’这个词?”
  • 法律、医学等领域,关键词极其重要

3. 什么时候用融合检索?

  • 你既想“意会”又想“言传”
  • 文档内容复杂,既有专业术语又有通俗描述
  • 用户问题既有关键词又有语义需求

4. 融合权重怎么调?

  • alpha=0.5:向量和BM25各占一半,适合大多数场景
  • alpha→1:更偏向语义理解
  • alpha→0:更偏向关键词命中

可以多做A/B测试,找到最适合你业务的权重。


十、工程实践Tips

  1. 分块策略很重要:chunk太大,检索不准;太小,语义丢失。建议1000字符左右,重叠200字符。
  2. embedding模型选型:英文用OpenAI/BGE,中文可选BGE-m3、text2vec等。
  3. BM25分词:中文要用jieba等分词器,英文直接split即可。
  4. 归一化要做对:分数归一化别忘加epsilon防止除零。
  5. 检索速度优化:向量库可用FAISS、Milvus等,BM25可用Whoosh、Elasticsearch等。

十一、未来展望:融合检索的进阶玩法

  • 多模态融合:不仅文本,还能融合图片、表格等多种信息
  • 动态权重调整:根据query类型动态调整alpha
  • 用户反馈闭环:用用户点击/满意度反向优化检索权重
  • 端到端训练:用大模型微调,让检索和生成更“心有灵犀”

十二、总结:融合检索,RAG的“最优解”?

融合检索不是“银弹”,但在大多数实际场景下,它能显著提升RAG系统的召回率和答案质量。它让AI既能“知其然”,又能“知其所以然”。

一句话总结:

“向量检索懂你,BM25不放过你,融合检索——既懂你又不放过你!”


结尾彩蛋:一张图看懂融合检索

用户Query
   │
   ├─► 向量检索(语义理解) ──┐
   │                            │
   ├─► BM25检索(关键词匹配) ─┤→ 分数归一化 → 加权融合 → Top-K排序
   │                            │
   └────────────────────────────┘
                                │
                          拼成Context
                                │
                        丢给大模型生成答案

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值