ARTICLE
余弦相似度
余弦相似度 (Cosine Similarity) 余弦相似度 (Cosine Similarity) 是一种度量两个非零向量在向量空间中方向一致性的指标,定义为两向量夹角的余弦值。其取值范围为 [-1, 1]:当两向量方向完全相同时取 1,正交时取 0,相反时取 -1。余弦相似度仅关注向量的方向而忽略其长度(模长),这一特性使其在文本分析、信息检索、推荐系
余弦相似度 (Cosine Similarity)
余弦相似度 (Cosine Similarity) 是一种度量两个非零向量在向量空间中方向一致性的指标,定义为两向量夹角的余弦值。其取值范围为 :当两向量方向完全相同时取 ,正交时取 ,相反时取 。余弦相似度仅关注向量的方向而忽略其长度(模长),这一特性使其在文本分析、信息检索、推荐系统以及经济学中涉及相对结构比较的场景中具有广泛的应用。
数学定义
设 和 为 中的两个非零向量。其余弦相似度定义为:
其中 表示内积(点积), 和 分别表示两向量的欧几里得范数( 范数)。该公式源自柯西-施瓦茨不等式,该不等式保证分母不会小于分子的绝对值,从而余弦值始终落在 区间内。
几何直观与尺度不变性
从几何角度看,余弦相似度衡量的是向量在空间中指向的接近程度。两个向量可能具有截然不同的长度,但只要它们指向相近的方向,余弦相似度就接近 。这一性质被称为尺度不变性(Scale Invariance):对任意正标量 ,有 。
尺度不变性是余弦相似度区别于欧几里得距离等基于绝对偏差的度量方式的关键特征。在文本挖掘中,这意味着两篇长度悬殊但主题相同的文档仍会被判定为高度相似——因为文档向量通常由词频(或 TF-IDF 权重)构成,长文档的词频分量更大(即向量更长),但余弦相似度过滤掉了文档长度的影响。这一特性也使余弦相似度在处理稀疏矩阵时表现出色:大多数文本向量中大量维度为零,向量长度主要由少数非零维度的取值决定,方向信息则更能反映内容本质。
与其他相似度/距离度量的对比
余弦相似度属于相似性度量家族中的角度型度量,需要与以下常见度量进行区分:
- 欧几里得距离(Euclidean Distance):衡量向量端点之间的直线距离,对向量长度和方向均敏感。两个方向相同但长度不同的向量,欧几里得距离非零,而余弦相似度为 。当数据已标准化为单位长度(即在单位球面上)时,欧几里得距离与余弦相似度之间存在单调递减关系:。
- 曼哈顿距离(Manhattan Distance):又称 距离,衡量各维度绝对偏差之和。同样不具备尺度不变性,且对异常维度更为敏感。
- Jaccard 相似系数:用于二值向量或集合的比较,定义为交集大小与并集大小之比。与余弦相似度不同,Jaccard 忽略特征的数值大小,仅关注特征是否出现。
- 皮尔逊相关系数:余弦相似度在经过中心化处理(减去均值)后的特例。设 ,则 与 的余弦相似度即为皮尔逊相关系数。这一关系在协同过滤中至关重要。
文本分析与自然语言处理
在自然语言处理(NLP)中,余弦相似度是文档相似度计算的核心工具。标准流程如下:首先构建词袋模型(Bag of Words),将每篇文档表示为一个 维向量,其中 为词汇表大小,每个分量对应某个词条的TF-IDF(词频-逆文档频率)权重。随后,任意两篇文档的相似度通过其 TF-IDF 向量的余弦相似度来衡量。
TF-IDF 权重的设计天然契合余弦相似度:TF 反映了词在文档内的重要性,IDF 削弱了跨文档的常见词(如"的"、"是"),使得真正具备主题区分力的词汇占据主导。给定查询向量 和文档向量 ,信息检索系统按余弦相似度降序排列文档,以返回与查询最相关的文档。
在词嵌入(Word Embeddings)时代,余弦相似度进一步成为衡量词向量、句向量乃至文档向量语义相似度的标准工具。以Word2Vec、GloVe 或基于 Transformer 的预训练模型(如BERT)生成的稠密向量在高维语义空间中编码了丰富的语义和句法信息,余弦相似度能有效捕获词语之间的类比关系:例如, 与 的余弦相似度极高。这类语义向量的方向比其长度更能反映语义属性,因为向量的范数往往与词频或上下文多样性相关,而非语义本身。
推荐系统与协同过滤
推荐系统中的协同过滤算法广泛依赖余弦相似度。在基于用户的协同过滤中,每个用户被表示为其对各物品评分的向量;两个用户的余弦相似度反映了其评分偏好的方向一致性。在基于物品的协同过滤中,相似度矩阵通过对物品评分向量的余弦计算构建,系统据此推荐与用户历史偏好物品最相似的物品。
余弦相似度在推荐系统中的优势在于其对评分尺度的不敏感性:一个习惯于给高分(如 4-5 分)的用户与一个习惯给中低分(如 2-3 分)但对物品相对偏好一致的用户,其评分向量的余弦相似度仍然很高。这正是方向而非长度决定相似度的直观体现。实践中常结合中心化处理(即减去用户平均评分)来消除个体评分偏误,此时余弦相似度等价于皮尔逊相关系数。
经济学与金融学中的应用
余弦相似度在经济学和金融学中存在若干重要的应用场景。
在产业组织理论中,余弦相似度可用于度量不同行业或不同企业之间的投入结构相似性。将每个行业的生产要素投入比例表示为一个向量(如劳动力份额、资本份额、原材料份额、能源份额),任意两个行业的投入结构相似度即为此类向量的余弦值。类似地,在国际贸易研究中,各国出口产品结构(以产品分类代码为维度、以出口份额为分量)的余弦相似度可用于衡量两国在比较优势上的竞争程度或互补程度。
在金融经济学中,余弦相似度被用于投资组合相似性分析。将每个投资组合在各资产类别上的配置权重表示为向量,两个基金经理的持仓余弦相似度反映了其投资风格的一致性。监管机构可利用这一度量监测系统性风险:当多数机构的持仓向量方向高度一致时,市场在面临冲击时易出现同向抛售,加剧羊群效应与流动性危机。
在经济预测和宏观经济学中,余弦相似度可用于比较不同预测机构对一组经济指标(GDP 增长率、CPI、失业率等)预测值的方向模式。高余弦相似度表明预测机构的判断框架趋同,而低相似度则可能揭示异质性的信息集或模型假设。
与相关系数的形式联系
如前所述,余弦相似度与皮尔逊相关系数之间存在精确的数学联系。设 ,定义中心化向量 ,则:
这一关系揭示了两者的本质区别:相关系数衡量的是偏离均值的协同变动模式(即"相对"一致性),而余弦相似度衡量的是原始值的"绝对"方向一致性。当向量分量的均值接近零时,二者趋同;当均值远离零时,二者可能给出截然不同的判断。这一区分在计量经济学和机器学习的特征工程中具有重要实践意义。
局限性、常见误区和注意事项
尽管余弦相似度应用广泛,但其使用时需注意以下局限。
- 对零值维度的敏感性:在稀疏高维空间中(如文本分析),两个向量可能因为共有大量零值维度而表现出较高的余弦相似度,但这并不意味着它们在非零维度上真正相似。实践中通常结合 TF-IDF 或主成分分析(PCA)进行降维以缓解这一问题。
- 不对称性信息丢失:余弦相似度仅考虑方向,完全忽略向量长度。在某些场景下(如电商中购买金额预测),用户消费金额的绝对大小(向量长度)本身包含重要的信息,不应被过滤。此时欧几里得距离或经归一化的混合度量可能更合适。
- 非负假设:在文本 TF-IDF 或词频向量中,所有分量均为非负值,因此余弦相似度也被限制在 内。一旦数据中出现负值(如经中心化处理的评分数据),余弦相似度可能为负,这在某些应用中有意义(负相关),但在仅关注正相似性的场景中需要特殊处理。
- 维度诅咒:在高维空间中,随机向量的方向趋于正交(即余弦相似度趋近于 ),这降低了余弦相似度在高维非结构化数据上的区分力。流形学习和降维技术常被用于预处理此类数据。
- 与语义相似度的鸿沟:在 NLP 中,基于词汇重叠的 TF-IDF 向量余弦相似度无法捕捉同义词替换、否定句式或语序变化带来的语义差异——"不快乐"和"快乐"的 TF-IDF 余弦相似度可能很高,但语义相反。深度学习嵌入模型(如 Sentence-BERT)通过在训练中直接优化余弦相似度损失函数,部分弥合了这一鸿沟。
计算实践
在实际工程中,余弦相似度的高效计算依赖于线性代数库的向量化操作。对于大规模文档集,预先将所有文档向量按行堆叠成矩阵 ,并对其行向量进行 归一化(即每个行向量除以其模长),则任意两个文档 的余弦相似度等于归一化后矩阵第 行与第 行的内积,即 的对应元素。这一矩阵乘法的形式允许利用 GPU 或分布式计算框架(如Apache Spark)实现亚秒级的大规模相似度检索。
余弦相似度在概念上的简洁性、计算上的高效性以及其在方向判别上的天然优势,使其成为从文本挖掘到经济结构分析等诸多领域中不可或缺的基础工具。理解其与欧几里得距离、相关系数等替代度量之间的数学联系与适用边界,是正确使用该度量的前提。