这系列文章会以连载形式呈现,后面会不定时更新,旨在和大家一起分享学习相关的算法。
关于各个产品中的算法,像 csdn 等技术博客都有介绍,总结下来有以下几点:
- 代码形式
- 解释的层面和角度偏技术
- 缺乏实例
这就是我写这系列文章的动机,通过实例通俗易懂的语言来解释算法的逻辑和应用。
本文的结构如下:
- 余弦相似度的数学表达式
- 公式解读
- 应用实例
- 优缺点
数学表达式
假设平面存在向量 a 和向量 b,由向量的点积公式可得俩向量的夹角:
将向量 a、b 赋予坐标,如:a(x1,y1),b(x2,y2),带入上面公式,得到:
将向量 a、b 由平面推广到多维空间上(有相关论文已经证明推广到多维空间,公式仍然成立),得到:
公式解读
数学上,这些公式很好理解,只是简单的代换转化,那么余弦相似度是怎么引用到产品上的呢?余弦相似度一般会应用在研究两篇文本的相似程度上,这里有个思维的转换:我们先把文本当作是一个向量,里面出现的词频数量当作上述公式中多维向量的坐标,运用上面的公式就可以算出两个文本的相似程度;具体我们看一下下面的例子。
应用实例
例 文本1:“产品经理”;文本2:“数据产品经理和项目经理”,现在用上面的公式计算文本1和文本2的相似度。
我们首先将文本1和文本2进行分词(关于分词,后面的文章会介绍),文本1分词后:“产品/经理”;文本2分词后:“数据/产品/经理/和/项目/经理”。分词完成后,将分好的词形成并集得到{数据,产品,经理,和,项目}。我们把文本1和文本2分别命名为向量 A 和向量 B ,接下来计算 A、B 的坐标;并集中的词一共有5个,那么这5个词分别在文本1和文本2中出现了多少次很容易得出来,形成以下这个表格
文本1 | 文本2 | |
---|---|---|
数据 | 0 | 1 |
产品 | 1 | 1 |
经理 | 1 | 2 |
和 | 0 | 1 |
项目 | 0 | 1 |
将这些词在文本中出现的次数定义为该向量的坐标就有:
A(0,1,1,0,0)
B(1,1,2,1,1)
那么,代入上面的公式为
如果一模一样为100%的话,那么75%这个数值就可以来衡量文本1和文本2的相似度,其实通过字面意思,我们也可以判断两个文本是很相似的,无论数据产品经理、产品经理、项目经理在某些环境下,其实就是同一个人😭。
优缺点
在分析优缺点的时候,我们先看一看余弦相似度的应用场景:
- 文本本身对字或者词的顺序不敏感,比喻“蛋炒饭”和“饭炒蛋”、“王者荣耀”和“荣耀王者”等等。
- 篇幅大,字数多的文本,一篇文章,一篇论文,一本小说等等。如果两篇文章的相似度很高,就说明两篇文章的用词很多是重复的,存在抄袭行为;还记得大学时候编造论文字数的日子吗,经常会自己去验重,对的没错,就是用这个原理啦!!
优点:
- 操作简单,不需要很复杂的处理,分词后得出词频,就可以计算
- 短文本,长文本都可以使用
- 软文、新闻、论文等领域都可以使用
缺点:
- 对顺序敏感的文本不适用。像年号等等,如:“二零一八年”和“二一零八年”;“数据产品”和“产品数据”等似度是100%,其实字面意思看得出,这两个文本表达的意思完全不同。
- 重复字词较多的文本。如某个领导对你说:“产品!数据数据据数据数据!”和“产品产品产品产品!数据!”两个文本的交集就是其并集,相似度为100%,但是表达的重点是不一样的。