WMX · 随记
·AI· 3 分钟阅读

点积分数:方向相同,长度不同也会改变排序

两个候选向量方向相近,但长度差很多,点积可能主要反映长度。选择相似度之前,需要知道模型训练时如何使用向量。

▶ 本文含视频讲解
▶ 教学视频手动播放 · 英语讲解

Attention in transformers, visually explained

结合模型讲解理解本文实验的背景;正文提供可独立运行的简化示例。此为外部原版课程,多篇笔记可能共用;未剪辑为本文专属视频。

播放器需要能访问 YouTube 的网络;若这里无法加载,可打开原视频。本文与本地图解仍可独立阅读。

AI 系列概览:模型机制、系统边界与效果评估
AI 系列概览:模型机制、系统边界与效果评估 点击图片查看大图 ↗

问题从哪里出现

两个候选向量方向相近,但长度差很多,点积可能主要反映长度。选择相似度之前,需要知道模型训练时如何使用向量。

理解核心机制

点积同时受方向与范数影响,余弦相似度则除以双方范数。归一化向量的点积等于余弦相似度,但归一化会丢弃长度携带的信息。

动手做一个小实验

Python 3.11 或更新版本,仅使用标准库;将示例保存为 demo.py 后执行 python3 demo.py。数字与样本均为教学演示,不代表真实模型或服务器的测量结果。

Python10 行 · 可横向滚动
import math
def dot(a, b):
    return sum(x*y for x, y in zip(a, b, strict=True))
def cosine(a, b):
    return dot(a, b) / math.sqrt(dot(a, a) * dot(b, b))
query = [1.0, 1.0]
a, b = [1.0, 1.0], [10.0, 10.0]
assert dot(query, b) > dot(query, a)
assert abs(cosine(query, a) - cosine(query, b)) < 1e-12
print(dot(query, a), dot(query, b))

适用边界与常见误区

示例假定非零向量,生产代码要处理零范数和非法数值。不要跨不同编码器直接比较向量,也不要把相似度分数当作事实正确概率。

继续练习

构造方向略偏但长度很大的候选,比较两种排序,再对照所用 embedding 模型推荐的距离函数。

参考资料

阅读相关官方文档或原始资料 ↗

← 返回文章归档