向量让世界拥有坐标,点积让坐标之间的关系可以被计算。
上一篇讲向量时,我们说,AI处理文字的第一步,是把词、句子甚至整篇文档变成高维空间里的坐标。
但有了坐标,只解决了“它在哪里”。接下来还有一个更重要的问题:“猫”和“狗”为什么应该比“猫”和“数据库”更接近?计算机不会凭感觉判断语义,它需要把“接近”变成一个可以计算的数字。点积就是其中最基础的工具之一。
点积真正比较的,是两个方向有多一致
先别急着看公式。想象两个箭头:如果它们几乎指向同一个方向,我们会觉得它们很像;如果一个向东、一个向北,关系就弱很多;如果方向完全相反,它们甚至可以表现出某种相反关系。向量也是如此。
a · b = |a||b| cos θ
这里真正值得看的不是计算过程,而是最后那个 cos θ。它把两个向量之间的夹角变成了数字。方向越接近,夹角越小,cos θ 越接近 1;两个方向互相垂直时接近 0;方向相反时则可能小于 0。
点积是在问:这两个向量有多朝着同一个方向。
这就让原本模糊的“它们是不是相似”,第一次变成了可以计算的问题。
图1|点积把“方向是否一致”变成一个可计算的数值
AI比较的不是文字,而是文字背后的向量
假设 Embedding 模型把几个词映射成向量。“猫”和“狗”的向量可能在很多维度上具有相似结构,而“数据库”位于完全不同的方向。于是系统不用真正去比较中文字面本身,只需要计算这些向量之间的关系,就可能得到:
similarity(猫, 狗) > similarity(猫, 数据库)
实际系统里,经常使用的是余弦相似度。它主要比较方向,尽量排除向量长度的影响:
cos θ = (a · b) / (|a||b|)
如果向量已经归一化,长度都为 1,那么点积就等于余弦相似度。这也是为什么向量检索系统里,经常会看到 dot product、cosine similarity 这些指标。它们背后做的事情很接近:把“表示有多接近”转化成高维空间里的几何关系。
RAG为什么能够“按意思找资料”
用户问“公司员工出差可以报销哪些费用?”时,RAG 会先把问题转换成向量,再与知识库中大量文档片段的向量进行比较。即使某份制度里写的是“差旅期间发生的交通、住宿及相关费用……”,没有使用完全相同的词,只要 Embedding 后的表示足够接近,它仍然可能被检索出来。
语义检索的本质,是把问题和资料放进同一个高维空间,再寻找表示最接近的那些向量。
图2|RAG把“意思接近”转化成同一向量空间里的邻近关系
Attention里也有点积,但做的是另一件事
点积在 Transformer 里还有一个更重要的用途。Attention 中最核心的一步,是计算 QKᵀ,也就是拿 Query 和 Key 做点积。这里不能简单理解成“两个词意思有多像”。更准确地说,它是在计算:对于当前这个 Query,哪个 Key 更加匹配、更加值得关注。
这些点积得到的只是原始分数。标准的 Scaled Dot-Product Attention 还会先按 Key 的维度做缩放:
QKᵀ / √dₖ
然后经过 Softmax,把这一组分数转换成非负且总和为 1 的注意力权重。可以把这个过程简单理解为:点积负责打分,Softmax 负责把这些分数变成“注意力应该怎么分配”。
例如一句话里有多个 Token,模型处理当前 Token 时,会先计算它与其他 Token 之间的匹配程度,然后形成不同大小的注意力权重,再据此汇总相应的信息。
图3|Attention 中:点积负责匹配打分,Softmax 把分数变成注意力权重
所以同一个数学动作,在不同地方承担着不同工作:在 Embedding 检索中,点积可以帮助比较两个表示是否接近;在 Attention 中,点积则帮助计算当前 Query 与哪些 Key 更加匹配,随后再由 Softmax 形成注意力分配。底层思想却是一致的:先把对象表示成向量,再计算向量之间的关系。
点积真正重要的地方
人类看到“猫”和“狗”,可以凭经验说它们比较接近。计算机不能直接这么做。AI必须先把这种模糊关系变成数字,才能参与后续计算。
向量解决的是一个对象在高维空间里的位置;点积进一步解决的是两个向量之间存在什么样的方向关系。到了这一步,很多原本只能用语言描述的东西——相似、相关、匹配、关注——开始变成可以计算的数值。
向量让世界拥有坐标,点积让坐标之间的关系可以被计算。
而下一篇要讲的 Attention,就是进一步把这种关系变成权重,再用这些权重决定:当前这个 Token 到底应该从哪些 Token 那里拿走多少信息。