七种方法计算文本相似度方法

简单讲解

基于关键词的空间向量模型的算法,将用户的喜好以文档描述并转换成向量模型,对商品也是这么处理,然后再通过计算商品文档和用户偏好文档的余弦相似度。

文本相似度计算在信息检索、数据挖掘、机器翻译、文档复制检测等领域有着广泛的应用。

比如舆论控制,我们假设你开发了一个微博网站,并且已经把世界上骂人的句子都已经收录进了数据库,那么当一个用户发微博时会先跟骂人句子的数据库进行比较,如果符合里面的句子就不让用户发出。

通常情况下,很多工程师就会想到用like或者where的sql语法去查找。可是当情况更为复杂呢?

数据库存放了“你是个坏人”,用户要发“小明是个坏人”,这时应该怎么办呢?

最简单的办法就是通过判断文本的相似程度来决定用户发的内容是否是骂人的。

本章节就几种简单的判断文本相似性的算法来讲解,帮助大家更好的理解。

相关算法

1、余弦相似度

余弦(余弦函数),三角函数的一种。在Rt△ABC(直角三角形)中,∠C=90°,角A的余弦是它的邻边比三角形的斜边,即cosA=b/c,也可写为cosA=AC/AB。余弦函数:f(x)=cosx(x∈R)

这是一个非常常见的算法,相信大家都应该学过余弦定理了,简单来说这个算法就是通过计算两个向量的夹角余弦值来评估他们的相似度。

对于二维空间,根据向量点积公式,显然可以得知(ps,这个公式不是这个算法的重点,可以不用强记):

假设向量a、b的坐标分别为(x1,y1)、(x2,y2) 。则:

设向量 A = (A1,A2,...,An),B = (B1,B2,...,Bn) 。推广到多维,数学家已经帮我们证明了,所以你只要记住下面的公式:

简单来说可以写成下面的式子:

(式子中的x和y是指词频)

比如我们要判断两句话

A=你是个坏人 B=小明是个坏人

① 先进行分词

A=你 / 是 / 个 / 坏人 B=小明 / 是 / 个 / 坏人

② 列出所有的词

{ 你 小明 是 个 坏人 }

③计算词频(出现次数)

A={1 0 1 1} (每个数字对应上面的字) B={0 1 1 1}

然后把词频带入公式

最终=0.667(只余3位),可以百度"2除以(根号3乘以根号3)"看到计算结果。

余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,这就叫"余弦相似性"。

简单来说上面计算出的值代表两个句子大概六成相似,越接近1就越相似。

2、简单共有词

通过计算两篇文档共有的词的总字符数除以最长文档字符数来评估他们的相似度。

假设有A、B两句话,先取出这两句话的共同都有的词的字数然后看哪句话更长就除以哪句话的字数。

同样是A、B两句话,共有词的字符长度为4,最长句子长度为6,那么4/6,≈0.667。

3、编辑距离

编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。一般来说,编辑距离越小,两个串的相似度越大。由俄罗斯科学家Vladimir Levenshtein(找不到他照片233333)在1965年提出这个概念。

例如将“BABAY是个好人”转成“BABY是个帅哥”,编辑举例就是2~~(好人变帅哥只要2就好...)~~: BABY是个帅人(好→帅) BABY是个帅哥(人→哥)

然后拿编辑距离去除以两者之间的最大长度,2/6≈0.333,意味着只要变动这么多就可以从A变成B,所以不用变动的字符便代表了相似度,1-0.333=0.667。

4、SimHash + 汉明距离

simhash是谷歌发明的算法,据说很nb,可以将一个文档转换成64位的字节,然后我们可以通过判断两个字节的汉明距离就知道是否相似了。

汉明距离是以理查德·卫斯里·汉明的名字命名的。在信息论中,两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数。换句话说,它就是将一个字符串变换成另外一个字符串所需要替换的字符个数。例如:

1011101 与 1001001 之间的汉明距离是 2。

"toned" 与 "roses" 之间的汉明距离是 3。

首先我们来计算SimHash:

① 提取文档关键词得到[word,weight]这个一个数组。(举例 [美国,4])

② 用hash算法将word转为固定长度的二进制值的字符串[hash(word),weight]。(举例 [100101,4])

③ word的hash从左到右与权重相乘,如果为1则乘以1 ,如果是0则曾以-1。(举例4,-4,-4,4,-4,4)

④ 接着计算下个数,直到将所有分词得出的词计算完,然后将每个词第三步得出的数组中的每一个值相加。(举例美国和51区,[4,-4,-4,4,-4,4]和[5 -5 5 -5 5 5]得到[9 -9 1 -1 1 9])

⑤ 对第四步得到的数组中每一个值进行判断,如果>0记为1,如果<0记为0。(举例[101011])

第四步得出的就是这个文档的SimHash。

这样我们就能将两个不同长度的文档转换为同样长度的SimHash值,so,我们现在可以计算第一个文档的值和第二个文档的汉明距离(一般<3就是相似度高的)。

SimHash本质上是局部敏感性的hash(如果是两个相似的句子,那么只会有部分不同),和md5之类的不一样。 正因为它的局部敏感性,所以我们可以使用海明距离来衡量SimHash值的相似度。

如果想要小数形式的可以这么做:1 - 汉明距离 / 最长关键词数组长度。

5、Jaccard相似性系数

Jaccard 系数,又叫Jaccard相似性系数,用来比较样本集中的相似性和分散性的一个概率。Jaccard系数等于样本集交集与样本集合集的比值,即J = |A∩B| ÷ |A∪B|。

说白了就是交集除以并集,两个文档的共同都有的词除以两个文档所有的词。

6、欧几里得距离

欧几里得距离是用得非常广的公式,设A(x1, y1),B(x2, y2)是平面上任意两点那么两点间的距离距离(A,B)=平方根((x1-x2...)^2+(y1-y2....)^2)

我们可以拿两个文档所有的词(不重复)在A文档的词频作为x,在B文档的作为y进行计算。

同样拿A=你是个坏人、B=小明是个坏人 这两句话作为例子,词频分别为A={1 0 1 1} 、B={0 1 1 1}。

那么距离为根号2,≈ 1.414(余3位)

然后可以通过1 ÷ (1 + 欧几里德距离)得到相似度。

7、曼哈顿距离

曼哈顿距离(Manhattan Distance)是由十九世纪的赫尔曼·闵可夫斯基所创词汇,是种使用在几何度量空间的几何学用语,用以标明两个点上在标准坐标系上的绝对轴距总和。

跟欧几里德距离有点像,简单来说就是d(i,j)=|x1-x2...|+|y1-y2...|,同理xn和yn分别代表两个文档所有的词(不重复)在A和B的词频。

然后可以通过1 ÷ (1 + 曼哈顿距离)得到相似度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/251487.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

java基础知识点总结

java基础知识点总结 文章目录 java基础知识点总结一、JDK常用的包二、Get和Post的区别三、Java多态的具体体现四、StringBuffer StringBuilder String 区别五、Hashtable与HashMap的区别六、九大隐式对象七、Forword(请求转发)与Redirect(重定向)八、JQurey总结九、XML和Json的…

java学习进阶之路

一、下面是一个java学习路线图&#xff0c;以供参考 二、下面是java工作之路&#xff0c;以供参考&#xff1a; 三、下面给出阶段性细化需要掌握的技能&#xff1a; 1.第一阶段 2.第二阶段 3.第三阶段 4.第四阶段 5.第五阶段 四、更加细化的细节如下&#xff1a; 1&#xff1…

拓扑排序 php,数据结构与算法(周测7-拓扑排序和AOV网络)

判断题 1.AOE图的关键路径就是最长的路径 T F 2.AOE图的权值最大的边(活动)一定是关键活动。 T F 两条边相加可能比最大的边还要大。 3.在AOE-网工程中,减少任一关键活动上的权值后,整个工期也就会相应的减小。 T F 关键路径有多条时不一定。 4.AOE-网工程工期为关键活动上的…

Java字符串的处理

文章目录 本章学习要点 Java定义字符串&#xff08;2种方式&#xff09;直接定义字符串例 1 使用 String 类定义1. String()2. String(String original)3. String(char[ ]value)4. String(char[] value,int offset,int count) 小白如何使用Java API帮助文档&#xff1f;Java St…

华为java面试题

1、Java 常用集合及特点&#xff1f; List&#xff1a;ArrayList、LinkedList、Vector、Stack Set&#xff1a;LinkedSet、HashSet、TreeSet Queue->Deque->LinkedList。 Map&#xff1a;HashMap、LinkedHashMap、TreeMap Dictionary->HashTable->Properties…

快速排序基本思路(通俗易懂+例子)

快速排序 【内推】日常实习和社招也可以简历发送到我邮箱&#xff0c;长期接受简历&#xff0c;部门做搜索产品研发&#xff0c;主要php和go语言&#xff01; 【2022百度提前批招聘】填写内推码可以免专业笔试&#xff0c;部门直接发起面试&#xff0c;有想去的部门可以发送简…

java面试八股文

目录 一、java&#xff08;1&#xff09;集合1.list&#xff1a;LinkedList、ArrayList和Vector2.set&#xff1a;HashSet和TreeSet3.map&#xff1a;HashMap、TreeMap和HashTable4.list、set和map的区别5.HashMap扩容机制6.HashMap中的循环链表是如何产生的&#xff08;jdk1.7…

十大排序算法之(二)快速排序--JAVA+C++实现(简单易懂)

文章目录 快速排序&#xff08;Quicksort&#xff09;1、实现原理&#xff1a;1.1、动图展示&#xff1a;1.2、实现步骤&#xff1a; 2、时间复杂度3、代码实现&#xff1a;3.1、JAVA 实现3.2、C实现3.3、C语言实现3.4、C语言递归实现&#xff1a; 快速排序&#xff08;Quickso…

《数据结构与算法》(二十五)- 排序算法:快速排序

目录 前言1. 快速排序1.1 快速排序算法1.2 快速排序算法复杂度分析1.3 快速排序优化 2. 总结 原文地址&#xff1a;https://program-park.github.io/2021/11/24/algorithm_25/ 前言 部分内容摘自程杰的《大话数据结构》 1. 快速排序 快速排序算法最早由图灵奖获得者 Tony Hoar…

c语言的快速排序,C语言实现快速排序法(分治法)

title: 快速排序法(quick sort) tags: 分治法(divide and conquer method) grammar_cjkRuby: true 算法原理 分治法的基本思想:将原问题分解为若干个更小的与原问题相似的问题,然后递归解决各个子问题,最后再将各个子问题的解组合成原问题的解。 利用分治法可以将解决办法分…

面了个蚂蚁金服拿38K出来的,真是砂纸擦屁股,给我露了一手啊

今年的春招结束&#xff0c;很多小伙伴收获不错&#xff0c;拿到了心仪的 offer。 各大论坛和社区里也看见不少小伙伴慷慨地分享了常见的面试题和八股文&#xff0c;为此咱这里也统一做一次大整理和大归类&#xff0c;这也算是划重点了。 俗话说得好&#xff0c;他山之石&…

10:mysql----存储引擎--进阶篇

目录 1:MySQL体系结构 2:存储引擎简介 3:存储引擎特点 4:存储引擎选择 1:MySQL体系结构 连接层 : 最上层是一些客户端和链接服务&#xff0c;主要完成一些类似于连接处理、授权认证、及相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的操作权限。 服务层 :…

vivo android 6.0 root,vivo X6 A(全网通)如何获取ROOT权限教程

vivo X6 A(全网通)怎么ROOT?vivo X6 A(全网通)ROOT工具选用哪些?如何避免vivo X6 A(全网通)ROOT失败?带着这些疑问来搜索vivo X6 A(全网通)ROOT方法的机友很多。小编推荐这篇vivo X6 A(全网通)一键ROOT教程&#xff0c;具体步骤如下&#xff1a; 1.首先打开奇兔刷机软件&…

Yoyo OS安装过程

Yoyo OS是星火社区开发的一个系统&#xff0c;今天教你如何安装 百度搜索星火应用商店 点击社区 点击Yoyo OS 点击立即下载 点击下载 下载完成后刻录到U盘&#xff08;过程我就不详细介绍了&#xff0c;网上有很多教程&#xff0c;也可以参照我的这篇文章部分来刻录http://t.c…

2022年520最实用的礼物,苹果平板的触控笔

下周就是520了&#xff0c;还没选好礼物的人紧张起来了&#xff01;数码产品可以选择什么作为礼物呢&#xff1f;特别是对于学生党来说&#xff0c;什么是便宜又实用的礼物&#xff1f;我觉得如果对方有苹果平板的电脑的话&#xff0c;选择送一支触控笔是很实用的礼物&#xff…

win10 平板 刷android,Android平板电脑刷Win8 ARM平台将支持Win10

在2015年台北计算机展上&#xff0c;我们首次发现了具有ARM架构的Windows平板电脑. 众所周知&#xff0c;Windows平板电脑只能安装在x86体系结构设备上. 这次曝光是世界上第一个非x86架构Windows平板电脑&#xff0c;因此具有重要意义. 这款非x86架构平板电脑配备了Rockchip的R…

平板电脑硬件如何测试软件,先锋(Pioneer)G71平板电脑软件测试评测-ZOL中关村在线...

谷歌对旗下的智能操作系统Android采取了开源的做法&#xff0c;所以说也就造成了它相较于苹果iOS以及微软Windows系统严重的碎片化现象&#xff0c;当然我们也看到了像三星 TouchWiz UX&#xff0c;HTC Sense UI以及小米 MIUI这些非常成熟且易用的第三方固件&#xff0c;只是它…

苹果xr如何截屏_苹果手机如何单手操作截屏

我们在使用手机过程中&#xff0c;遇到一些优质的文章或者图片时&#xff0c;都会习惯性截屏起来与朋友分享。在截屏过程中&#xff0c;由于手机屏幕太大的原因&#xff0c;一般都要用两个手去操作&#xff0c;一个手按住Home键&#xff0c;另一个手按住电源键&#xff0c;在同…

苹果平板id怎么注册_怎么做成苹果笔记?苹果平板怎么做笔记? - 敬业签便签...

很多朋友&#xff0c;尤其是经常接触电子产品的小伙伴&#xff0c;对于苹果都不陌生。这里说的苹果并不是传统意义上的植物水果&#xff0c;而是科技产品公司。苹果旗下的电子产品有很多&#xff0c;常见的有苹果手机、苹果平板、耳机以及Mac电脑等等。那么怎么做成苹果笔记&am…