人人都会AI编程

3.1 向量检索本质:语义相似度匹配

更新时间:2026-07-12

在 RAG 系统中,“检索”环节的质量直接决定了模型能否拿到正确的参考资料。而实现高效、准确检索的核心机制,就是基于向量表示的语义相似度匹配。理解这一本质,有助于我们在后续工作中合理选择嵌入模型、优化索引策略,并诊断检索效果不佳的根源。

3.1.1 从“关键词匹配”到“语义理解”

传统搜索引擎主要依赖关键词匹配(如 TF-IDF、BM25),其逻辑是:用户查询中的词,与文档中的词重合越多,该文档就可能越相关。这种方法在精确查找时有效,但面对自然语言提问,有明显短板:

  • 同义词困境:用户问“笔记本散热不好”,文档中写的是“笔记本电脑温度过高”,二者字面不重合,但含义几乎相同。关键词匹配可能会漏掉这篇高度相关的文档。
  • 语境丢失:“苹果最新款价格”是问手机还是水果?关键词匹配只看词频,无法分辨具体语义。

向量检索通过引入语义理解,解决了这些问题。它不再直接比较文字表面,而是将任意文本——无论是问题还是文档片段——映射到一个高维向量空间中的一个点。在这个空间里,语义上相近的文本,其向量距离也近;语义无关的文本,向量距离则远。因此,检索变成了在向量空间中寻找与问题向量最近邻的文档向量

3.1.2 文本到向量:嵌入模型在做什么

将文本转化为向量的过程称为“嵌入(embedding)”,执行该任务的模型就叫嵌入模型(如 text-embedding-ada-002、bge-large-zh 等)。

嵌入模型通过在大规模语料上训练,学会了将语义信息编码为一个固定长度的实数向量(例如 768 维或 1536 维)。每个维度没有具体的物理含义,但整体向量却“神奇地”捕捉了文本的含义、语态,甚至领域的细微特征。

直观类比:可以把嵌入模型想象成一位多语言翻译官,读过海量文章后,能把任何句子转换成一个“意义编码”。当两个句子的意思很像时,它们对应的编码在编码表中靠得很近;意思不同,则相隔很远。

实际应用时,整个知识库中的文档片段会被预先转换成向量,存入向量数据库。当用户提问时,同一个嵌入模型将问题也转为向量,然后数据库执行一次“找到与该向量最相似的前 K 个文档向量”的操作,即为检索结果。

3.1.3 相似度计算:余弦相似度是如何工作的

在向量空间中,衡量“接近程度”的常用指标是余弦相似度。它计算两个向量之间夹角的余弦值,值域在 -1 到 1 之间。值越接近 1,说明两个向量方向越一致,语义越相近;接近 0 表示无关。

公式很简单:
\[
\text{cosine\_similarity}(A, B) = \frac{A \cdot B}{\|A\| \times \|B\|}
\]

其中 \(A \cdot B\) 是向量点积,\(\|A\|\) 和 \(\|B\|\) 是向量的长度。我们通常只关心相对大小,因此实际检索时,向量数据库会用近似最近邻(ANN)算法快速找出相似度最高的几个向量,而不必遍历所有计算。

3.1.4 一个真实例子:语义匹配如何胜过关键词

假设公司知识库中有以下文档片段:

  • 片段1:“员工因公出差产生的交通费用,可凭票据实报实销。”
  • 片段2:“差旅期间的餐饮补贴标准为每日 80 元。”

用户提问:“我出差打车和坐高铁的费用怎么报销?”

  • 关键词检索(如 BM25):查询中的“打车”“高铁”“报销”,在片段1中只命中“报销”,“打车”“高铁”未出现。片段2中完全无命中。片段1得分可能不高,甚至可能因为词频而被其他无关片段干扰。
  • 向量检索:嵌入模型将问题和两个片段都转换为向量。由于“出差打车和坐高铁”与“因公出差产生的交通费用”在语义上高度相关,片段1的向量会与问题向量的余弦相似度很高(例如 0.92),排在第一位。片段2虽然也关于差旅,但侧重餐饮,相似度较低(例如 0.65)。最终系统优先返回片段1,并准确回答报销流程。

这个例子具体展示了语义匹配的威力:它透过用词差异,抓住了用户问句的真实意图与文档内容的实质关联。

3.1.5 语义匹配也有局限,但解决思路清晰

向量检索虽强,并非万能。在某些情况下仍会失效:

  • 高度专业术语:嵌入模型的训练语料中如果没有足够的专业语境,可能将特定术语与日常用语混淆。解决办法是选用领域微调过的嵌入模型,或结合 BM25 做混合检索。
  • 窄范围精确匹配:例如查询一个具体的产品型号“X-3000-CN”,向量检索可能召回相似的“X-3000”却非精确型号。此时需要补充关键词过滤或直接关键字段匹配。
  • 长文本语义稀释:过长的文档片段在嵌入时,主题可能被稀释,检索精度下降。合理分块、保持片段语义集中是关键。

了解这些本质与边界后,在实际搭建 RAG 系统时,我们就能更有把握地设计检索策略:默认采用向量语义检索作为主流程,再根据场景加入关键词过滤、重排序等增强手段,以实现高召回与高精度的平衡。