相似项发现中两个重要算法:
Broder提出的shingling算法和Charikar的simhash算法
shingle算法的核心思想是为每个文件提取组特征值,以特征值集合来计算相似性,从而降低空间和计算复杂性来提高性能。
相似项数据检测算法大致流程如下:
(1)将数据段分解成一组shingle(即子序列或数据块),可以采用定长、变长、单词或段落(文本文件)等分块算法;
(2)为了降低空间和时间计算复杂性,可以对shingle集合进行抽样,比如Min-Wise,Modm,Mins方法;
(3)基于选定的shingle集合为数据文件提取特征,通常是为每个shingle计算hash值组成的序列作为特征值;
(4)为了降低空间和时间计算复杂性,可以对文件特征进行降维处理,比如simhash和bloom filter;
(5)基于文件特征计算两个数据对象之间的相似性,计算方法有Cosine、Overlap、Dice、Jaccard或Hamming距离。
相似项发现中两个重要技术:
1 最小哈希(minhashing):对大集合进行压缩,并且居于压缩后的结果推导原始集合的相似项。
2 局部敏感哈希(Locality Sensitive Hashing, 简称LSH):能够把搜索范围集中在可能相似的项对上面。
紧邻搜索的应用
相似度概念:通过计算交集的相对大小来获得集合之间的相似度。这种相似度成为Jaacard相似度。
相似度查找的具体应用包括内容相似的文档查找及协同过滤中相似顾客和相似产品的查找。
在大语料库中寻找文本内容相似的文档采用Jaccard相似度(字面上的相似而非意义上的相似)