余弦相似度计算文本相似度的原理是什么?它对向量长度敏感吗?

发布时间:2026/7/26 9:53:10
余弦相似度计算文本相似度的原理是什么?它对向量长度敏感吗? 余弦相似度计算文本相似度一、原理余弦相似度通过衡量两个向量在多维空间中的夹角余弦值来判断相似度核心思想是方向一致即相似忽略向量长度。公式cos(A, B) (A · B) / (||A|| · ||B||) Σ(a_i · b_i) / ( √Σa_i² · √Σb_i² )A · B向量点积反映共同分量的累积||A||、||B||向量 L2 范数起归一化作用取值范围[-1, 1]文本相似度场景中通常[0, 1]词频非负文本向量化流程构建词表从语料统计所有不重复词每个词对应一个维度。向量化每篇文本表示为词表维度向量分量通常为词频TFTF-IDF抑制高频虚词词向量平均word2vec/BERT embedding计算余弦对两文本向量套用公式。示例文本A猫 喜欢 吃 鱼 文本B狗 也 喜欢 吃 鱼 词表[猫, 狗, 喜欢, 吃, 鱼] A向量[1, 0, 1, 1, 1] B向量[0, 1, 1, 1, 1] 点积 00111 3 ||A|| √4 2 ||B|| √4 2 cos 3 / (2·2) 0.75相似度 0.75判定为较相似。二、对向量长度是否敏感不敏感。这是余弦相似度区别于欧氏距离等度量最关键的特性。原因分母||A||·||B||将两个向量各自归一化为单位向量相当于只比较方向长度信息被完全消除。A [1, 1, 1] ||A|| √3 B [2, 2, 2] ||B|| √12 2√3 长度是 A 的 2 倍 cos(A, B) (1·21·21·2) / (√3 · 2√3) 6/6 1.0A 和 B 长度差 2 倍但方向完全一致余弦相似度为 1完全相似。对比欧氏距离欧氏距离 d(A, B) √[(1-2)²(1-2)²(1-2)²] √3 ≈ 1.732欧氏距离会因长度差异给出不相似的判断而余弦相似度正确识别出方向一致。三、长度不敏感的实际意义1. 长短文本可比一篇 1000 字新闻和一句 20 字摘要若主题一致余弦相似度仍可较高欧氏距离会因向量长度悬殊而失效2. 词频绝对值差异不影响文档 A 中AI出现 10 次文档 B 中AI出现 100 次但相对比例一致余弦相似度关注的是词项分布的形状而非绝对计数3. 适合稀疏高维文本向量文本向量通常是上万维稀疏向量词表大余弦相似度计算高效且符合语义直觉。四、何时长度不敏感是缺点场景问题文本长度本身携带信息如区分短评论与长论文余弦相似度会丢失该信号词频绝对值重要如 TF-IDF 中高频词的绝对权重差异被抹平Magnitude-aware 任务推荐系统中用户活跃度评分数量应影响相似度计算此时应改用欧氏距离、皮尔逊相关系数或对余弦相似度做长度加权修正。五、一句话总结余弦相似度通过夹角余弦衡量文本向量方向一致性对向量长度不敏感归一化消除长度这使其特别适合长短文本对比和稀疏高维文本向量但当文本长度本身携带语义信号时这种不敏感反而成为局限需结合其他度量使用。