余弦相似度函数
时间: 2025-05-15 21:05:46 浏览: 12
### 余弦相似度函数的计算与实现
#### 实现方法概述
余弦相似度是一种用于衡量两个向量间夹角大小的方法,其值范围通常在 [-1, 1] 之间。当两向量完全相同或方向一致时,余弦相似度为 1;当两者正交时,结果为 0;而当两者方向相反时,则为 -1[^1]。
以下是基于 Python 的一种常见实现方式:
```python
import numpy as np
def cosine_similarity(vector_a, vector_b):
"""
计算两个向量之间的余弦相似度。
参数:
vector_a (numpy.ndarray): 向量 A
vector_b (numpy.ndarray): 向量 B
返回:
float: 余弦相似度值
"""
dot_product = np.dot(vector_a, vector_b) # 计算点积
norm_a = np.linalg.norm(vector_a) # 计算向量 A 的模
norm_b = np.linalg.norm(vector_b) # 计算向量 B 的模
similarity = dot_product / (norm_a * norm_b)
return similarity
```
上述代码中,`np.dot()` 函数被用来计算两个向量的点积,而 `np.linalg.norm()` 则负责求解向量的 L2 范数(即向量长度)。最终通过点积除以两向量范数乘积的方式得出余弦相似度[^3]。
#### 使用预定义库简化实现
为了进一步提高效率并减少手动编码的工作量,还可以借助第三方库完成这一任务。例如,在 Scikit-learn 中提供了专门用于计算余弦相似度的功能模块:
```python
from sklearn.metrics.pairwise import cosine_similarity
# 假设输入数据已转换成二维数组形式
vectors = [[1, 2, 3], [4, 5, 6]]
result = cosine_similarity(vectors)
print("Cosine Similarity Matrix:\n", result)
```
此段代码会返回一个矩阵,其中每一项代表对应位置上的两组样本间的余弦相似度得分。
另外值得注意的是,某些自然语言处理工具包也集成了便捷接口来支持快速比较文档或者短语间的语义相近程度。比如 SpaCy 就允许开发者直接调用 `.similarity()` 方法获取任意两个 Doc 对象之间的关系强度[^2]:
```python
import spacy
nlp = spacy.load('en_core_web_md') # 加载英文模型
doc1 = nlp("Artificial intelligence is fascinating.")
doc2 = nlp("Machine learning techniques are intriguing.")
score = doc1.similarity(doc2)
print(f"Sentence Similarity Score: {score:.4f}")
```
以上展示了多种途径去构建以及应用余弦相似度函数于实际场景之中。无论是自行编写逻辑还是依赖成熟框架,都能有效达成目标需求。
阅读全文
相关推荐


















