发布时间:2025-01-28 17:01
目录
一、基本算法--余弦相似度
二、计算余弦相似度
2.1、python实现
2.2、sklearn
2.3、scipy ---最快
2.4、pytorch
三、参考
def python_cos(q_vec, b_vec):
"""
计算余弦相似度
:param q_vec: 一维数组
:param b_vec: 一维数组
:return:
"""
dot_q_b = 0
q_vec_length = 0
b_vec_length = 0
for q, b in zip(q_vec, b_vec):
dot_q_b += q * b
q_vec_length += q * q
b_vec_length += b * b
length = (q_vec_length ** (1 / 2)) * (b_vec_length ** (1 / 2))
cos_sim = dot_q_b / length # 向量的内积除以向量模长的积
return cos_sim
a = [1, 2, 2, 1, 1, 1, 0]
b = [1, 2, 2, 1, 1, 2, 1]
print(python_cos(a, b)) # cos_sim 0.9381941874331419。
from sklearn.metrics.pairwise import cosine_similarity
def cos(a, b):
"""
a和b都要是2维
"""
cos = cosine_similarity(a,b)
return cos
a = [[1,2,3],[3,2,1], [3,4,5]]
b = [[3,2,1],[1,2,3]]
print(cos(a, b))
'''结果 a中的每一项与b中每一项的相似度
[[0.71428571 1. ]
[1. 0.71428571]
[0.83152184 0.98270763]]
'''
注意这里的参数,a和b都必须是二维的,不然会报错;a和b中的元素个数不定。
import scipy.spatial
@coast_time
def cos(a, b):
'''
a和b都要是2维,a和b中的元素个数不定
'''
dis = scipy.spatial.distance.cdist(a,b,'cosine')
cos = 1 - dis[0]
return cos
a = [[1,2,3]]
b = [[3,2,1],[4,5,6], [2,2,3]]
print(cos(a, b))
'''结果
func cos coast time:0.00006230 s
[0.71428571 0.97463185 0.97230559]
'''
注意这里的参数,a和b的数据类型可以是数组、np.array();a和b都必须是二维的;a和b中的元素个数不定。这里dis可以理解为余弦距离,要用1-dis才是余弦相似度。
import torch
torch.set_default_tensor_type(torch.FloatTensor)
@coast_time
def torch_cos_new(a, b):
"""
a,b必须是tensor张量;torch_cos中有个bug,a和b的第一维只能是1,不然会出现错误结果
"""
cos = torch.cosine_similarity(a, b, dim=1)
return cos
a = torch.tensor([[1,2,3]]).float() # 转化为tensor张量
b = torch.tensor([[3,2,1],[4,5,6], [2,2,3]]).float()
print(torch_cos_new(a, b))
'''结果
tensor([0.7143, 0.9746, 0.9723])
func torch_cos_new coast time:0.00072610 s
'''
https://www.haitaoseo.com/950191.html 文章相似度检测工具(一种简单高效的算法)
https://github.com/zhao-dapeng/Cosine zhao-dapeng/Cosine
余弦相似度计算的实现方式_colourmind的博客-CSDN博客_余弦相似度计算代码
OpenCV4.5.5学习笔记(二):CMake配置Visual Studio2022+OpenCV4.5.5
Python实现桌面程序:PyQt5 + QtDesigner -- 界面设计与逻辑编写
Python报错SyntaxError:unexpected EOF while parsing的解决办法
k8s编排、Secret加密文件详解,configmap文件详解,基本操作
1人工智能概述------机器学习算法分类 (监督学习、回归问题、分类问题、无监督学习、半监督学习、强化学习)
python狗图像识别_TensorFlow实践教程:使用神经网络对犬种进行图像识别分类