这系列文章会以连载形式呈现,后面会不定时更新,旨在和大家一起分享学习相关的算法。
关于各个产品中的算法,像 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中出现了多少次很容易得出来,形成以下这个表格
将这些词在文本中出现的次数定义为该向量的坐标就有:
A(0,1,1,0,0)
B(1,1,2,1,1)
那么,代入上面的公式为
代入后公式
如果一模一样为100%的话,那么75%这个数值就可以来衡量文本1和文本2的相似度,其实通过字面意思,我们也可以判断两个文本是很相似的,无论数据产品经理、产品经理、项目经理在某些环境下,其实就是同一个人😭。
优缺点
在分析优缺点的时候,我们先看一看余弦相似度的应用场景:
- 文本本身对字或者词的顺序不敏感,可以应用。比喻“蛋炒饭”和“饭炒蛋”、“王者荣耀”和“荣耀王者”等等。
- 篇幅大,字数多的文本,一篇文章,一篇论文,一本小说等等,可以应用。如果两篇文章的相似度很高,就说明两篇文章的用词很多是重复的,存在抄袭行为;还记得大学时候编造论文字数的日子吗,经常会自己去验重,对的没错,就是用这个原理啦!!
优点:
- 操作简单,不需要很复杂的处理,分词后得出词频,就可以计算
- 短文本,长文本都可以使用
- 软文、新闻、论文等领域都可以使用,日头条,*云音乐等等推荐应用运用了这种思维。
缺点:
- 对顺序敏感的文本不适用。像年号等等,如:“二零一八年”和“二一零八年”;“数据产品”和“产品数据”等似度是100%,其实字面意思看得出,这两个文本表达的意思完全不同。
- 重复字词较多的文本。如某个领导对你说:“产品!数据数据据数据数据!”和“产品产品产品产品!数据!”两个文本的交集就是其并集,相似度为100%,但是表达的测重点是不一样的。
一个算法只是一个模型,需要人工运营团队不断完善,因为不结合环境以及语义只靠算法判断相似性对用户是不负责任的行为。
网友评论