余弦相似度(Cosine Similarity)是一种衡量两个非零向量之间方向相似性的数学方法,它通过计算这两个向量夹角的余弦值来判断它们是否“指向相近的方向”。
📌 核心思想
- 不关心向量的长度(大小) ,只关注它们的方向。
- 两个向量方向越接近(夹角越小),余弦相似度越接近 1;
- 方向完全垂直(90°),相似度为 0;
- 方向完全相反(180°),相似度为 -1。
因此,余弦相似度的取值范围是:
[−1, 1]
在文本、推荐系统等实际应用中,向量分量通常为非负数(如词频、TF-IDF权重),此时余弦相似度范围为 [0, 1] 。
✅ 举个例子(文本相似度)
句子A:这只皮靴号码大了。那只号码合适。
句子B:这只皮靴号码不小,那只更合适。
-
分词并构建词表 → 得到9个词
-
统计词频 → 转为向量
- A: (1, 1, 2, 1, 1, 1, 0, 0, 0)
- B: (1, 1, 1, 0, 1, 1, 1, 1, 1)
-
计算余弦相似度 ≈ 0.707
→ 结果接近1,说明两句话语义较相似。
🌐 常见应用场景
- 文本挖掘:判断两篇文档或句子是否主题相近
- 信息检索:搜索引擎匹配查询与文档
- 推荐系统:比较用户偏好向量(如电影评分)
- 大语言模型(LLM) :词向量/嵌入(embedding)之间的语义相似性(如“国王”和“王后”向量夹角很小)
特别地,像 OpenAI 的 embedding 模型会将所有向量归一化为单位长度(范数=1) ,此时余弦相似度简化为直接计算点积,大幅提升计算效率。
总结一句话:
余弦相似度衡量的是“方向是否一致”,而不是“距离有多近”。
这使得它在处理高维稀疏数据(如文本)时非常有效且高效。