深入理解simhash原理

一、LSH 介绍

    LSH(Locality sensitive hashing)是局部敏感性hashing,它与传统的hash是不同的。传统hash的目的是希望得到O(1)的查找性能,将原始数据映射到相应的桶内。
    LSH的基本思想是将空间中原始数据相邻的2个数据点通过映射或者投影变换后,这两个数据点在新的空间中的相邻概率很大,不相邻的点映射到同一个桶的概率小。我们可以看到将一个在超大集合内查找相邻元素的问题转化为了在一个很小的集合内查找相邻元素的问题,显然计算量下降了很多。下面借用一幅图来表示:

这里写图片描述

LSH满足如下条件:
ifd(x,y)d1,thenP(h(x)=h(y))P1
ifd(x,y)d2,thenP(h(x)=h(y))P2
•其中d(x,y)表示x和y之间的距离,d1 < d2,h(x)和h(y)分别表示对x和y进行hash变换。
•满足以上两个条件的hash functions称为(d1,d2,p1,p2)-sensitive。而通过一个或多个(d1,d2,p1,p2)-sensitive的hash function对原始数据集合进行hashing生成一个或多个hash table的过程称为Locality-sensitive Hashing.

二、Simhash 算法

    SimHash 算法的输入是一个向量,输出是一个f位的签名值。设输入的是一个文档的特征集合,每个特征有一定的权重。
Simhash 算法如下:

  1. 将一个f维向量v⃗ 初始化为0⃗ , f位的二进制数S初始化为0

    • 对每一个特征:
      用传统的hash算法对该特征产生一个f位的签名b.
      对于i=1tof:
      如果b的第i位为1,则 v⃗ S加上该特征的权重
      否则,v⃗ 的第i个元素减去该特征的权重
    • 如果v⃗ 的第i个元素大于0, S 的第i位为1,否则为0
    • 输出S作为签名
    • 如下图所示:
      这里写图片描述

      SimHash是由随机超平面hash算法演变而来的,对于一个n维向量v⃗ , 要得到一个f位的签名(f<<n),算法如下:

      1.随机产生fn维的向量r⃗ 1,r⃗ 2,,r⃗ f
      2.对每一个向量r⃗ i,如果v⃗ r⃗ i的点积大于0,则最终签名的第i位为1,否则为0

          上述算法相当于随机产生了f个n维超平面,每个超平面将v所在的空间一分为二。v在这个超平面上方则得到一个1,否则得到一个0,然后将得到的f个0或1组合起来成为一个f维的签名。

          如果两个向量u⃗ ,v⃗ 的夹角为θ,则一个随机超平面将它们分开的概率为θπ,因此u⃗ ,v⃗ 的签名的对应位不同的概率等于θπ,所以,我们可以用两个向量的签名的不同的对应位的数量,即汉明距离,来衡量这两个向量的差异程度。

          在simhash中并没有直接产生用于分割空间的随机向量,而是间接产生的:第k个特征的hash签名的第i位拿出来,如果为0,则改为-1,如果为1则不变,作为第i个随机向量的第k维。由于hash签名是f位的,因此这样能产生f个随机向量,对应f个随机超平面。

          simhash算法得到的两个签名的汉明距离可以用来衡量原始向量的夹角。这其实是一种降维技术,将高维的向量用较低维度的签名来表征。衡量两个内容相似度,需要计算汉明距离。汉明距离是两个字符串对应位置的不同字符的个数:
      1011101 与1001001 之间的汉明距离是2。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576514.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IntelliJ IDEA tomcat配置

1&#xff0c;首先安装好 IntelliJ IDEA 开发工具 2&#xff0c;右上角这里有个 Edit Configurations 3,添加模板 选择本地安装的tomcat 和 选择jdk 4&#xff0c;添加tomcat 这里tomcat就安装好了

Think in Java之斐波那契数列

斐波纳契数列&#xff08;Fibonacci Sequence&#xff09;&#xff0c;又称黄金分割数列。 指的是这样一个数列&#xff1a;1、1、2、3、5、8、13、21、……这个数列从第三项开始&#xff0c;每一项都等于前两项之和。 在数学上&#xff0c;斐波纳契数列以如下被以递归的方法定…

《论道HTML5》内容技术分享活动

HTML5小组的第12次活动&#xff0c;本期沙龙围绕5月出版的《论道HTML5》重点章节内容展开&#xff0c;由我和另外一位作者秀野堂主现场分享。欢迎大家参加&#xff0c;下面是活动的详细信息。活动介绍&#xff1a;时间&#xff1a;2012年04月21日 13:30-18:00地址&#xff1a;东…

基于SpringBoot实现一个可扩展的事件总线

基于SpringBoot实现一个可扩展的事件总线 前言 在日常开发中&#xff0c;我们经常会用到事件总线&#xff0c;SpringBoot通过事件多播器的形式为我们提供了一个事件总线&#xff0c;但是在开发中我们经常会用到其他的实现&#xff0c;比如Guava、Disruptor的。我们将基于Spri…

大数据技术之 Kafka (第 1 章 Kafka 概述)

第 1 章 Kafka 概述 1.1 定义 Kafka 是一个分布式的基于发布/订阅模式的消息队列&#xff08;Message Queue&#xff09;&#xff0c;主要应用于大数据实时处理领域。 1.2 消息队列 1.2.1 传统消息队列的应用场景 MQ传统应用场景之异步处理 使用消息队列的好处 1&a…

那些你无比崇拜的厉害人,是如何建构知识体系的

那些你无比崇拜的厉害人&#xff0c;是如何建构知识体系的&#xff1f; 2018-04-04 六合同风 文 | Lachel 高效思维达人&#xff0c;知识管理专家&#xff0c;深度思考践行者&#xff0c;领英、36氪特约作家 来源 | L先生说&#xff08;ID&#xff1a;lxianshengmiao&#x…

大数据技术之 Kafka (第 2 章 Kafka快速入门)

第 2 章 Kafka 快速入门 下载安装kafka集群 1.需要jdk 2.需要zookeeper&#xff0c;这个东西在最新版的Kafka中内置。 3.下载Kafka安装包 &#xff08;下载官网地址&#xff1a;Apache Kafka&#xff09; 一&#xff0c;下载Kafka安装包 二&#xff0c;Kafka安装包上传li…

使用ICSharpCode.TextEditor制作一个语法高亮显示的XML编辑器

本文转载&#xff1a;http://www.cnblogs.com/lefay/archive/2010/07/25/1784919.html转载于:https://www.cnblogs.com/51net/archive/2012/04/21/2462431.html

文因互联 CEO 鲍捷:确保搞砸人工智能项目的十种方法

文因互联 CEO 鲍捷&#xff1a;确保搞砸人工智能项目的十种方法 原文链接 原创&#xff1a; 鲍捷 文因互联 前天 做成一件事儿不容易&#xff0c;而坑恒在。 鲍捷博士于5月10日在将门创投的线上 talk 中盘点了人工智能项目的大坑小坑&#xff0c;选出了看上去非常反常识的十…

启动kafka失败报内存不足(Cannot allocate memory)

原因分析&#xff0c;因为我的虚拟机内存一共才1G 查看一下我的虚拟机内存还剩余多少&#xff1f; 天呐&#xff0c;我的只有60M了 我们看下kafka的启动脚本 vim kafka-server-start.sh 看见下面的脚本文件内容没有&#xff0c;默认是1G&#xff0c;而我只有60M&#xff0…

Introduce Null Object(引入Null对象)

Introduce Null Object&#xff08;引入Null对象&#xff09;你需要再三检查某对象是否为null。将null值替换为null对象。if (customer null) plan BillingPlan.basic(); else plan customer.getPlan(); 动机多态的最根本好处在于&#xff1a;你不必再向对象询问"你是…

zookeeper Error contacting service. It is probably not running

通过命令zkServer.sh start之后&#xff0c;显示STARTED 通过client测试报错 无法连接 连接关闭 Connecting to localhost:2181 2020-03-29 12:44:31,855 [myid:] - INFO [main:Environment100] - Client environment:zookeeper.version3.4.13-2d71af4dbe22557fda74f9a9b430…

引言

推荐系统从0到1_引言什么是推荐&#xff1f;什么是推荐系统&#xff1f;推荐系统的应用什么是推荐&#xff1f; 说起推荐&#xff0c;就不得不说搜索。搜索这里指信息检索&#xff0c;在大量的信息中&#xff0c;我们需要找到自己需要的信息&#xff0c;就用到了搜索引擎&…

JNI的方式调用DLL(SO)(上)

最近有个项目要调用原有的DLL文件&#xff0c;本来准备使用JNA&#xff0c;可是客户不同意&#xff0c;非要使用JNI的方式。万般无奈之下&#xff0c;只能重新使用JNI&#xff0c;现将JAVA调用动态链接库的一般方法总结如下。 JNI是Java Native Interface&#xff08;JAVA本地调…

搭建推荐系统所需要的材料

搭建推荐系统所需要的材料人力物力推荐系统的原材料物品流量最后人力物力 在上一小节中《推荐系统的必要性》里已经讨论过一个推荐业务团队需要哪些人员储备&#xff0c;需要什么核心技术等。这里在重点说下物力&#xff0c;即机器资源设备。 往往从头开始搭建这样一个团队&a…

kafka:topic为什么要进行分区?副本机制是如何做的?

kafka为什么要在topic里加入分区的概念&#xff1f;如果没有分区,topic中的segment消息写满后,直接给订阅者不是也可以吗&#xff1f; Kafka可以将主题划分为多个分区&#xff08;Partition&#xff09;&#xff0c;会根据分区规则选择把消息存储到哪个分区中&#xff0c;只要如…

将某字符串切割成阵列并排序列出

老师布置的另外一道题是将字符串"a;b;d;z;y;u"切割成阵列并排序列出。老师出这题也许是让Insus.NET掌握或复习Array.Sort()函数&#xff0c;不管怎样&#xff0c;先按自己的想法实现&#xff0c;然后是等老师的意见。protected void Page_Load(object sender, EventA…

关于管理,这5大误区你越早知道越好

关于管理&#xff0c;这5大误区你越早知道越好 原创&#xff1a; 陈春花 管理的常识 绝大部分人都感觉自己已经非常努力地工作&#xff0c;但结果却不尽如人意&#xff0c;到底问题出在哪里&#xff1f; 就让北京大学国家发展研究院管理学教授、北大国发院BiMBA商学院院长陈春…

大数据技术之 Kafka (第 3 章 Kafka 架构深入 ) Log存储解析

Kafka 工作流程 Kafka 中消息是以 topic 进行分类的&#xff0c;生产者生产消息&#xff0c;消费者消费消息&#xff0c;都是面向 topic的。 topic 是逻辑上的概念&#xff0c;而 partition 是物理上的概念&#xff0c;每个 partition 对应于一个 log 文件&#xff0c;该 log…