SimHash
2017-03-29 16:21
323 查看
关键字:字符串降维,汉明匹配,顺序无关
流程如下:
- 1、分词,把需要判断文本分词形成这个文章的特征单词。最后形成去掉噪音词的单词序列并为每个词加上权重。
2、hash,通过hash算法把每个词变成hash值,比如“美国”通过hash算法计算为 100101,“51区”通过hash算法计算为 101011。
3、加权,通过 2步骤的hash生成结果,需要按照单词的权重形成加权数字串,比如“美国”的hash值为“100101”,通过加权计算为“4 -4 -4 4 -4 4”;“51区”的hash值为“101011”,通过加权计算为 “ 5 -5 5 -5 5 5”。
4、合并,把上面各个单词算出来的序列值累加,变成只有一个序列串。比如 “美国”的 “4 -4 -4 4 -4 4”,“51区”的 “ 5 -5 5 -5 5 5”, 把每一位进行累加, “4+5 -4+-5 -4+5 4+-5 -4+5 4+5” ==》 “9 -9 1 -1 1 9”。这里作为示例只算了两个单词的,真实计算需要把所有单词的序列串累加。
5、降维,把4步算出来的 “9 -9 1 -1 1 9” 变成 0 1 串,形成我们最终的simhash签名。 如果每一位大于0 记为 1,小于0 记为 0。最后算出结果为:“1 0 1 0 1 1”。
流程图如下:
n为字符串长度,N为字符串个数
通过simhash,时间复杂度为m∗N
m为降维后的hashcode长度
对于长文本来说,n∗log(n)>>m,通过这种方式能有效降维。
由于simhash的思路是,相似的文本,得到的hash_code大部分位是相同的。我们可以把hash_code再次分块,进行完全匹配,如下:
我们假定3bit一下差异的文本,是相似的,那么分为四块,至少有一块是完全相同的,于是通过完全匹配即可。
- 1.(相关blog)
此blog的结论是,效果不好
- 2.地址相似度实验
实验结论是,短文本效果不好。
基本原理
simhash是google用于解决海量数据去重的问题,通过降维到hash_code,在通过降维后的code进行两两匹配。流程如下:
- 1、分词,把需要判断文本分词形成这个文章的特征单词。最后形成去掉噪音词的单词序列并为每个词加上权重。
2、hash,通过hash算法把每个词变成hash值,比如“美国”通过hash算法计算为 100101,“51区”通过hash算法计算为 101011。
3、加权,通过 2步骤的hash生成结果,需要按照单词的权重形成加权数字串,比如“美国”的hash值为“100101”,通过加权计算为“4 -4 -4 4 -4 4”;“51区”的hash值为“101011”,通过加权计算为 “ 5 -5 5 -5 5 5”。
4、合并,把上面各个单词算出来的序列值累加,变成只有一个序列串。比如 “美国”的 “4 -4 -4 4 -4 4”,“51区”的 “ 5 -5 5 -5 5 5”, 把每一位进行累加, “4+5 -4+-5 -4+5 4+-5 -4+5 4+5” ==》 “9 -9 1 -1 1 9”。这里作为示例只算了两个单词的,真实计算需要把所有单词的序列串累加。
5、降维,把4步算出来的 “9 -9 1 -1 1 9” 变成 0 1 串,形成我们最终的simhash签名。 如果每一位大于0 记为 1,小于0 记为 0。最后算出结果为:“1 0 1 0 1 1”。
流程图如下:
性能比较
如果使用普通算法,新进入的文本需要与存储中的所有文本进行两两匹配,时间复杂度为n∗log(n)∗Nn为字符串长度,N为字符串个数
通过simhash,时间复杂度为m∗N
m为降维后的hashcode长度
对于长文本来说,n∗log(n)>>m,通过这种方式能有效降维。
分桶simhash
通过hash,我们把字符降维,并通过汉明距离两两匹配。但是如果字符串个数N为主要的瓶颈是,这种方式依然有较高的时间复杂度。由于simhash的思路是,相似的文本,得到的hash_code大部分位是相同的。我们可以把hash_code再次分块,进行完全匹配,如下:
我们假定3bit一下差异的文本,是相似的,那么分为四块,至少有一块是完全相同的,于是通过完全匹配即可。
simhash的短文本可行性
simhash在短文本中效果并不好。- 1.(相关blog)
此blog的结论是,效果不好
- 2.地址相似度实验
实验结论是,短文本效果不好。
相关文章推荐
- simhash用来进行海量文本近似去重的mapreduce版本
- Detecting Near-Duplicates for Web Crawling - simhash与重复信息识别
- simhash
- 海量数据相似度计算之simhash短文本查找
- SimHash
- xsank的快餐 » Python simhash算法解决字符串相似问题
- SimHash简介以及java实现
- 海量数据相似度计算之simhash和海明距离
- 高效相似度计算 LSH minHash simHash的学习
- 文档去重算法:SimHash和MinHash
- 数据挖掘之lsh minhash simhash
- simhash算法原理及实现
- simhash实现
- 文件类似性推断 -- SimHash
- [转]文档去重算法:SimHash和MinHash
- simhash算法的原理
- Simhash算法原理和网页查重应用
- 海量数据相似度计算之simhash和海明距离
- 海量数据相似度计算之simhash短文本查找
- simhash算法的原理