向量归一化通过将其缩放到单位长度(大小为 1)来转换嵌入,同时保留其方向。这是通过将向量的每个分量除以其欧几里得范数(平方和的平方根)来完成的。主要效果是相似度计算(例如余弦相似度)等同于归一化向量的点积。例如,如果两个嵌入在归一化前的点积为 0.8,则归一化后它们的余弦相似度也将是 0.8。这简化了比较,因为余弦相似度直接测量向量之间的角度,而忽略了大小差异。
归一化提高了依赖于向量相似度的任务的一致性。例如,在推荐系统中,用户和物品嵌入通常会被归一化,以确保推荐基于兴趣的一致性(向量方向),而不是受欢迎程度(向量大小)。类似地,在语义搜索中,对文本嵌入(例如,来自 BERT 等模型)进行归一化可以确保文档相关性完全根据语义接近度来判断,而不是文档长度。一个实际例子是在最近邻搜索中使用归一化嵌入之间的余弦相似度:向量如 [3, 4]
(大小为 5)和 [6, 8]
(大小为 10)在归一化后会变成 [0.6, 0.8]
,尽管原始大小不同,但它们的相似度分数为 1.0。
然而,归一化并非总是带来好处。如果大小携带有意义的信息——例如,在嵌入中,更高的值表示置信度或频率——归一化可能会丢弃有用的信号。在垃圾邮件检测模型中,电子邮件嵌入的大小可能反映了可疑关键词的数量,而归一化会将其抹去。开发者必须根据任务来决定:对于侧重方向的任务(语义相似度)使用归一化,但在大小很重要的任务(异常检测)中避免使用它。scikit-learn 的 Normalizer
或手动缩放(vector / np.linalg.norm(vector)
)等工具使得实现变得简单明了。