shingling算法——提取特征,m个hash函数做指纹计算,针对特征hash后变成m维向量,最后利用union-find算法计算相似性
2017-02-17 18:43
519 查看
shingling算法用于计算两个文档的相似度,例如,用于网页去重。维基百科对w-shingling的定义如下:
In natural language processing a w-shingling is a set of unique "shingles"—contiguous subsequences of tokens in a document —that can be used to gauge the similarity of two documents. The w denotes the number of tokens in each shingle in the set.
维基百科用一个浅显的例子讲解了shingling算法的原理。比如,一个文档
分词后的词汇(token,语汇单元)集合是
那么w=4的4-shingling就是集合:
去掉重复的子集合:
给定shingle的大小,两个文档A和B的相似度 r 定义为:
其中|A|表示集合A的大小。
因此,相似度是介于0和1之间的一个数值,且r(A,A)=1,即一个文档和它自身 100%相似。
shingling算法是最常见的文档分割算法,说白了就是将一个文档分解成由短字符构成的字符串集合。分割后的文档就可以通过Jaccard相似度等简单的度量标准进行相似度检测了。
Shingling算法二大步骤:
1、从文档中抽取能代表文档内容的特征
2、通过二个文档对应特征集合的重叠程度来判断是否近似重复。
Shingling算法实例:
假想有一个固定大小的移动窗口从第一个单字开始依次移动,每次向后移动一个单字,直到文档结尾。
在同时对汉字串做哈希计算,随着窗口的移动,会出现一系列的shingles值,这样就构成了文档对应的特征集合。
后面再进行jaccard相似性计算,计算二个集合相似部分所占总元素个数的比例。
算法缺点:
计算效率不高,当网页数量比较大时,运行时间会比较长,并不实用。
算法改进:
前面的计算过程和原始的Shingling算法是一致的,构成一个文档转换成shingles的特征集合,但是为了将特征集合映射成固定大小,会引 入m个不同的哈希函数,形成哈希函数簇,对于某个特定的哈希函数F,对于每个shingles都会计算出一个哈希数值,取其中最小的值作为代表,这样m个 哈希函数就会获得m个哈希数值,文档特征也就转换为固定大小m,最后再进行相似度的计算,得出相似重复页面。
转自:http://www.wuhenseo.com/course/cjcourse/424.html
然后利用union-find算法进行相似度计算Jaccard相似性。
In natural language processing a w-shingling is a set of unique "shingles"—contiguous subsequences of tokens in a document —that can be used to gauge the similarity of two documents. The w denotes the number of tokens in each shingle in the set.
维基百科用一个浅显的例子讲解了shingling算法的原理。比如,一个文档
"a rose is a rose is a rose"
分词后的词汇(token,语汇单元)集合是
(a,rose,is,a,rose,is, a, rose)
那么w=4的4-shingling就是集合:
{ (a,rose,is,a), (rose,is,a,rose), (is,a,rose,is), (a,rose,is,a), (rose,is,a,rose) }
去掉重复的子集合:
{ (a,rose,is,a), (rose,is,a,rose), (is,a,rose,is) }
给定shingle的大小,两个文档A和B的相似度 r 定义为:
r(A,B)=|S(A)∩S(B)| / |S(A)∪S(B)|
其中|A|表示集合A的大小。
因此,相似度是介于0和1之间的一个数值,且r(A,A)=1,即一个文档和它自身 100%相似。
shingling算法是最常见的文档分割算法,说白了就是将一个文档分解成由短字符构成的字符串集合。分割后的文档就可以通过Jaccard相似度等简单的度量标准进行相似度检测了。
Shingling算法二大步骤:
1、从文档中抽取能代表文档内容的特征
2、通过二个文档对应特征集合的重叠程度来判断是否近似重复。
Shingling算法实例:
假想有一个固定大小的移动窗口从第一个单字开始依次移动,每次向后移动一个单字,直到文档结尾。
在同时对汉字串做哈希计算,随着窗口的移动,会出现一系列的shingles值,这样就构成了文档对应的特征集合。
后面再进行jaccard相似性计算,计算二个集合相似部分所占总元素个数的比例。
算法缺点:
计算效率不高,当网页数量比较大时,运行时间会比较长,并不实用。
算法改进:
前面的计算过程和原始的Shingling算法是一致的,构成一个文档转换成shingles的特征集合,但是为了将特征集合映射成固定大小,会引 入m个不同的哈希函数,形成哈希函数簇,对于某个特定的哈希函数F,对于每个shingles都会计算出一个哈希数值,取其中最小的值作为代表,这样m个 哈希函数就会获得m个哈希数值,文档特征也就转换为固定大小m,最后再进行相似度的计算,得出相似重复页面。
转自:http://www.wuhenseo.com/course/cjcourse/424.html
然后利用union-find算法进行相似度计算Jaccard相似性。
相关文章推荐
- 一个基于特征向量的近似网页去重算法——term用SVM人工提取训练,基于term的特征向量,倒排索引查询相似文档,同时利用cos计算相似度
- 图像处理中,SIFT,FAST,MSER,STAR等特征提取算法的比较与分析(利用openCV实现)
- python之验证码识别 特征向量提取和余弦相似性比较
- 图像处理中,SIFT,FAST,MSER,STAR等特征提取算法的比较与分析(利用openCV实现)
- 利用SURF特征检测和FLANN最近邻算法实现图像的目标提取
- 针对特征词选择法的验证实验“各种特征词选择算法对文本分类性能的影响”:纸上得来终觉浅,觉知此事要躬行
- SIFT算法学习:特征提取函数的使用
- SIFT算法学习:特征提取函数的使用
- [原创]HashCalc - 一款计算单个文件哈希值的免费软件,目前支持CRC32、MD5、SHA-1、SHA-2、Ripemd等算法。
- 利用MPICH2计算矩阵相乘的简单算法
- 基于Matlab来计算矩阵特征值和特征向量
- 针对特征词选择法的验证实验“各种特征词选择算法对文本分类性能的影响”:纸上得来终觉浅,觉知此事要躬行 (实验数据下载)
- 计算n!的最后一位非零数字的算法
- 利用shell计算find命令查出后的总文件大小
- 经典算法研究系列:九、图像特征提取与匹配之SIFT算法
- 经典算法研究系列:九、图像特征提取与匹配之SIFT算法
- [ZZ] SIFT特征提取算法总结
- 矩阵特征值特征向量计算
- 数值计算方法与算法:C语言实现利用Gauss消元法解方程组
- 特征值与特征向量的数值计算; Matrix Eigenvalues and Eigenvectors Calculating