局部敏感哈希(LSH)之simhash和minhash

局部敏感哈希(LSH)之simhash和minhash

minhash

1. 把文档A分词形成分词向量L
2. 使用K个hash函数,然后每个hash将L里面的分词分别进行hash,然后得到K个被hash过的集合
3. 分别得到K个集合中的最小hash,然后组成一个长度为K的hash集合
4. 最后用Jaccard index求出两篇文档的相似度

simhash

1. 把文档A分词形成分词向量L,L中的每一个元素都包涵一个分词C以及一个分词的权重W
2. 对L中的每一个元素的分词C进行hash,得到C1,然后组成一个新的向量L1
3. 初始化一个长度大于C1长度的向量V,所有元素初始化为0
4. 分别判断L1中的每一个元素C1的第i位,如果C1i是1,那么Vi加上w,否则Vi减去w
5. 最后判断V中的每一项,如果第i项大于0,那么第i项变成1,否则变成0
6. 两篇文档a,b分别得到aV,bV
6. 最后求出aV和bV的海明距离,一般距离不大于3的情况下说明两篇文档是相似的

SimHash的工作原理

SimHash算法工作流程图:
<span>局部敏感哈希(LSH)之simhash和minhash</span>
<span>局部敏感哈希(LSH)之simhash和minhash</span>
 
  • 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” 变成 0 1 串,形成我们最终的simhash签名。 如果每一位大于0 记为 1,小于0 记为 0。最后算出结果为:“1 0 1 0 1 1”。

 

整个过程图为:

<span>局部敏感哈希(LSH)之simhash和minhash</span>

 

一个例子如下:
<span>局部敏感哈希(LSH)之simhash和minhash</span>
 
<span>局部敏感哈希(LSH)之simhash和minhash</span>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119557.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • prototype.js中的class.create()方法

    prototype.js中的class.create()方法Class.createClass.create([superclass][,methods…])→Classsuperclass (Class) –Theoptionalsuperclasstoinheritmethodsfrom.methods (Object) –Anobjectwhosepropertiesw

    2022年7月22日
    8
  • SMIL应用教程

    SMIL应用教程

    2021年5月1日
    230
  • 2021Eclipse下载与安装教程

    2021Eclipse下载与安装教程2021Eclipse下载与安装教程2021Eclipse下载与安装教程具体步骤如下:1.下载1.1官方下载1.2国内镜像下载【推荐】2.安装3.安装插件2021Eclipse下载与安装教程具体步骤如下:1.下载Eclipse软件下载可以在Eclipse官方下载,也可以在国内镜像地址下载。由于Eclipse官方地址服务器在国外,下载速度比较慢,国内镜像地址下载速度会快很多。1.1官方下载官方下载地址:https://www.eclipse.org/downloads/packages/r

    2022年6月6日
    36
  • ac测评题库_awing

    ac测评题库_awing杭州人称那些傻乎乎粘嗒嗒的人为 62(音:laoer)。杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众。不吉利的数字为所有含有 4 或 62 的号码。例如:62315,73418,88914 都属于不吉利号码。但是,61152 虽然含有 6 和 2,但不是 连号,所以不属于不吉利数字之列。你的任务是,对于每次给出的一个牌照号区间 [n,m],推断出交管局今后又要实际上给多少辆新的士车上牌

    2022年8月9日
    1
  • Excel中文转拼音【真正的完整版】 拼音 驼峰命名专用

    Excel中文转拼音【真正的完整版】 拼音 驼峰命名专用一、打开Excel按  Alt+F11进入VB编程模式,选择“模块” 二、把下面的代码复制粘贴到“通用”下方的空白处Functionpinyin(pAsString)AsString’*************************************’版本说明:转载请保留此段注释’更新时间:2018年8月28日’作者:上海五航航空技…

    2022年6月21日
    31
  • TCP端口大全_tcpserver和tcpclient介绍

    TCP端口大全_tcpserver和tcpclient介绍1、登录linux部署服务器,用命令查找配置文件elasticsearch.yml,如图find-nameelasticsearch.yml2、进到elasticsearch.yml文件的目录3、查看tcp,http端口

    2022年9月17日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号