海明距离

海量数据处理---simhash算法

放肆的年华 提交于 2019-12-06 13:55:31
方法介绍 背景 如果某一天,面试官问你如何设计一个比较两篇文章相似度的算法?可能你会回答几个比较传统点的思路: 一种方案是先将两篇文章分别进行分词,得到一系列特征向量,然后计算特征向量之间的距离(可以计算它们之间的欧氏距离、海明距离或者夹角余弦等等),从而通过距离的大小来判断两篇文章的相似度。 另外一种方案是传统hash,我们考虑为每一个web文档通过hash的方式生成一个指纹(finger print)。 下面,我们来分析下这两种方法。 采取第一种方法,若是只比较两篇文章的相似性还好,但如果是海量数据呢,有着数以百万甚至亿万的网页,要求你计算这些网页的相似度。你还会去计算任意两个网页之间的距离或夹角余弦么?想必你不会了。 而第二种方案中所说的传统加密方式md5,其设计的目的是为了让整个分布尽可能地均匀,但如果输入内容一旦出现哪怕轻微的变化,hash值就会发生很大的变化。 举个例子,我们假设有以下三段文本: the cat sat on the mat the cat sat on a mat we all scream for ice cream 使用传统hash可能会得到如下的结果: irb(main):006:0> p1 = 'the cat sat on the mat' irb(main):007:0> p1.hash => 415542861 irb(main):005

simhash的应用

前提是你 提交于 2019-12-06 13:45:00
目录 0x01 海量数据文本相似度解决方式SimHash+分词方法+基于内容推荐算法 0x02 海量simhash查询 (1)抽屉原理 (2)建立索引 (3)判重 (4)优化效果 (5)权衡时间、空间 (6)存储选型 0x03 比较相似度 0x01 海量数据文本相似度解决方式SimHash+分词方法+基于内容推荐算法 原文链接: 海量数据文本相似度解决方式SimHash+分词方法+基于内容推荐算法 - 约翰史密斯 - CSDN博客 问题:海量文本相似度怎么解决? 最简单的方式是SimHash,通过对分好的词进行hash并加权(乘以他们的重要程度)进行相加,再进行二值化,最后通过度量二值化后的数字之间的相似度来度量文本句子的相似度。 唯一比较麻烦的是最后需要取阈值来界定相似与否。 问题:分词? 一是基于字符串匹配,加入一些启发式的方法将其匹配,时间复杂度为O(n) 二是基于机器学习的分词 问题:如何应用文本相似的度量--常见的是推荐算法 推荐算法分为两种: 基于内容,协同过滤 基于内容的推荐容易理解,即通过相似内容来推荐相同的东西,比如你看西游记,我给你推荐悟空传,弊端是会推送雷同的东西 协同过滤包括 基于用户的方式 和 基于item的方式 ,基于用户大抵是我和你的以前看过的东西或兴趣很相似,那我喜欢的你没有看过的就推荐给你;基于item即给item贴一些标签特征(比如打分等等等等)