稠密检索入门:从稠密向量理解语义召回原理与应用场景
稠密检索是用稠密向量表达文本语义的检索方法。它通过文本向量化和相似度计算召回相关文档,并可与稀疏向量混合检索配合,适合问答、语料检索等场景入门。

什么是稠密检索?
稠密检索,也常称为 Dense Retrieval 或稠密向量检索,是一种基于向量语义表示的检索方法。它的核心做法是:把查询和文档转换为可计算的稠密向量,再通过向量相似度寻找语义相关的内容。
这里的“稠密向量”是一种数值数据表示形式,通常由实数数组组成,其中大部分或所有元素都不为零。在文本检索中,可以把稠密向量理解为文本语义的数值化表达。系统不只检查字面是否完全相同,还会把文本放到同一个向量空间中进行比较。
要点: 稠密检索不是某一个固定算法,而是一类以稠密向量表示和相似度计算为基础的检索方法。
用稠密向量理解语义召回
理解稠密检索,可以先把高维向量空间想象成一张“语义地图”。如果两个文本表达的含义接近,它们在这个空间中的位置也可能更接近;如果含义差异较大,它们之间的距离通常也会更远。
在检索过程中,查询和文档会先被转换为向量。随后,系统可以使用余弦相似度等向量相似度方法,比较查询向量与文档向量之间的接近程度,并据此返回相关文档。
稠密检索不只关注字面匹配
在很多检索任务中,用户关心的不只是关键词是否出现在文档里,而是文档是否真正回答了问题、覆盖了主题或表达了相近含义。稠密检索更强调文本在向量空间中的语义相关性。
例如,用户的问题和候选文档不一定使用完全相同的词,但只要它们在语义上接近,就可能被召回。这也是“语义召回”常与稠密检索一起出现的原因:它试图从大量文本中找到含义相关的内容,而不只依赖表层词形是否一致。
稠密检索的基本工作流程
稠密检索的通用流程可以概括为四个环节。不同系统在模型、索引和工程实现上可能不同,但基本思路通常相似。
| 环节 | 主要输入 | 核心动作 | 输出结果 |
|---|---|---|---|
| 文本输入 | 查询、文档 | 准备待比较的文本 | 原始文本集合 |
| 文本向量化 | 查询文本、文档文本 | 转换为稠密向量 | 查询向量、文档向量 |
| 相似度计算 | 查询向量、文档向量 | 比较向量接近程度 | 相似度分数 |
| 结果返回 | 相似度分数、文档集合 | 选择相关文档 | 检索结果 |
1. 输入查询和文档
系统首先接收用户查询,并准备可检索的文档集合。查询可以是一句话、一个问题,也可以是一段较短的文本;文档可以是知识库片段、文章段落或其他文本内容。
2. 生成稠密向量
查询和文档会被转换为稠密向量表示。为了进行有效比较,查询向量和文档向量需要处在同一类向量表示空间中。
3. 计算向量相似度
系统会计算查询向量与文档向量之间的相似度。常见做法包括使用余弦相似度等向量相似度方法,用数值衡量两段文本在语义表示上的接近程度。
4. 返回相关文档
根据相似度结果,系统返回与查询更相关的文档。相似度越高,通常表示文档与查询在向量空间中越接近,也更可能满足用户的信息需求。
稠密检索与混合检索的关系
稠密检索可以作为检索系统中的一种召回方式,也可以与稀疏向量检索组合使用。后者通常被称为稀疏向量与稠密向量混合检索。
混合检索的基本思路是:同时利用不同类型的表示方式进行检索,让系统不只依赖单一路径召回内容。一些工程方案会将稀疏向量与稠密向量结合,用于追求更高精度、更高效率的检索任务,并改善信息召回效果。
| 检索方式 | 关注点 | 在系统中的定位 |
|---|---|---|
| 稠密检索 | 将文本表示为稠密向量,通过向量相似度寻找语义相关内容 | 常用于语义召回 |
| 稀疏向量检索 | 使用与稠密向量不同的表示方式参与检索 | 可作为另一类召回信号 |
| 混合检索 | 组合稀疏向量与稠密向量的检索结果或信号 | 用于改善检索精度、效率和召回效果 |
要点: 如果任务既需要语义理解,又希望提升召回覆盖,可以考虑混合检索思路;但具体效果仍取决于数据、向量表示、检索配置和业务目标。
稠密检索适合哪些应用场景?
信息检索系统是数字时代获取知识的重要基础。随着神经网络方法的发展,稠密检索成为检索系统中的一种重要范式,尤其适合从大量文本中寻找语义相关内容。
常见讨论场景包括开放域问答和语料检索任务。这类场景的共同特点是:用户通常用自然语言提出需求,而系统需要在候选文本中找到含义相关的答案、段落或资料。
| 用户需求 | 解决方式 | 预期效果 |
|---|---|---|
| 用自然语言提问,希望从知识库中找到相关材料 | 将问题和知识片段向量化,按向量相似度召回候选内容 | 找到与问题语义相关的文档或段落 |
| 在大规模语料中查找相关文本 | 将语料文本转换为稠密向量,并与查询向量比较 | 从大量文本中筛选更相关的内容 |
| 用户问题与文档措辞不完全一致 | 利用稠密向量表达语义相关性 | 降低对完全字面匹配的依赖 |
| 需要提升检索召回覆盖 | 将稠密检索与稀疏向量检索组合 | 改善信息召回效果 |
选择稠密检索时应关注什么?
在设计检索系统时,稠密检索是否合适,取决于任务是否需要语义相关召回,以及文本是否适合被转换为向量表示。它更适合处理自然语言文本相关性,但不是所有检索问题的唯一答案。
可以从以下几个问题开始评估:
- 是否需要找到“语义相关”而不只是“字面相同”的内容?
- 查询和文档是否可以被转换为同一向量空间中的稠密向量?
- 检索结果是否需要通过向量相似度进行排序或筛选?
- 是否存在仅靠单一路径召回不够稳定的情况?
- 是否需要与稀疏向量检索结合,形成混合检索以改善召回效果?
如果任务重点是问答、知识库检索或语料检索,并且用户表达与文档表达可能不完全一致,稠密检索通常值得纳入方案评估。如果任务同时重视语义理解和召回覆盖,则可以进一步考虑混合检索。
最后需要注意,稠密检索不应被简单理解为某一个模型或某一个索引算法。更准确地说,它是一类基于稠密向量表示、文本向量化和向量相似度计算的检索方法。