一、 余弦相似概述

余弦相似性通过测量两个向量的夹角的余弦值来度量它们之间的相似性。0度角的余弦值是1,而其他任何角度的余弦值都不大于1;并且其最小值是-1。

从而两个向量之间的角度的余弦值确定两个向量是否大致指向相同的方向。结果是与向量的长度无关的,仅仅与向量的指向方向相关。余弦相似度通常用于正空间,因此给出的值为-1到1之间。

例如在信息检索中,每个词项被赋予不同的维度,而一个维度由一个向量表示,其各个维度上的值对应于该词项在文档中出现的频率。余弦相似度因此可以给出两篇文档在其主题方面的相似度。另外,它通常用于文本挖掘中的文件比较,在数据挖掘领域中,会用到它来度量集群内部的凝聚力。

二、 余弦相似应用场景

原创文章检测:通过文本相似,可以检测公众号文章、论文等是否存在抄袭

垃圾邮件识别:如“诚聘淘宝兼职”、“诚聘打字员”、“文章代写”、“增值税发票”等这样的小广告满天飞,作为网站或者APP的风控,不可能简单的加几个关键字就能进行屏蔽的,一般常用的方法就是标注一部分典型的广告文本,与它相似度高的就进行屏蔽。

内容推荐系统:在腾讯新闻、微博、头条、知乎等,每一篇文章、帖子的下面都有一个推荐阅读,那就是根据一定算法计算出来的相似文章。

冗余新闻过滤:我们每天接触过量的信息,信息之间存在大量的重复,相似度可以帮我们删除这些重复内容,比如,大量相似新闻的过滤筛选。

可用于文本相似的方法非常多,比如基于字符的杰卡德相似、编辑距离相似、最长公共子串等,基于距离的相似也很多,比如汉明距离、欧几里得距离等。本文介绍的是余弦距离相似,比较简单,可以作为风控领域文本相似的入门。

废话不多说,先看一个案例,我们用三句话作为例子,我从自己的邮箱里面扒出来的垃圾邮件,具体步骤如下。

三、 计算文本余弦相似

第一步,分词。

A句子:有/发票/加/薇/45357

B句子:有/发票/加/微/45357

C句子:正规/ 增值税/ 发票

第二步,列出所有的词(所有词的长度作为向量长度)

有,发票,加,薇,微,45357,正规,增值税

第三步,计算词频

A句子:有 1,发票 1,加 1,薇 1,微 0,45357 1,正规 0,增值税 0

B句子:有 1,发票 1,加 1,薇 0,微 1,45357 1,正规 0,增值税 0

C句子:有 0,发票 1,加 0,薇 0,微 0,45357 0,正规 1,增值税 1

第四步,写出词频向量。

A句子:[1, 1, 1, 1, 0, 1, 0 ,0]

B句子:[1, 1, 1, 0, 1, 1, 0 ,0]

C句子:[0, 1, 0, 0, 0, 0, 1 ,1]

到这里,问题就变成了如何计算这两个向量的相似程度。我们可以把它们想象成空间中的两条线段,都是从原点(0, 0, ...)出发,指向不同的方向。两条线段之间形成一个夹角,如果夹角为0度,意味着方向相同、线段重合;如果夹角为90度,意味着形成直角,方向完全不相似;如果夹角为180度,意味着方向正好相反。因此,我们可以通过夹角的大小,来判断向量的相似程度。夹角越小,就代表越相似。

以二维空间为例,上图的a和b是两个向量,我们要计算它们的夹角θ。根据初中知识,余弦定理告诉我们,可以用下面的公式求得:

假定a向量是[x1, y1],b向量是[x2, y2],那么可以将余弦定理改写成下面的形式:

数学家已经证明,余弦的这种计算方法对n维向量也成立,假定A和B是两个n维向量,A是 [A1, A2, ..., An] ,B是 [B1, B2, ..., Bn] ,则A与B的夹角θ的余弦等于:

使用这个公式,我们就可以得到,句子A与句子B的夹角的余弦。

下面我们用Python代码计算看看

import numpy as np
A = np.array([1, 1, 1, 1, 0, 1, 0 ,0])
B = np.array([1, 1, 1, 0, 1, 1, 0 ,0])
C = np.array([0, 1, 0, 0, 0, 0, 1 ,1])
#定义相似计算函数
def cos_simi(x,y):num = x.dot(y.T)denom = np.linalg.norm(x) * np.linalg.norm(y)return num / denom
cos_simi(A,B)
0.7999999999999998
cos_simi(A,C)
0.2581988897471611
cos_simi(B,C)
0.2581988897471611

[有/发票/加/薇/45357]  [有/发票/加/微/45357] 只有一个字的差异,相似度0.80

[有/发票/加/薇/45357]  [正规/ 增值税/ 发票] 只有一个词相同,相似度0.2581,结果符合我们的感知。到此,我们就学会了计算两个句子的相似度

···  END  ···

往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载黄海广老师《机器学习课程》视频课黄海广老师《机器学习课程》711页完整版课件

本站qq群955171419,加入微信群请扫码:

【NLP】余弦定理计算文本相似度相关推荐

  1. Java实现余弦定理计算文本相似度

    相似度度量(Similarity),即计算个体间的相似程度,相似度度量的值越小,说明个体间相似度越小,相似度的值越大说明个体差异越大. 对于多个不同的文本或者短文本对话消息要来计算他们之间的相似度如何 ...

  2. java 余弦定理_Java根据余弦定理计算文本相似度

    public classCosine {public static doublegetSimilarity(String doc1, String doc2) {if (doc1 != null &a ...

  3. 自然语言处理(NLP)之使用TF-IDF模型计算文本相似度

    自然语言处理(NLP)之使用TF-IDF模型计算文本相似度 所用数据集:ChnSentiCorp_htl_all.csv 语料库即存放稀疏向量的列表. 要注意的是,搜索文本text与被检索的文档共用一 ...

  4. NLP基础 - 计算文本的相似度

    NLP基础 - 计算文本的相似度 一.计算文本的相似度简介 二.举例 一.计算文本的相似度简介 计算两个文本间的相似度在NLP领域中的应用非常广,包括:搜索引擎.问答系统.聊天机器人.文本分类等. 计 ...

  5. 从0到1,了解NLP中的文本相似度

    本文由云+社区发表 作者:netkiddy 导语 AI在2018年应该是互联网界最火的名词,没有之一.时间来到了9102年,也是项目相关,涉及到了一些AI写作相关的功能,为客户生成一些素材文章.但是, ...

  6. 从0到1,了解NLP中的文本相似度 1

    导语 AI在2018年应该是互联网界最火的名词,没有之一.时间来到了9102年,也是项目相关,涉及到了一些AI写作相关的功能,为客户生成一些素材文章.但是,AI并不一定最懂你,客户对于AI写出来的文章 ...

  7. python余弦定理_余弦定理与文本相似度

    什么是余弦定理 学过向量代数的人都知道,向量实际上是多维空间中有方向的线段.如果两个向量的方向一致,即夹角接近零,那么这两个向量就相近.而要确定两个向量方向是否一致,这就要用到余弦定理计算向量的夹角了 ...

  8. 使用simhash计算文本相似度

    1. 使用simhash计算文本相似度 2. 使用余弦相似度计算文本相似度 3. 使用编辑距离计算文本相似度 4. jaccard系数计算文本相似度 文本相似度计算常用于网页去重以及NLP里文本分析等 ...

  9. 使用余弦相似度算法计算文本相似度-数学

    20211201 也就是效果 皮尔逊>余弦>欧式 余弦相似度的局限 皮尔逊的优势,相当于是改进版余弦相似度 欧式与 余弦 欧式侧重于直线距离 归一化之后的欧式和余弦的效果也不同 比如 0, ...

最新文章

  1. Java引入依赖aar_java – 如何将JAR依赖项包含到AAR库中
  2. 2021年春季学期-信号与系统-第十三次作业参考答案-第三小题
  3. C# SignalR 即时通讯 聊天室
  4. HttpResponseCache的使用缓存cache
  5. 关于动态生成输入界面的一些想法及实践
  6. Error Domain=NSURLErrorDomain Code=-999 The opera
  7. 一些基础的MySQL数据库操作语句
  8. Linux firefox2.0自动升级后启动不了
  9. Django 、 uWSGI 和 nginx 搭建服务器python应用环境
  10. mysql数据库原理及应用实训报告_《数据库原理及应用》实验报告.doc
  11. 软件测试基础理论选择题(含答案)
  12. 《算法和数据结构》学习路线指引
  13. Excel 电子表格文件格式剖析
  14. 微信小程序WebSocket使用案例
  15. 国内知名插画培训机构有哪些
  16. 驱动谷歌浏览器执行用例时报错java.lang.IllegalStateException
  17. 【新手学习】Excel操作指南 之一
  18. uniapp height高度 100% 无效的问题
  19. 5G/NR 上行免授权
  20. 微信红包封面免费领取,自定义个性化红包封面

热门文章

  1. 《搜索》— NYOJ 42—一笔画问题
  2. 100个小学生猜字谜大全及答案
  3. linux下删除oracle数据库实例
  4. 微信美团支付服务器异常怎么回事,无法使用微信支付?美团回应:支付系统出现异常 已全面恢复...
  5. 可折叠的table表格
  6. 广告监测系统如何进行广告舆情监测?
  7. 用java画跳棋棋盘
  8. steam同乐无法连接远程计算机,Steam远程同乐功能怎么用 Steam远程同乐功能使用教程...
  9. 关于树莓派(四):安装树莓派时遇见的错误
  10. 微型计算机数据处理的基本单位,计算机内部数据处理的基本单位是()。