向量化原理——为什么向量能算语义相似度

一段文字怎么变成一组数字?为什么向量距离近就代表意思相近?

你有没有想过一个问题——

RAG 的核心是「语义匹配」:你说「去年第三季度营收怎么样」,它能找到文档里写的「Q3 营收同比增长 15.3%」。字面不一样,但意思一样。

这到底是怎么做到的?一段文字怎么变成一个「向量」?为什么两个向量离得近就代表意思相近?

这篇文章从最基础的概念讲起,不涉及复杂的数学公式。

人能判断语义相似度,机器也能

先想一个简单的问题:人和人之间怎么判断两句话意思差不多?

「今天天气真好」和「今天阳光明媚」——你一看就知道它们说的是一回事。

背后的过程很复杂(你用了多年的语言经验、对词汇的理解、对语境的把握),但直觉上很简单:你在大脑里给这两句话各自建立了一个「语义位置」,发现它们靠得很近。

机器做同样的事,只是用的方法不一样——它用向量来表示语义位置。

向量是什么?一组数字而已

向量听起来很高深,其实就是一组数字。

[0.52, -0.13, 0.87, -0.42, 0.11, ...]

你可以把向量想象成语义空间中的一个坐标点

比如我们想象一个二维的语义空间,每一段话都对应一个坐标点:

「今天天气真好」→ 坐标 (0.9, 0.3)
「今天阳光明媚」→ 坐标 (0.8, 0.4)
「苹果很好吃」  → 坐标 (0.1, 0.2)

在语义空间里,「今天天气真好」和「今天阳光明媚」靠得近(意思相近),和「苹果很好吃」离得远(不相关)。

语义空间坐标示意图

二维语义空间示意:意思相近的文本在空间中靠得近

当然,现实中的语义向量不是两维,而是几百甚至几千维——但原理一样。两个向量在空间中的距离越近,代表它们的意思越相近。

语义从哪来:Embedding 模型怎么训练的

刚才的水果例子是我手动编的维度(甜度、大小)。但在真实场景中,不可能有人来给每个词标注「甜度 = 0.9」这种数据。

那向量的数值从哪来?答案是 Embedding 模型自己学出来的。

训练方法的核心思路很简单:出现在相似语境中的词,应该有相似的向量

一个经典的例子:

「国王」和「女王」经常出现在类似的句子里(「__ 统治着国家」「__ 戴着一顶王冠」)。所以它们的向量应该离得近。

「国王」和「苹果」很少出现在同一个语境里。所以它们的向量应该离得远。

训练时,模型会读海量的文本,对每个词做一个调整:如果两个词经常出现在相似的上下文里,就把它们的向量拉近一点;如果很少同时出现,就把它们推远一点。

经过无数次这样的调整,模型最终学会了一个语义空间——意思相近的词,在空间里靠得近;意思不相关的词,离得远。

这一步就是 Embedding 模型做的事。你给它输入一段文本,它返回一组向量。

如何判断两个向量离得近

有了向量之后,怎么计算两段文字的相似度?

最常用的方法叫余弦相似度(Cosine Similarity)。你不需要记住公式,只要理解它的直觉:

两个向量在空间中有一个夹角。夹角越小,说明方向越一致,内容越相似。

  • 完全相同的文本 → 夹角 0°,相似度 = 1
  • 完全不相关的文本 → 夹角 90°,相似度 ≈ 0
  • 意思相反的文本 → 夹角 180°,相似度 = -1

回到 RAG:向量检索就是这样工作的

RAG 的检索过程,就是把上面的逻辑倒过来:

  1. 入库时:把每篇文档的每个片段都通过 Embedding 模型转成向量,存进向量数据库
  2. 查询时:把用户的问题也转成向量
  3. 匹配时:计算问题向量和所有文档向量的余弦相似度,找出最接近的那几个片段
用户问题:去年第三季度我们赚了多少钱?
    │
    ▼  Embedding 模型
    │
[0.23, -0.56, 0.91, ...]
    │
    ▼  跟库里所有文档向量算相似度
    │
文档中匹配到的内容:Q3营收同比增长15.3%(相似度 0.87)
                 去年全年营收1.2亿元(相似度 0.45)
                 公司成立于2018年(相似度 0.12)
    │
    ▼  取 Top-K,拼入 Prompt
    │
LLM 基于这些内容生成回答

向量检索不只是「找到包含关键词的文档」,而是「找到意思最相近的内容」。这也解释了为什么在 RAG 中,分块和向量化的质量决定了检索的天花板——如果文档切得不好、向量化得不准确,后面用多好的 LLM 也弥补不了。


参考资料

  1. Mikolov et al., Efficient Estimation of Word Representations in Vector Space, arXiv:1301.3781, 2013 — Word2Vec,向量化技术的奠基论文
  2. Reimers & Gurevych, Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks, EMNLP 2019 — 现代 Embedding 模型的基础架构
  3. Datawhale, hello-agents, 第八章 记忆与检索, https://github.com/datawhalechina/hello-agents — 从认知科学到向量检索的实践教程