P2-3.4 内积(dot product)、长度(norm)、距离(distance)、相似度(similarity)¶
Section ID:
P2-3.4Version:v2026.07.23
读完向量(vector)、矩阵(matrix)、矩阵乘法(matrix multiplication)之后,下一道问题自然会留下来:两个向量到底有多像、它们相隔多远、怎样区分一个很大的向量和一个只是方向相似的向量?这正是点积(dot product)、长度(norm)、距离(distance)、相似度(similarity)要回答的问题。
如果说矩阵乘法是 把向量组合起来生成新值的计算,那么点积、距离、相似度就是 拿向量彼此比较的计算。因此,在做出向量之后,还要一起抓住“该用什么标准去读这些向量”。需要快速回看术语时,也可以一起查看概念词汇表。
核心判断标准:点积(dot product)、长度(norm)、距离(distance)、相似度(similarity)¶
- 能把点积(dot product)解释成“把两个向量对应成分相乘后再相加得到的值”。
- 能把长度(norm)读成向量大小或强度的摘要值。
- 能区分距离(distance)是在量分离,相似度(similarity)是在量相像。
- 能说明比较标准会随着“是不是只关心方向”与“大小也是否重要”而改变。
- 能为阅读 k-NN、embedding、similarity search 建立起最小的比较语言。
先抓住的一个场景¶
这一节最先要抓住的,是在同一套标准下比较几组向量。
| 比较对象 | 第一眼会看到什么 | 现在要抓住的问题 |
|---|---|---|
q = [1, 1], a = [2, 2] | 方向相同,但大小更大 | 重要的是方向,还是大小也重要? |
q = [1, 1], b = [1, 0] | 少了一根轴,所以没那么像 | 它们是坐标上接近,还是只在用途上部分相似? |
q = [1, 1], c = [10, 10] | 很远,但方向几乎一样 | 距离和余弦相似度会不会给出不同答案? |
所以,这一节的核心不是简单地 算一个向量,而是先决定 什么才算一样。
三个基准¶
| 基准 | 为什么重要 | 本节所需的理解水平 |
|---|---|---|
点积是读 两个向量一起运动了多少 的摘要值 | 因为它把矩阵乘法和相似度计算连了起来。 | 读懂为什么要把对应位置相乘再相加。 |
| 长度和方向不是同一份信息 | 因为这样才能区分“很大的向量”和“只是方向相似的向量”。 | 把 大小 和 方向 看成不同概念。 |
| 距离和相似度回答的是不同问题 | 因为这样不会把 k-NN 和 embedding 检索混成同一种问题。 | 把 相隔多远 和 有多像 分开阅读。 |
点积是把两个向量折成一个数字的计算¶
点积(dot product)会把相同位置上的值相乘,然后把所有结果加起来,把两个向量之间的关系折叠成一个数字。
这种计算在我们想快速概括 两个向量在同方向成分上重合了多少 时很有用。也正因为这样,它会自然连回矩阵乘法的说明,因为矩阵乘法里的一个格子,最终也可以看成某一行和某一列的点积。
先看最小的例子:
点积值大,并不自动表示 好。更安全的读法是:它是一个 把两个向量关系压成一个数字的摘要值。如果同方向成分重合得多,点积可能会变大;如果反方向成分很强,值就可能变小,甚至变成负数。
再更短地整理一次:
| 问题 | 点积看得比较好的是什么 |
|---|---|
| 同方向成分重合了多少? | 它看得比较好 |
| 绝对距离差到底有多大? | 它并不直接回答 |
| 更长的向量会不会得更高的分数? | 有可能会 |
长度(norm)是在读向量的大小¶
向量长度(norm)是一个摘要值,用来表示这个向量离原点有多远,或者整体强度有多大。
对初学者来说,先抓住最常见的 2-范数就够了。
当长度大时,表示这些值整体伸得更远;当长度小时,表示向量离原点更近。
例如:
这可以立刻读成 3-4-5 三角形。相对地,[30, 40] 和它方向几乎一样,但长度是它的 10 倍。正因为有这种差别,我们才必须把 方向相似但大小不同的向量 单独分开看。
放成比较表会更清楚。
| 向量 | 方向 | 长度 |
|---|---|---|
[3, 4] | 参考方向 | 5 |
[30, 40] | 几乎相同的方向 | 50 |
[4, -3] | 不同方向 | 5 |
距离和相似度回答的是不同的问题¶
距离(distance)和相似度(similarity)虽然都是比较标准,但它们回答的并不是同一个问题。
| 标准 | 它先问的是什么 |
|---|---|
| 距离(distance) | 它们相隔多远? |
| 相似度(similarity) | 它们到底有多像? |
在基于距离的思路里,我们经常先想 越近,就越可能相似。相对地,相似度更直接追问 它们方向是否一致、它们用法是否相近。
所以到了后面:
k-NN会先在距离标准下找附近的例子。embedding retrieval会先在相似度标准下把相似候选提上来。
看一个小例子。
a和q几乎同方向,而且更长。b的长度差不多,但少了一根轴。
如果问题是 哪一个向量方向最相似,那么 a 会更自然。可如果问题是 哪个点在坐标上最近,计算结果就可能不一样。所以读比较问题时,第一步是先决定 什么才算一样。
把读者可以立刻拿来用的“问题 -> 标准”表留在这里:
| 问题场景 | 先想到的标准 |
|---|---|
| 选择最近的样本 | 距离(distance) |
| 找方向或意义最相似的向量 | 相似度(similarity)、余弦相似度 |
| 理解为什么矩阵乘法中的一个格子是那样算的 | 点积(dot product) |
| 观察向量的强度或大小 | 长度(norm) |
为什么还需要把余弦相似度单独拿出来¶
余弦相似度(cosine similarity)是一种更强调“方向是否相似”而不是“绝对大小是否接近”的比较标准。即使两个向量方向相同,它们的绝对长度也可能差很多,因此 到底更该看哪一个 会随着问题而变化。
例如:
- 像购买金额这样的问题,大小本身可能很重要。
- 像句子 embedding 这样的问题,方向相似往往比大小更重要。
所以,余弦相似度会在向量检索和 embedding 语境里反复出现。
例如,[1, 1] 和 [10, 10] 大小差很多,但方向相同。距离会把它们读成相隔很远,而余弦相似度会判断它们方向几乎一致。相反,[1, 1] 和 [1, -1] 的长度可能看起来相近,但方向差异非常大。这就是为什么我们必须把 距离 和 方向相似 分开来读。
如果只留下一个非常简短的比较结果:
| 比较 | 距离视角 | 方向相似视角 |
|---|---|---|
[1, 1] vs [10, 10] | 很远 | 非常相似 |
[1, 1] vs [1, -1] | 只看长度可能像 | 方向非常不同 |
一个很短的判断标准¶
遇到向量比较问题时,先问下面三个问题就够了。
- 大小也重要,还是只关心方向?
- 我们是在找最近邻,还是在找最相似的表示?
- 被比较的向量是不是放在同一个空间、同一个维度里?
这三个问题一旦先整理清楚,distance、dot product、cosine similarity 到底哪个该先出现,就会少很多混乱。
检查清单¶
- 能把点积解释成
相同位置相乘再相加吗? - 能说明长度和方向是不同的信息吗?
- 能用一句话区分距离和相似度吗?
- 能说明为什么
[1, 1]和[10, 10]会在距离和余弦相似度里被读成不同结果吗? - 能说明为什么 k-NN 和 embedding 检索不是同一种比较问题吗?
- 遇到向量比较问题时,能先问
大小也重要吗,还是方向更重要?吗?
这些比较标准之后还会在哪些场景出现¶
| 后面再次遇到的场景 | 这里先留下的直觉 |
|---|---|
| Part 4 的 k-NN | 说“找附近的例子”,其实就是在先选一个距离标准。 |
| Part 6 的 embedding | 说“把意义放进向量”,其实也意味着需要一套向量比较标准。 |
| Part 6 的向量检索 | 说“先把相关候选排前面”,其实就是在建立一个相似度顺序。 |
所以这里真正重要的,不是停在 做出了向量,而是继续读到 这些向量将如何被比较。
来源与参考资料¶
- NumPy Developers,
numpy.dot. 因为它直接说明了 1 维数组时读作内积(inner product)、2 维数组时读作矩阵乘法,所以它支撑了本节的点积直觉。 https://numpy.org/doc/stable/reference/generated/numpy.dot.html / 确认日期: 2026-07-19 - NumPy Developers,
numpy.linalg.norm. 因为它可以直接确认向量范数和矩阵范数的基本含义,所以它支撑了本节把 norm 读成“大小摘要值”的说明。 https://numpy.org/doc/stable/reference/generated/numpy.linalg.norm.html / 确认日期: 2026-07-19 - scikit-learn developers,
cosine_similarity. 因为它直接把余弦相似度解释为归一化点积(normalized dot product),所以它加强了本节把相似度与方向比较联系起来的说明。 https://scikit-learn.org/stable/modules/generated/sklearn.metrics.pairwise.cosine_similarity.html / 确认日期: 2026-07-19