我们相信:世界是美好的,你是我也是。 来玩一下解压小游戏吧!

余弦相似度计算,这个是常见人工智能领域计算的基础。比如现在火的一塌糊涂的deepseek大模型等,这些回答的输出,都是基于(余弦)相似度计算的。找出最相似的问题的答案,输出到终端作为答案。

苏南大叔:什么是余弦相似度?python如何计算余弦相似度? - python计算余弦相似度
什么是余弦相似度?python如何计算余弦相似度?(图3-1)

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验总结。测试环境:win10python@3.12.3scikit-learn@1.6.1。在人工智能领域,任何两个要用来比较的事物,都可以量化为同一维度的向量(矢量),然后通过计算两者的余弦相似性来计算两者的近亲关系。

余弦相似度

余弦相似度(Cosine Similarity)是n维空间中两个n维向量之间角度的余弦。它等于两个向量的点积(向量积)除以两个向量长度(或大小)的乘积。下面的文字来自于百度百科:

"余弦相似性通过测量两个向量的夹角的余弦值来度量它们之间的相似性。0度角的余弦值是1,而其他任何角度的余弦值都不大于1;并且其最小值是-1。从而两个向量之间的角度的余弦值确定两个向量是否大致指向相同的方向。两个向量有相同的指向时,余弦相似度的值为1;两个向量夹角为90°时,余弦相似度的值为0;两个向量指向完全相反的方向时,余弦相似度的值为-1。这结果是与向量的长度无关的,仅仅与向量的指向方向相关。余弦相似度通常用于正空间,因此给出的值为-1到1之间。"

可以想象:在xy坐标系的二维空间内,两个具有相同起点(原点)的有方向的箭头(没有长度限制),两者之间的角度无限拉扯。重叠的时候,两者“最相似),值为1。九十度相交的时候,不相似,值为0。一百八十度相反的时候,特别不相似,值为-1。这个相似度就在[-1,1]之间无限拉扯。这就是【余弦相似度】的真相。

下面的代码,都是基于sklearn库的。

pip install scikit-learn
Plain text

sklearn 计算余弦

Python中,可以使用多种库来计算余弦相似度。先来测试最常见的sklearn包。用于计算的矢量的实际载体是两个numpy数组。代码如下:

from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
vector1 = np.array([100, 155, 999])
vector2 = np.array([1, 99, 888])
similarity = cosine_similarity(vector1.reshape(1, -1), vector2.reshape(1, -1))
print(similarity)
Python

苏南大叔:什么是余弦相似度?python如何计算余弦相似度? - 相似度计算1
什么是余弦相似度?python如何计算余弦相似度?(图3-2)

0.99的相似度,证明相似度非常高。

关于ndarray多维变一维的操作,可以参考:

计算余弦相似度矩阵

也可以同时计算多个向量的余弦相似度。代码类似如下:

from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
vector1 = np.array([100, 155, 999])
vector2 = np.array([1, 99, 888])
vectors = np.array([vector1, vector2])
similarity_matrix = cosine_similarity(vectors)
print(similarity_matrix)
Python

这样,similarity_matrix将是一个矩阵,其中similarity_matrix[i, j]表示向量i和向量j之间的余弦相似度。

苏南大叔:什么是余弦相似度?python如何计算余弦相似度? - 相似度矩阵
什么是余弦相似度?python如何计算余弦相似度?(图3-3)

相关文章:

结语

本文使用scikit-learn库里面的cosine_similarity(),来计算余弦相似度。这种方法适用于文本数据的特征向量、文档向量等场景,一般先对文本进行向量化(TF-IDF或词嵌入),然后计算余弦相似度。很多其它的python代码包,都可以计算余弦相似度。所以,并不需要拘泥于这一个sklearn库。

更多苏南大叔的人工智能经验文章,可以参考:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python    ai