【零零碎碎】余弦相似度介绍
余弦相似度是机器学习和人工智能里的“万能胶水”,凡是你需要比较“两个东西是否相似”,又不想被它们的绝对大小影响时,它几乎都能派上用场。句子 “我喜欢机器学习” 和 “机器学习是我的爱好”,虽然没有相同词,但转成向量后,余弦相似度会很高 → 模型知道它们意思差不多。只要你的数据能表示成向量,而你关心的是“它们指向是否一致”,就能用余弦相似度。算法会比较帧和帧之间、片段和片段之间的相似度,用余弦相似度
1. 先把问题形象化
想象你和朋友各自拉了一根绳子,从同一个钉子拉出去。
- 如果你俩拉的方向几乎一样,那么角度很小 → 相似度高。
- 如果你俩拉的方向完全相反,180°,那就相似度很低,甚至是 -1。
- 如果拉的是完全垂直的方向,90°,那就是 0,相似度没有。
余弦相似度就是计算两根“向量绳子”夹角的余弦值:
cosθ=A⋅B∣∣A∣∣ ∣∣B∣∣cosθ=A⋅B∣∣A∣∣ ∣∣B∣∣ cosθ=A⋅B∣∣A∣∣ ∣∣B∣∣\cos \theta = \frac{A \cdot B}{||A|| \, ||B||} cosθ=A⋅B∣∣A∣∣ ∣∣B∣∣cosθ=∣∣A∣∣∣∣B∣∣A⋅B
其中:
- A⋅BA \cdot BA⋅B 是点积(对应两个向量一一相乘再求和)。
- ∣∣A∣∣||A||∣∣A∣∣ 是向量 A 的长度(欧几里得范数)。
- 分母是用来做归一化,保证结果只跟“方向”有关,而不跟“向量有多长”有关。
2. 为什么不用欧几里得距离?
欧几里得距离比较的是两个点的“直线距离”,但在很多场景里我们更关心方向。
举个例子:
向量 A=[10,10],B=[100,100]A = [10, 10],B = [100, 100]A=[10,10],B=[100,100]
它们的方向完全一样,但距离非常远。
如果用欧几里得距离,会说它们差很多;
用余弦相似度,会说它们是“完全同向”,相似度 = 1,这显然更合理。
3. 在 segsim 里的作用
segsim 是视频分割算法,特征提取后你得到很多帧的向量(每帧可能是 2048 维)。
算法会比较帧和帧之间、片段和片段之间的相似度,用余弦相似度判断“它们内容是否相似”。
如果相似度高,就可能属于同一动作或同一片段。
4. 快速代码演示
用 Python 看一眼就更清楚了:
import numpy as np
A = np.array([1, 2, 3])
B = np.array([2, 4, 6]) # 方向完全相同
cos_sim = np.dot(A, B) / (np.linalg.norm(A) * np.linalg.norm(B))
print("余弦相似度:", cos_sim)
输出会是 1.0
,说明这两个向量方向完全一样。
如果把 B 改成 [-2, -4, -6]
,就会输出 -1.0
,说明方向完全相反。
5.余弦相似度的使用场景
余弦相似度是机器学习和人工智能里的“万能胶水”,凡是你需要比较“两个东西是否相似”,又不想被它们的绝对大小影响时,它几乎都能派上用场。
5.1 文本领域:语义相似度
这是它最出名的用法。
- 搜索引擎:把用户查询和文档都转成向量,算余弦相似度,排相似度最高的文档在前面。
- 推荐系统:用用户行为(点击、点赞、购买)转成向量,算相似用户,做“协同过滤推荐”。
- NLP 语义匹配:比如问答系统,把问题和候选答案转成向量,找和问题最接近的答案。
举例:
句子 “我喜欢机器学习” 和 “机器学习是我的爱好”,虽然没有相同词,但转成向量后,余弦相似度会很高 → 模型知道它们意思差不多。
5.2 计算机视觉:特征匹配
- 人脸识别:把人脸图像通过神经网络提取成特征向量,算余弦相似度,高于阈值就认为是同一个人。
- 图像检索:找相似图片,不直接比像素,而是比向量方向。
- 视频分割(你在用的 segsim):比较相邻帧特征,看动作是否连续。
5.3 聚类与分类
在高维数据里,直接算欧几里得距离有时候不太靠谱,因为高维空间里点都很稀疏。
用余弦相似度能更好衡量“同一类样本方向是否接近”。
- 文本聚类:KMeans 有时会换成基于余弦相似度的版本。
- 语义聚类:把语义相近的向量聚在一起。
5.4 向量数据库 & 大模型
- 向量数据库(如 FAISS、Milvus):检索阶段几乎都用余弦相似度或点积。
- 大模型上下文检索(RAG):用户问题转成向量,与知识库向量比相似度,找最相关的段落拼到提示里。
5.5 其他有趣的地方
- 音乐推荐:用户听歌历史可以向量化,找相似用户。
- 网络分析:比较两个人社交网络结构的相似程度。
- 基因数据分析:高维基因表达向量也能用余弦相似度判断相似性。
你可以把它想象成“万能的方向比较器”。只要你的数据能表示成向量,而你关心的是“它们指向是否一致”,就能用余弦相似度。
更多推荐
所有评论(0)