【BABY夜谈大数据】计算文本相似度

简单讲解

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

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

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

通常情况下,很多工程师就会想到用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://www.codecogs.com/latex/eqneditor.php

计算器:iphone自带

时间: 2024-10-18 16:06:32

【BABY夜谈大数据】计算文本相似度的相关文章

【BABY夜谈大数据】神经网络

前言 如果你喜欢<BABY夜谈大数据>这本书,或者想要及时收到更新,可以到豆瓣上订阅和购买哦! https://read.douban.com/column/3346397/ 神经网络旨在模拟人的思考方式,思维学普遍认为,人类大脑的思维分为抽象(逻辑)思维.形象(直观)思维和灵感(顿悟)思维三种基本方式.而神经网络主要就是模拟人类的逻辑思维. 逻辑思维是人们在认识事物的过程中借助于概念.判断.推理等思维形式能动地反映客观现实的理性认识过程,又称抽象思维.它是作为对认识者的思维及其结构以及起作用

【BABY夜谈大数据】浅谈中英文分词

前言 <BABY大数据>已经和豆瓣签约并会在豆瓣上连载哦,欢迎大家都豆瓣上订阅.本章之后将会在豆瓣上收费,博客上仍然提供免费阅读,我自己也是在开源社区下成长起来的就当做回馈开源社区吧!如果你喜欢本书或者想要支持我,可以直接在豆瓣购买哦!https://read.douban.com/column/3346397/ 因为有朋友反馈说看懂了算法但不知道怎么用,所以简单地说下自己的写作计划吧,<BABY夜读大数据>会从基础的一些概念讲解然后逐渐到应用.实际案例.预计30章左右,每一到两周

【BABY夜谈大数据】基于内容的推荐

起因 这个系列主要也是自己最近在研究大数据方向,所以边研究.开发也边整理相关的资料.网上的资料经常是碎片式的,如果要完整的看完可能需要同时看好几篇文章,所以我希望有兴趣的人能够更轻松和快速地学习相关的知识.我会尽可能用简单的方式去简介一些概念和算法,尽可能让没有工科基础的人也能大致了解. 简单讲解 基于内容的推荐算法是非常常见的推荐引擎算法. 这种算法常用于根据用户的行为历史信息,如评价.分享.点赞等行为并将这些行为整合计算出用户的偏好,再对计算推荐项目与用户偏好的相似度,将最相似的推荐给用户.

【BABY夜谈大数据】决策树

前言 最近好忙好忙的说,连更新都慢了一周呢,收到豆瓣的催稿好就赶紧开始码字了,哭. 最近阿法狗好火,所以就特地讲下决策树.如果你喜欢本书或者想要支持我,可以直接在豆瓣购买哦!https://read.douban.com/column/3346397/ 决策树就像是真的一棵树,它从一个主干逐渐分支,构成一个完整的决策树. 决策树(Decision Tree)是一种简单但是广泛使用的分类器.通过训练数据构建决策树,可以高效的对未知的数据进行分类.决策数有两大优点: 决策树模型可以读性好,具有描述性

浅谈大数据:如何成为大数据企业?

文章讲的是浅谈大数据:如何成为大数据企业,1.什么叫大数据? "大数据"是"数据化"趋势下的必然产物!数据化最核心的理念是:"一切都被记录,一切都被数字化".最近2年所产生的数据量等同于2010年以前整个人类文明产生的数据量总和,更重要的是,数据来源极大丰富,形成了多源异构的数据形态,其中非结构化数据所占比重逐年增大.牛津大学互联网研究所Mayer-Schonberger教授指出,"大数据"所代表的是当今社会所独有的一种新型的

蒋步星:轻量级大数据计算引擎

近几年,大数据非常热门,大数据计算的方案也较多,目前,大数据计算机平台有很多,但却越来越沉重,主要是由于这三个方面的原因: 并不是任何事物都需要沉重的大数据平台,许多还是需要轻量级计算. 轻量级计算需求 大数据的技术本质是高性能 提高性能的需求无处不在 不总是有那么大的数据量 低延迟即时响应业务数据量并不 不总是适合部署大数据平台 即时查询常常有被集成需求 临时性数据处理来不及建 设 大数据平台 不总是可以扩容硬件(内存) 大数据开发难度大 大数据平台对SQL查询关注过多 性能比拼的主要阵地 优

阿里巴巴大数据计算平台MaxCompute(原名ODPS)全套攻略(持续更新20171122)

  概况介绍 大数据计算服务(MaxCompute,原名ODPS,产品地址:https://www.aliyun.com/product/odps)是一种快速.完全托管的TB/PB级数据仓库解决方案.MaxCompute向用户提供了完善的数据导入方案以及多种经典的分布式计算模型,能够更快速的解决用户海量数据计算问题,有效降低企业成本,并保障数据安全.本文收录了大量的MaxCompute产品介绍.技术介绍,帮助您快速了解MaxCompute/ODPS. MaxCompute 2.0:阿里巴巴的大数

Facebook前主管谈大数据技术趋势和演变

本文讲的是Facebook前主管谈大数据技术趋势和演变,全球系统架构师大会于8月10-12日在深圳万科国际会议中心隆重举行.首先给大家带来分享的是前Facebook数据基础设施团队主管,Qubole创始人,CEO Ashish Thusoo,他主要介绍了大数据架构以及怎么样不断的演进,与其说演进,不如说革命.其中主要包括三个方面的主题: ▲全球系统架构师大会现场报道 第一,大数据的需求.当今世界需要大数据,有哪些驱动因素促使我们不同方式考虑大数据?以不同方式处理数据. 第二,技术给我们带来哪些架

《Hadoop与大数据挖掘》——第一篇 基 础 篇 第1章 浅谈大数据 1.1 大数据概述

第一篇 基 础 篇 第1章 浅谈大数据 当你早上起床,拿起牙刷刷牙,你是否会想到从拿起牙刷到刷完牙的整个过程中有多少细胞参与其中?这些细胞在参与的过程中会结合周围环境(可能是宏观的天气.温度.气压等,可能是微观的分子.空气中的微生物等),由你的意识控制而产生不同的反映.如果我说结合这些所有的信息,可以预测你接下来的0.000 000 01秒的动作,那么,你肯定说,这我也可以预测呀.比如正常情况下,你脚抬起来走路,那么抬起来后,肯定是要落下去的,这算哪门子预测呢?那如果我说可以预测你接下来一个小时