simHash海量文本去重

simHash是google提出的用于计算海量文本相似度的算法:
(1) 分词 => word
(2) 单词权重 tfidf word => (word, weight)
(3) 每个词hash为指定长度的二进制串, 如 10010 => (hash, weight)
(4) 所有词加权合并 sum(hash * weight), 加权乘的时候把0当做-1对待
(5) 降维: (4)得到文档的向量, > 0映射 为 1 , <=0 映射为0, 得到文档的 二进制向量,即文档的simHash签名
(6) 计算文档间的汉明距离
汉明距离计算方式:

  p1 = 100101 
  p2 = 101100
  p3 = p1 XOR p2
  i = 0 
  while(p3){
      p3 &= p3 -1
      i ++
}

simhash用于比较大的长文本, 可以取汉明距离为3, 对于短文本的效果比较差, 汉明距离可以取大一些进行相似过滤

———————————————————————————-
算法过程很简单,我们来理解一下原理,主要是参考自 http://www.cnblogs.com/hxsyl/p/4518506.html
假设词汇总量是5, 那么我们用于标记文档唯一性的词向量就是5维,文档d=(1, 2, 0, 3, 0), 权值标识该词对d的重要程度,0表示没有。词的hash函数生成3byte二进制串:
h(w1) = 101
h(w2) = 011
h(w3) = 100
h(w4) = 001
h(w5) = 110
特征矩阵(0 视为 -1)

1 -1 1
-1 1 1
1 -1 -1
-1 -1 1
1 1 -1

因为文档向量d(1, 2, 0, 3, 0) 是5维向量, 我们取特征矩阵的列向量:

    v1 = 1 -1 1 -1 1
    v2 = -1 1 -1 -1 -1 
    v3 = 1 1 -1 1 1 

v1, v2, v3 看做5维空间的三个超平面,文档d也是这个空间的一个平面, 现在我们想以v1, v2, v3为分割平面, 定位d的位置, 分别计算d与v1~v3超平面的夹角, 也就是算向量的点积, 点积大于0 标记为1 ,点积小于等于0 标记为0, 这样:
d T v1 = -4 < 0 钝角
d T v2 = -2 < 0 钝角
d T v3 = 6 > 0 锐角
得到d的签名=001,simHash的有效性这样就比较清楚了, 就是利用这3个超平面来定位出文档平面所在的位置,类似决策树中的树桩, 2^3 种分法,100万的文档, 理论上 20 byte签名就可以区分, 10亿的文档需要30byte(30个超平面)

图片.png

———————————————————————————-

假设我们库中有5000万(2^26)的文本, 每来一个新文本我们都需要做5000万次的汉明距离计算, 这个计算量还是比较大的,假设签名为64位。

考虑目标文档3位以内变化的签名有 C(64, 3) 4万多可能, 然后 4万 * 5000万的hash查询, 时间复杂度太大了

我们可以将库中已有的5000万文章的签名表切成4个表, 分别存储将64byte切开的ABCD四段中一段, 每进来一篇新文章,同样的分割为ABCD字段, 去与对应的表精确匹配(这个过程可以设置4个并发比较), 取每个表join后剩下的文档ID, 大概每个表产出备选文档ID 有5000万/2^16 = 1000左右的量级,要找到5000万文档中和目标文档汉明距离小于3的文档集, 那么库中的文档至少ABCD有一段和目标文档完全匹配,这样我们最多会有 4 * 2 ^(26 -16) 篇备选文档, 大概4000多次汉明距离的计算就可以了

图片.png

参考:
http://grunt1223.iteye.com/blog/964564
http://www.cnblogs.com/hxsyl/p/4518506.html
http://blog.chinaunix.net/uid-25304914-id-4857313.htmlew

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容

  • 弗洛伊德算法适用于为图中每一个顶点求最短路径,思路如下 检查图中任何一个 到 任何另一个点能否通过第一个点降低最短...
    RichardW阅读 947评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,594评论 18 139
  • 注:题中所指的『机器学习』不包括『深度学习』。本篇文章以理论推导为主,不涉及代码实现。 前些日子定下了未来三年左右...
    我偏笑_NSNirvana阅读 39,907评论 12 145
  • (一)——开篇 大数据量的问题是很多面试笔试中经常出现的问题,比如baidu google 腾讯 这样的一些涉及到...
    零一间阅读 711评论 0 5
  • 尝试分析每种性格色彩的内在原理: 【红色】 红色注重快乐。 因为快乐很容易通过小愿望的满足得以实现,所以红色很容易...
    拆拥阅读 549评论 0 0