文本相似度,顾名思义是指两个文本(文章)之间的相似度,在搜索引擎、推荐系统、论文鉴定、机器翻译、自动应答、命名实体识别、拼写纠错等领域有广泛的应用。

与之相对应的,还有一个概念——文本距离——指的是两个文本之间的距离。文本距离和文本相似度是负相关的——距离小,“离得近”,相似度高;距离大,“离得远”,相似度低。业务上不会对这两个概念进行严格区分,有时用文本距离,有时则会用文本相似度。

欧氏距离

欧氏距离是数学中的一个非常经典的距离,公式如下:

文本向量 A={一,二,三,四},即 x1 = 一,x2 = 二,x3 = 三,x4 = 四
文本向量 B={一,四,六,八},即 y1 = 一,y2 = 四,y3 = 六,y4 = 八
这里规定,若 xi=yi,则 xi-yi=0;若 xi≠yi,|xi-yi|=1。
所以,欧氏距离d是 1。

(1)适用场景
编码检测等类似领域。两串编码必须完全一致,才能通过检测,这时一个移位或者一个错字,可能会造成非常严重的后果。比如下图第一个二维码是 “这是一篇文本相似度的文章”,第二个是 “这是一篇文本相似度文章”。从人的理解来看,这两句话相似度非常高,但是生成的二维码却千差万别。
(2)不适用场景
文本相似度,意味着要能区分相似 / 差异的程度,而欧氏距离更多的只能区分出是否完全一样。而且,欧氏距离对位置、顺序非常敏感,比如 “我的名字是孙行者” 和“孙行者是我的名字”,在人看来,相似度非常高,但是用欧氏距离计算,两个文本向量每个位置的值都不同,即完全不匹配。

曼哈顿距离

和欧氏距离非常相似(把平方换成了绝对值,拿掉了根号),公式如下:

适用场景同欧氏距离。

编辑距离(Levenshtein 距离、莱文斯坦距离)

顾名思义,编辑距离指的是将文本 A 编辑成文本 B 需要的最少变动次数(每次只能增加、删除或修改一个字)。编辑距离是对称的,即将 A 转化成 B 的最小变动次数和将 B 转化成 A 的最小变动次数是相等的。
同时,编辑距离与文本的顺序有关。

(1)适用场景

编辑距离算出来很小,文本相似度肯定很高。如果用算法语言来说的话,就是准确率很高(即虽然会漏掉一些好的 case,但可以确保选出来的 case 一定非常好)。

(2)不适用场景

反过来说,虽然准确率很高,但召回率不高。在某些业务场景中,漏掉的 case 会引起严重后果,比如 “批发零售” 和“零售批发”,人的理解应该非常相似,可编辑距离却是 4,相当于完全不匹配,这显然不符合预期。

Jaccard 相似度(杰卡德相似度)

杰卡德相似度,指的是文本 A 与文本 B 中交集的字数除以并集的字数,公式非常简单:

杰卡德相似度与文本的位置、顺序均无关。比如 “王者荣耀” 和“荣耀王者”的相似度是 100%。无论 “王者荣耀” 这 4 个字怎么排列,最终相似度都是 100%。在某些情况下,会先将文本分词,再以词为单位计算相似度。比如将 “王者荣耀” 切分成 “王者 / 荣耀”,将“荣耀王者” 切分成“荣耀 / 王者”,那么交集就是{王者,荣耀},并集也是{王者,荣耀},相似度恰好仍是 100%。

(1)适用场景
对字 / 词的顺序不敏感的文本,比如前述的 “零售批发” 和“批发零售”,可以很好地兼容。
长文本,比如一篇论文,甚至一本书。如果两篇论文相似度较高,说明交集比较大,很多用词是重复的,存在抄袭嫌疑。
(2)不适用场景
重复字符较多的文本,比如 “这是是是是是是一个文本” 和“这是一个文文文文文文本”,这两个文本有很多字不一样,直观感受相似度不会太高,但计算出来的相似度却是 100%(交集 = 并集)。
对文字顺序很敏感的场景,比如 “一九三八年” 和“一八三九年”,杰卡德相似度是 100%,意思却完全不同。

余弦相似度

余弦相似度的灵感来自于数学中的余弦定理,这里对数学内容不做过多解释,直接上公式:

其中,A、B 分别是文本一、文本二对应的 n 维向量。
举例:
文本A是 “一个雨伞”,文本B是 “下雨了开雨伞”,它们的并集是 {一,个,雨,伞,下,了,开},共 7 个字。
若并集中的第 1 个字符在文本一中出现了 n 次,则 A1=n(n=0,1,2……)。若并集中的第 2 个字符在文本一中出现了 n 次,则 A2=n(n=0,1,2……)。依此类推,算出 A3、A4、……、A7,B1、B2、……、B7,最终得到:
A=(1,1,1,1,0,0,0)
B=(0,0,2,1,1,1,1)
将 A、B 代入计算公式,得到

1)适用场景

余弦相似度和杰卡德相似度虽然计算方式差异较大,但性质上很类似(与文本的交集高度相关),所以适用场景也非常类似。
余弦相似度相比杰卡德相似度最大的不同在于它考虑到了文本的频次,比如上面例子出现了 2 次 “雨”,和只出现 1 次“雨”,相似度是不同的;再比如“这是是是是是是一个文本” 和“这是一个文文文文文文本”,余弦相似度是 39%,整体上符合 “相同的内容少于一半,但超过 1/3” 的观感(仅从文本来看,不考虑语义)。

(2)不适用场景

向量之间方向相同,但大小不同的情况(这种情况下余弦相似度是 100%)。比如 “太棒了” 和“太棒了太棒了太棒了”,向量分别是(1,1,1)和(3,3,3),计算出的相似度是 100%。

这时候要根据业务场景进行取舍,有些场景下我们认为它们意思差不多,只是语气程度不一样,这时候余弦相似度是很给力的;有些场景下我们认为它们差异很大,哪怕意思差不多,但从文本的角度来看相似度并不高(最直白的,一个 3 个字,一个 9 个字),这时候余弦相似度就爱莫能助了。

自然语言处理:文本相似度计算(欧氏距离、余弦相似度、编辑距离、杰卡德相似度)相关推荐

  1. 【转】自然语言处理:文本相似度计算(欧氏距离、余弦相似度、编辑距离、杰卡德相似度)

    文本相似度,顾名思义是指两个文本(文章)之间的相似度,在搜索引擎.推荐系统.论文鉴定.机器翻译.自动应答.命名实体识别.拼写纠错等领域有广泛的应用. 与之相对应的,还有一个概念--文本距离--指的是两 ...

  2. ML:文本、图像等数值化数据相似度计算之余弦相似度计算三种python代码实现

    ML:文本.图像等数值化数据相似度计算之余弦相似度计算三种python代码实现 目录 相似度计算之余弦相似度计算 输出结果 三种python代码实现

  3. 文本相似度算法Jaccard相似度(杰卡德相似度)java实现

    文本相似度算法 杰卡德相似度,指的是文本A与文本B中交集的字数除以并集的字数,公式非常简单: java代码 import java.util.HashSet; import java.util.Sca ...

  4. 杰卡德相似度(Jaccard)详解及在UserCF中的应用

    1.杰卡德相似度(Jaccard) 这个是衡量两个集合的相似度一种指标. 两个集合A和B的交集元素在A,B的并集中所占的比例,称为两个集合的杰卡德相似系数,用符号J(A,B)表示 另一种表示的方法: ...

  5. 杰卡德相似度(Jaccard similarity)

    杰卡德相似度(Jaccard similarity) 先总体上从ChatGPT上了解个大概 科普 杰卡德相似度 概述 主要应用场景 Python代码实现: 先总体上从ChatGPT上了解个大概 杰卡德 ...

  6. 图算法—杰卡德相似度

    图算法-杰卡德相似度 1.图算法 图是一种表示两两对象之间的抽象数据结构,使用顶点与边进行表示,图计算就是在基于图数据上进行有目的性和针对性的计算过程,指解决一系列问题和发现潜在的数据价值,而图算法是 ...

  7. 欧式距离余弦相似度matlab,相似度计算——欧氏距离,曼哈顿距离,闵可夫斯基距离,汉明距离,夹角余弦...

    在机器学习领域,被俗称为距离,却不满足三条距离公理的不仅仅有余弦距离(满足正定性和对称性,但是不满足三角不等式),还有KL距离( Kulback- Leibler Divergence),也叫作相对熵 ...

  8. 相似度计算——欧氏距离、汉明距离、余弦相似度

    计算图像间的相似性可以使用欧氏距离.余弦相似度/作为度量,前者强调点的思想,后者注重线的思想. 欧氏距离 欧式距离/Euclidean Distance即n维空间中两个点之间的实际距离.已知两个点A= ...

  9. 模块度计算python代码_LPA算法C++实现及模块度计算

    前言 这学期开始看社团检测的东西,了解了一些经典算法.比如GN算法,BGLL算法(又叫Louvain, 因为该算法是作者在Louvain大学时提出的),LPA算法,等等. 我先看的LPA(毕竟算法思想 ...

最新文章

  1. 南航计算机硬件实验,南航80X86微机原理及接口技术实验指导书.pdf
  2. Lisp-1和Lisp-2
  3. loj 300 [CTSC2017]吉夫特 【Lucas定理 + 子集dp】
  4. python unit test 访问开发代码_python unittest 源码分析
  5. selenium自动化测试-1.selenium介绍及环境安装
  6. 关于.NET内存中的堆和栈
  7. 整理一年中使用到的工具和类库,可能正有你需要的!
  8. POI设置单元格颜色及枚举颜色对照
  9. canvas 从ondraw中获取_C# 在PDF中绘制多样风格的文本
  10. Mac系统镜像文件(Monterey-Sierra,加部分OS X)
  11. 你想在网易云音乐中播放 QQ 音乐中下载的歌曲吗?用上它后助你秒实现!
  12. 1.1 2022 IT行业前景分析 | IT行业是什么工作 做什么的,互联网行业未来前景,发展趋势、职业规划,计算机专业主要学什么?就业前景如何?
  13. RAID磁盘阵列数据恢复
  14. android内窥镜安装软件,DEPSTECH内窥镜
  15. 报错解决——babel-preset-es2015 报错
  16. 安卓开发代码工程结构(2)
  17. Android Studio运行app启动模拟器一直卡在“Wating for target device to come online”的解决办法
  18. 【Debug】安装labelme过程中出现的问题
  19. Icon glyphs 小图标命名收藏
  20. 华为linux依赖关系不满足,在深度Deepin系统中出现依赖关系不满足缺少libjpeg8的解决方法...

热门文章

  1. Bayesian Neural Network Recent Papers-贝叶斯神经网络相关研究文章
  2. cayley 图数据库简介和安装以及使用
  3. java 生成二维码
  4. (已解决) 境内 Ubuntu16.04 下安装 ROS kinetic 时 rosdep update 超时报错: The handshake operation timed out
  5. 计算机图形学-基本图形生成算法
  6. FFTW3在android平台上的移植
  7. ASP.NET AJAX---UpdateProgress控件小实例 (实现进度条设置显示图片时间)
  8. 老司机 - 今天去加油
  9. ZION在线开发小程序
  10. 深度解析微盟矩阵:去中心化的智能商业生态链