基于 hash 的相似度计算方法,是一种基于概率的高维度数据的维度削减方法,主要用于大规模数据的压缩与实时或者快速计算的场景下。基于 hash 方法的相似度计算经常用于高维度大数据量的情况下,将利用原始信息不可存储与计算问题转化为映射空间的可存储计算问题,在海量文本重复性判断方面,近似文本查询方面有比较多的应用,如google 网页去重[1],google news 协同过滤[2,3]等都是采用 hash 方法进行近似相似度的计算,比较常见的应用场景 Near-duplicate detection、Image similarity identification、nearest neighbor search,常用的一些方法包括 I-match、Shingling、Locality-Sensitive Hashing 族等方法,下面介绍几种常见的 hash 方法。
3.1 minhash 方法介绍
Minhash 方法是 Locality-sensitive hashing[4,5]算法族里的一个常用方法,基本思想是,对于每一个对象的 itemlist,将输入的 item 进行 hash,相似的 item 具有很高的 hash,被映射到相同的 buckets 里面。尽量保证 hash 后两个对象之间的相似程度与原来是高相似的,而buckets 的数量是远远小于输入的 item,又降低了复杂度。
Minhash 法用 Jaccard 进行相似度的计算方法,则对于两个集合ci和cj,ci和 cj的相似性计算方法为:
当两个集合越相似,则该值越接近 1,否则越接近 0。用Minhash 方法,将一个集合映射到 [0-R-1] 之间的值,以相同的概率随机抽取一个 [0-R-1] 的一个排列,依次排列查找第一次出现 1 的行。
设随机排列为 43201(edcab),对于 C1 列,第一次出现 1 的行是 R4,所以 h(C1) = 3,同理有 h(C2)=2,h(C3)=4,h(C4)=3。
通过多次抽取随机排列得到 n 个Minhash 函数h1,h2,…,hn,依此对每一列都计算 n 个Minhash 值。对于两个集合,看看 n 个值里面对应相等的比例,即可估计出两集合的 Jaccard 相似度。可以把每个集合的 n 个Minhash