产品经理识算法(一)余弦相似度

这系列文章会以连载形式呈现,后面会不定时更新,旨在和大家一起分享学习相关的算法。
关于各个产品中的算法,像 csdn 等技术博客都有介绍,总结下来有以下几点:

  • 代码形式
  • 解释的层面和角度偏技术
  • 缺乏实例

这就是我写这系列文章的动机,通过实例通俗易懂的语言来解释算法的逻辑和应用。
本文的结构如下:

  1. 余弦相似度的数学表达式
  2. 公式解读
  3. 应用实例
  4. 优缺点

数学表达式

假设平面存在向量 a 和向量 b,由向量的点积公式可得俩向量的夹角:

img

将向量 a、b 赋予坐标,如:a(x1,y1),b(x2,y2),带入上面公式,得到:

img

将向量 a、b 由平面推广到多维空间上(有相关论文已经证明推广到多维空间,公式仍然成立),得到:

img

公式解读

数学上,这些公式很好理解,只是简单的代换转化,那么余弦相似度是怎么引用到产品上的呢?余弦相似度一般会应用在研究两篇文本的相似程度上,这里有个思维的转换:我们先把文本当作是一个向量,里面出现的词频数量当作上述公式中多维向量的坐标,运用上面的公式就可以算出两个文本的相似程度;具体我们看一下下面的例子。

应用实例

例 文本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)

那么,代入上面的公式为img

如果一模一样为100%的话,那么75%这个数值就可以来衡量文本1和文本2的相似度,其实通过字面意思,我们也可以判断两个文本是很相似的,无论数据产品经理、产品经理、项目经理在某些环境下,其实就是同一个人😭。

优缺点

在分析优缺点的时候,我们先看一看余弦相似度的应用场景:

  • 文本本身对字或者词的顺序不敏感,比喻“蛋炒饭”和“饭炒蛋”、“王者荣耀”和“荣耀王者”等等。
  • 篇幅大,字数多的文本,一篇文章,一篇论文,一本小说等等。如果两篇文章的相似度很高,就说明两篇文章的用词很多是重复的,存在抄袭行为;还记得大学时候编造论文字数的日子吗,经常会自己去验重,对的没错,就是用这个原理啦!!

优点

  • 操作简单,不需要很复杂的处理,分词后得出词频,就可以计算
  • 短文本,长文本都可以使用
  • 软文、新闻、论文等领域都可以使用

缺点

  • 对顺序敏感的文本不适用。像年号等等,如:“二零一八年”和“二一零八年”;“数据产品”和“产品数据”等似度是100%,其实字面意思看得出,这两个文本表达的意思完全不同。
  • 重复字词较多的文本。如某个领导对你说:“产品!数据数据据数据数据!”和“产品产品产品产品!数据!”两个文本的交集就是其并集,相似度为100%,但是表达的重点是不一样的。
因为感动,所以坚持。
0%