simhash最简单易懂的图文注解

local sensitive hash 局部非敏感哈希

在对海量样本进行大规模相似度聚类运算的时候,需要首要考虑的问题是计算耗时。为此我们需要一种应对于海量数据场景的去重方案,可以采取一种叫做 local sensitive hash 局部敏感哈希 的算法,该算法模型可以把文档降维到hash数字,数字两两计算运算量要小很多(google对于网页去重使用的是simhash,他们每天需要处理的文档在亿级别)。simhash是由 Charikar 在2002年提出来的,参考 《Similarity estimation techniques from rounding algorithms》

0x1: 基本概念

1. 分词

把需要判断文本分词形成这个文章的特征单词。最后形成去掉噪音词的单词序列并为每个词加上权重,我们假设权重分为5个级别(1~5)。比如"美国51区雇员称内部有9架飞碟,曾看见灰色外星人"==> 分词后为 "美国(4) 51区(5) 雇员(3) 称(1) 内部(2) 有(1) 9架(3) 飞碟(5) 曾(1) 看见(3) 灰色(4) 外星人(5)": 括号里是代表单词在整个句子里重要程度,数字越大越重要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"变成01串,形成我们最终的simhash签名。 如果每一位大于0 记为1,小于0 记为0。最后算出结果为:"1 0 1 0 1 1"

整个过程图为

Relevant Link:

http://blog.jobbole.com/46839/http://jacoxu.com/?p=366https://github.com/yanyiwu/simhashhttps://github.com/leonsim/simhashhttps://github.com/zhujun1980/simhashhttps://github.com/Sin30/simhash-demo/blob/master/simhash.phphttps://github.com/tgalopin/SimHashPhphttp://www.cs.princeton.edu/courses/archive/spr04/cos598B/bib/CharikarEstim.pdf

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在社会中,我们要保持理智,不被一些别有用心的人误导是一件很困难的事。熟练地掌握一些基本的大众心理学规律,对于保证自...
    橙君阅读 3,749评论 0 1
  • 1.打开Atom setting页面.在install里面 搜索插件直接安装2.打开插件详情页,在终端直接输入 a...
    Mr_米饭阅读 1,895评论 0 0
  • 开车不喝酒,喝酒不开车 这是许多人都懂的道理 但是你很有可能还不知道 醉酒骑自行车也算违法!!! 3月22日下午,...
    松岗微生活阅读 4,055评论 0 0

友情链接更多精彩内容