标签:simhash 计算 hash算法 判断 权重 存在 ash 简介 步骤
simhash是为了计算一篇文档之间的相似度存在的,通过simhash算法可以计算出文档的simhash值,通过各个文档计算出的二进制值来计算文档之间的汉明距离,然后根据汉明距离来比较文档之间的相似度。汉明距离是指两个相同长度的字符串相同位置上不同的字符的个数。
simhash算法分为5个步骤:分词、hash、加权、合并、降维,具体过程如下所述:
1、分词
给定一段语句,进行分词,得到有效的特征向量,然后为每一个特征向量设置1-5等5个级别的权重(如果是给定一个文本,那么特征向量可以是文本中 的词,其权重可以是这个词出现的次数)。例如给定一段语句:“腾讯上海分公司三楼食堂的快餐”,分词后为:“腾讯 上海分公司 三楼 食堂 的 快餐”,然后为每个特征向量赋予权值:腾讯(4) 上海分公司(5) 三楼(3) 食堂(2) 的(1) 快餐(5),其中括号里的数字代表这个单词在整条语句中的重要程度,数字越大代表越重要。
2、hash
通过hash函数计算各个特征向量的hash值,hash值为二进制数01组成的n-bit签名。比如“腾讯”的hash值Hash(腾讯)为100101,“上海分公司”的hash值Hash(上海分公司)为“101011”。就这样,字符串就变成了一系列数字。
3、加权
在hash值的基础上,给所有特征向量进行加权,即W = Hash * weight,且遇到1则hash值和权值正相乘,遇到0则hash值和权值负相乘。例如给“腾讯”的hash值“100101”加权得 到:W(腾讯) = 100101*4 = 4 -4 -4 4 -4 4,给“上海分公司”的hash值“101011”加权得到:W(上海分公司)=101011*5 = 5 -5 5 -5 5 5,其余特征向量类似此般操作。
4、合并
将上述各个特征向量的加权结果累加,变成只有一个序列串。拿前两个特征向量举例,例如“腾讯”的“4 -4 -4 4 -4 4”和“上海分公司”的“5 -5 5 -5 5 5”进行累加,得到“4+5 -4+-5 -4+5 4+-5 -4+5 4+5”,得到“9 -9 1 -1 1”。
5、降维
对于n-bit签名的累加结果,如果大于0则置1,否则置0,从而得到该语句的simhash值,最后我们便可以根据不同语句simhash的汉 明距离来判断它们的相似度。例如把上面计算出来的“9 -9 1 -1 1 9”降维(某位大于0记为1,小于0记为0),得到的01串为:“1 0 1 0 1 1”,从而形成它们的simhash签名。
现在有两串文本,文本1:“你妈妈 喊 你回家吃饭 哦 ,回家罗回家罗”;文本2:“你妈妈 叫 你回家吃饭 啦 ,回家罗回家罗”。显然这两句话有很高的相似度,我们来看看经过simhash算法后,两者的simhash签名。
1、求文本1的simhash签名。
a、分词:你(3)妈妈(3)喊(2)你(3)回家(4)吃饭(4)哦(2),回家罗(3)回家罗(3)。
b、hash:你(001000)妈妈(010100)喊(001000)你(001000)回家(100001)吃饭(101001)哦(101000)回家罗(100110)回家罗(100110)。
c、加权:你(-3 -3 3 -3 -3 -3)妈妈(-3 3 -3 3 -3 -3)喊(-2 -2 2 -2 -2 -2)你(-3 -3 3 -3 -3 -3)回家(4 -4 -4 -4 -4 4)吃饭(4 -4 4 -4 -4 4)哦(2 -2 2 -2 -2 -2)回家罗(3 -3 -3 3 3 -3)回家罗(3 -3 -3 3 3 -3)。
d、合并:5 -21 1 -9 -15 -11
e、降纬:1 0 1 0 0 0
2、求文本2的simhash签名。
a、分词:你(3)妈妈(3)叫(2)你(3)回家(4)吃饭(4)啦(2),回家罗(3)回家罗(3)。
b、hash:你(001000)妈妈(010100)叫(000011)你(001000)回家(100001)吃饭(101001)啦(100010)回家罗(100110)回家罗(100110)。
c、加权:你(-3 -3 3 -3 -3 -3)妈妈(-3 3 -3 3 -3 -3)叫(-2 -2 -2 -2 2 2)你(-3 -3 3 -3 -3 -3)回家(4 -4 -4 -4 -4 4)吃饭(4 -4 4 -4 -4 4)啦(2 -2 -2 -2 2 -2)回家罗(3 -3 -3 3 3 -3)回家罗(3 -3 -3 3 3 -3)。
d、合并:5 -21 -7 -9 -7 -7
e、降纬:1 0 0 0 0 0
3、计算汉明距离
上述得到的simhash签名分别为:“101000”和“100000”
计算汉明距离为1。
标签:simhash 计算 hash算法 判断 权重 存在 ash 简介 步骤
原文地址:http://www.cnblogs.com/gaosheng12138/p/7458092.html