AI技术学习笔记
← 全部笔记
代码练习

用 Python 计算余弦相似度

通过一个短小练习理解向量方向的相似程度。

练习目标

余弦相似度用两个非零向量夹角的余弦值表示方向的接近程度。结果在 -1 到 1 之间。它关注方向,不直接反映向量长度的差异。

实现思路

先计算点积,再分别计算两个向量的长度,最后用点积除以长度乘积。输入应具有相同维度,且不能是零向量。下面的例子使用 Python 标准库。

代码

import math

def cosine(a, b):
    if not a or len(a) != len(b):
        raise ValueError("向量需非空且维度一致")
    norm_a = math.sqrt(sum(x * x for x in a))
    norm_b = math.sqrt(sum(x * x for x in b))
    if norm_a == 0 or norm_b == 0:
        raise ValueError("不能使用零向量")
    return sum(x * y for x, y in zip(a, b)) / (norm_a * norm_b)

print(round(cosine([1, 0], [1, 1]), 4))
# 0.7071

结果的含义

同向向量的相似度是 1,正交向量的相似度是 0。文本向量的相似度还取决于向量如何生成,不能把这个数值直接当作事实正确率。