局部敏感哈希(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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数据库dml和ddl有什么区别(mysql是一种)

    DBMS中DDL和DML有哪些区别发布时间:2020-12-0312:07:24来源:亿速云阅读:119作者:小新这篇文章主要介绍DBMS中DDL和DML有哪些区别,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!什么是DDL?DDL代表数据定义语言,它定义了数据库结构或数据库模式,可以将数据库中定义的数据的其他属性定义为属性域;还提供了指定一些约束以保持数据一致性的工具。D…

    2022年4月17日
    125
  • vim查找指令

    vim查找指令一、vi查找:当你用vi打开一个文件后,因为文件太长,如何才能找到你所要查找的关键字呢?在vi里可没有菜单-〉查找,不过没关系,你在命令模式下敲斜杆(/)这时在状态栏(也就是屏幕左下脚)就出现了“/”然后输入你要查找的关键字敲回车就可以了。如果你要继续查找此关键字,敲字符n就可以继续查找了。值得注意的是“/”是向下查找,而“?”是向上查找,而在键盘定义上“?”刚好是“/”的上档符。二、vi替换:vi/vim中可以使用:s命令来替换字符串以前只会使用一种格式来全文替换,今天发现该命令有很多种写法

    2022年6月29日
    51
  • wifi linux驱动_嵌入式系统Android移植

    wifi linux驱动_嵌入式系统Android移植背景:需要更换wifi厂家提供的驱动程序,此驱动不是insmod测试程序,而是需要编译进内核,开机自动挂载的。insmod挂载驱动通常是将驱动源码,使用对应的交叉编译工具链编为xx.ko的文件,手动insmodxx.ko进行使用。1:将驱动源码放入内核目录下的/drivers/net/wireless/realtek目录。2:查看驱动源码目录下的Kconfig和Makefile是否齐全,…

    2022年9月24日
    5
  • VIF方法(方差膨胀因子)因子独立性检验 全流程解读

    VIF方法(方差膨胀因子)因子独立性检验 全流程解读    基于因子模型的选股策略是股票市场量化应用最广泛的模型之一。然而很多时候,使用因子模型在实盘运行的绩效并不理想,究其原因可能是由于因子选择的偏差,市场风格轮动等。但还有一个显著的因素,就是选取因子之间可能存在高度的多重共线性,导致模型对股票价格与市场的解释能力存在很大偏误。       为了在筛选因子之初就避免陷入这样的误区。本文介绍一种VIF(方差膨胀检验)方法,来对因子之…

    2022年6月10日
    337
  • eclipse中导入maven工程「建议收藏」

    eclipse中导入maven工程「建议收藏」1.导入工程Maven->ExistingMavenProjects,选择项目路径,点击Next2.点击Finish选择需要导入的maven项目,点击Finish

    2022年5月6日
    48
  • TSQL–临时表和表变量

    TSQL–临时表和表变量

    2021年11月26日
    46

发表回复

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

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