RAG 检索与关键词搜索的区别:从原理到实践

在 LLM 应用遍地开花的今天,检索增强生成(RAG)几乎成了知识库问答的标配。但很多人忽略了:关键词搜索并没有过时。理解两者的区别与联系,是做好检索系统的第一步。


一、一句话讲清区别

简单讲,关键词搜索适用于精确匹配,RAG 检索适用于语义模糊匹配

这是两者最本质的分野。关键词搜索盯着"字"看,RAG 检索盯着"意"看。前者要求查询词和文档词高度一致,后者允许表达方式不同但含义相近。

二、一个例子看懂差异

假设用户搜索 "手机耗电快",而知识库中有一条文档写的是 "电池续航能力差"

  • 关键词搜索:在”手机耗电快”和”电池续航能力差”之间找不到任何共同词汇,匹配失败,这条文档不会被返回。
  • RAG 检索:通过语义理解,能识别出”耗电快”和”续航能力差”表达的是同一个问题,从而成功检索到这条文档。

这个例子虽然简单,却揭示了两种检索范式在根本思路上的不同。


三、背后的原理

背后的原理在于:

  • 关键词搜索是基于词汇进行字面匹配。它将查询和文档都视为词的集合,通过统计词频、词的重要性等指标来计算相关性。
  • RAG 检索是基于语义理解,通过 Embedding 向量将查询和文档映射到语义空间,然后用向量相似度来匹配语义相近的文档。即使两个文档用词完全不同,只要它们在向量空间中距离足够近,就能被检索到。

可以这样理解:关键词搜索像是在图书馆里按书名精确查找——你必须知道书名才能找到;RAG 检索则像是向图书管理员描述你的需求——即使你不知道确切的书名,管理员也能根据你的意图推荐相关的书。


四、关键词搜索的核心技术

关键词搜索虽然历史悠久,但其背后的技术体系非常成熟,至今仍是搜索引擎和检索系统的基石。

TF-IDF

TF-IDF 是一种用于衡量一个词对一篇文档的重要程度的统计方法。

它由两部分组成:

  • TF(Term Frequency,词频):衡量词 t 在文档中出现的频次。一个词在文档中出现次数越多,通常说明它对该文档越重要。
  • IDF(Inverse Document Frequency,逆文档频率):衡量词 t 在整个语料库中的”稀有程度”。如果一个词在很多文档中都出现(比如”的””是””在”这类常用词),那么它对区分文档的贡献就小。

所以,高 TF-IDF 值 = 在本文档中高频 + 在全局中稀有 = 对本文档很重要

TF-IDF 虽然是相对"古老"的技术,但因其简单、高效、可解释的特点,在关键词搜索、文本分类等场景中仍然是重要的基线方法,也是理解现代语义检索技术的重要起点。很多现代检索系统的评测基准,仍然会用 TF-IDF 作为对照。

BM25

BM25 是 TF-IDF 的改进版,是目前最主流的搜索算法,主要用于文档相关性的打分算法。

TF-IDF 有一个明显缺陷:词频越高,得分越高,没有上限。举个极端的例子:

文档A:"猫猫猫猫猫猫猫猫猫猫猫猫猫猫猫猫猫猫猫猫"(出现100次)
文档B:"我家养了一只猫,它很可爱"

→ TF-IDF 会认为文档A更相关,但这显然不合理

BM25 针对这个缺陷,主要做了以下改进:

  1. TF 饱和机制:给词的出现频率加了一个上限,超过这个上限后,该词对重要程度的贡献会大幅减小。本质上,是把原来的线性增长改成了非线性曲线——词频从 1 到 2 的提升很大,但从 50 到 51 的提升微乎其微。
  2. 文档长度归一化:对文档长度进行了归一化处理。长文档天然包含更多词,词频会偏高,因此需要”惩罚”长文档、”奖励”短文档,让不同长度的文档在同一个标准下比较。

这两个改进让 BM25 在实际搜索场景中的表现远超朴素 TF-IDF,Elasticsearch 的默认评分算法也正是基于 BM25。

倒排索引

正常索引是以文章为索引,可以快速查到文章中有哪些词。倒排索引则是反过来——以词为索引,可以快速查到某个词出现在哪些文章里。

搜索的本质是"根据词找文档",所以倒排索引才是搜索引擎真正需要的结构。倒排索引也是 Elasticsearch 的默认索引结构。

它的工作原理大致是:为语料库中每个出现过的词维护一个倒排列表(posting list),列表中记录了包含该词的所有文档 ID 以及位置信息。查询时,直接根据查询词查找倒排列表,再对结果做交集、并集等运算,就能快速定位相关文档。

当然,倒排索引的缺点也很明显:索引条目非常多,占用内存和磁盘空间比较大,构建索引的时间也较长。特别是面对大规模文本时,索引膨胀和更新成本是需要认真评估的。


五、RAG 检索的核心技术

RAG 检索主要用到的技术就是 Embedding 向量化。整个流程可以分为文档向量化查询两个阶段。

文档向量化

文档向量化,就是把一篇文档写入向量数据库。通常包括以下步骤:

  • 文档预处理:把文档的格式整理一下,去除特殊字符、重复字符等。这一步看似简单,但直接影响后续切分和向量化的质量——格式混乱的文档切出来的 chunk 往往也支离破碎。
  • 文档切分:将文档切分成一个个的 chunk。切分策略直接影响检索效果:切太大,语义不够聚焦;切太小,上下文信息丢失。具体的文档切分策略和方法可以参考这篇文章。
  • 保留元数据:元数据要留档,方便后续更新、版本检查和溯源。比如文档来源、切分时间、chunk 序号等信息,在排查检索问题时非常关键。
  • Embedding:将每个 chunk 的文本通过 Embedding 模型将文本转换为向量表示,然后存储到向量数据库中。在选择 Embedding 模型时应该考虑什么因素、常见的 Embedding 模型有哪些,可以参考这篇文章。

查询阶段

查询阶段简单讲就是将查询内容 Embedding 后,去向量数据库中查询匹配,找到最相似的 chunk。

具体涉及向量数据库的查询算法。常见的向量数据库有 Milvus、Qdrant、Pinecone 等。向量数据库使用近似最近邻(ANN)算法通过向量相似度来匹配查询。之所以用"近似"而非"精确"最近邻,是因为在高维向量空间中,精确搜索的计算成本极高,ANN 在可接受的精度损失下换来了数量级的性能提升。

从实践上来讲,检索一般涉及召回重排两个步骤:

  • 召回:从向量数据库中检索出相关的候选 chunk,这个阶段追求的是”快”和”全”,宁可多召回一些,也不能漏掉。
  • 重排:对召回结果进行筛选和精排,通过更精细的模型(如 Cross-Encoder)对候选集重新打分,提高最终结果的准确性。

完成检索后,下一步就是将文本拼接到 LLM 的 prompt 中进行答案生成。


六、最佳实践:混合检索才是正解

虽然关键词检索是较为"古老"的技术,但关键词搜索和 RAG 并非对立的,反而是两者互补才能发挥最大的功效

在实际生产实践中,检索通常都采用混合检索方案。也就是在查询召回阶段,用多路召回的方案,将向量检索的内容和关键词搜索的内容合并后,统一重排,再生成更精确的答案。

这种方案结合了两者的优势:

  • 关键词搜索保证精确匹配能力——当用户搜索专有名词、产品型号、代码片段等时,关键词匹配比语义匹配更可靠。
  • 向量检索提供语义理解能力——当用户的查询和文档表述不同但含义相同时,向量检索能填补关键词搜索的盲区。
  • Reranker 进行精排,将两路召回的结果统一打分排序,提升最终质量。

打个比方:关键词搜索是精确制导,指哪打哪;向量检索是广角雷达,覆盖语义范围。一个好的检索系统,需要两者协同工作。


总结

关键词搜索和 RAG 检索代表了两种不同的匹配哲学:字面匹配 vs 语义理解。它们各自的技术栈截然不同——前者依赖 TF-IDF、BM25 和倒排索引,后者依赖 Embedding、向量数据库和 ANN 算法——但两者并非二选一的关系。

理解它们的差异是基础,而将两者有机结合的混合检索,才是当前生产环境中真正经得起考验的实践方案。

暂无评论

发送评论 编辑评论


				
上一篇
下一篇