minhash算法_小k

minhash算法_小k对于web网页去重的应用,如抄袭、镜像等,通过将网页表示为字符k-grams(或者k-shingles)的集合,把网页去重的问题转化为找到这些集合的交集。使用传统的方法存储这些巨大的集合以及计算它们之间的相似性显然是不够的,为此,对集合按某种方式进行压缩,利用压缩后的集合推断原来集合的相似性。 Jaccard相似性:只关注集合之间的交集大小。集合S和T的Jaccard相似性定义如下:

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定


对于web网页去重的应用,如抄袭、镜像等,通过将网页表示为字符k-grams(或者k-shingles)的集合,把网页去重的问题转化为找到这些集合的交集。使用传统的方法存储这些巨大的集合以及计算它们之间的相似性显然是不够的,为此,对集合按某种方式进行压缩,利用压缩后的集合推断原来集合的相似性。

 

Jaccard相似性:只关注集合之间的交集大小。


集合S和T的Jaccard相似性定义如下:


minhash算法_小k

 

比如S = { a, b, c, d } and T = { c, d, e, f } , 那么SIM(S, T )= 2/6。

 

k-Shingles


一篇文档可以看成是一个字符串,文档的k-shingle为在该文档中长度为k的所有子串。任意一篇文档都可以表示为k-shingles的集合,比如“A document is a string of characters”这句话的所有3-shingles为{ ”A d”, ”do”, ”doc”, ”ocu”, ”cum”, ”ume”, ”men”, ”ent”, . . . , ”ers” }。如果k非常小,那么k个字符的序列会出现在大多数的文档中,如k=1,许多文档都有相同的字符,几乎所有的文档都有很高的相似性。如果k应该足够大,那么对于给定的shingle出现在不同的文档中的概率是非常低的。比如这两个单词“ document”和“monument”:


SIM( { d, o, c, u, m, e, n, t } , { m, o,n, u, m, e, n, t } ) = 6/8

SIM( { doc, ocu, cum, ume, men, ent } ,{mon, onu, num, ume, men, ent } ) = 3/9

 

对于电子邮件的语料库,k=5就足够了,因为在电子邮件中出现的英文字母和空白字符有27个,那么就会有275 = 14 348 907 shingles,一般电子邮件的长度不会超过14 million个字符,所以k=5是一个合理的值。

 

Hashing Shingles

 

不使用子串直接作为shingles,而是使用hash函数将长度为k的字符串映射到哈希桶中,哈希桶的编号作为shingle,则表示文档的集合转化为含有哈希桶编号的集合。一篇文档的9-shingle可以映射到[0,232 – 1]。如果使用4-shingles,许多4字节的序列在一般的文档中是找不到的,不同的shingles数量大约有204=160 000,远小于232

 

Minhash技术

 

由于shingles的集合非常大,即使把它们映射hash成4字节,所需要的空间仍然是一篇文档所占空间的4倍。对于million级别的文档,就不能将所有shingle集合加载到内存。对于占用空间大集合,我们将其替换为占用空间较小的签名(signatures)表示,并且signatures在一定程度上保留集合的相似性信息。

 

集合的特征矩阵


矩阵的列对应集合,行对应从文档中(或者universal set)获取到的元素,如果r行是c列的集合元素,就将矩阵的r行c列设置为1,否则为0。例如,universal set :{ a, b, c, d, e },S1 = { a, d } , S2 = { c } , S3 = {b, d, e } , S4 = { a, c, d } ,特征矩阵如下:


minhash算法_小k

 

我们想要的signatures是通过对特征矩阵的一系列minhash计算所得到的,任何一列的minhash值为经过置换后第一个为1的元素对应行号(行号从0开始)。有点拗口,我们对上面的特征矩阵变换顺序( beadc ),得到新的特征矩阵:


minhash算法_小k


上图中特征矩阵的minhash值:h(S1) = 2 (a), h(S2) =4 (c), h(S3) = 0 (b) 和h(S4) = 2(a)。

 

Minhash和Jaccard相似性有重要的联系:如果两个集合S1和S2的Jaccard相似性是一样的,那么以很高的概率保证它们的minhash值也是相等的。

 

计算signatures的步骤:

1>    对特征矩阵M做n次随机置换;

2>    根据这些置换确定minhash函数h1,h2,… ,hn

3>    用列表示集合S,构建S的minhash的signature,(h1(S), h2 (S), . . . , hn (S));

4>    有上述步骤即可构建M的signature矩阵,即M的第i列被替换为第i列的minhash signature。

注意:signature矩阵和特征矩阵M有相同的列数,但是只有n行,要比M矩阵小的多。

 

显然对一个很大的特征矩阵做置换是不可行的,但是可以通过随机hash函数模拟随机置换效果,将行号映射到桶的编号。具体方案为:随机选择n个hash函数h1,h2,…,hn,SIG(i,c)为signature矩阵的元素,是由第i个hash函数和M的第c列确定:

SIG(i, c) = min { hi(r) : forsuch r that c has 1 in row r }

 

举例说明:


minhash算法_小k

 

计算hash值(置换顺序):


minhash算法_小k

 

根据公式SIG(i, c) = min { hi(r) : forsuch r that c has 1 in row r },计算signature:


minhash算法_小k


minhash算法_小k


通过signature矩阵估计Jaccard相似性:

SIM(S1, S2) = 0   SIM(S1, S3) = 1/2   SIM(S1, S4) = 1

而实际的相似性为:

SIM(S1, S2) = 0   SIM(S1, S3) = 1/4   SIM(S1, S4) = 2/3


参考资料

Finding similar items 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/226853.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • pip安装geopandas 教程「建议收藏」

    附上geopandas安装的官网链接(英文):http://geopandas.org/install.html本文安装方式:pipinstallgeopandas系统环境:win1064位python版本:3.7.064位首先需要手动安装geopandas的依赖库:numpy(pipinstall即可,已有不必再安装)six(pipinstall即可…

  • 闫学灿acwing_用标号法求网络最大流

    闫学灿acwing_用标号法求网络最大流给定一个包含 n 个点 m 条边的有向图,并给定每条边的容量,边的容量非负。图中可能存在重边和自环。求从点 S 到点 T 的最大流。输入格式第一行包含四个整数 n,m,S,T。接下来 m 行,每行三个整数 u,v,c,表示从点 u 到点 v 存在一条有向边,容量为 c。点的编号从 1 到 n。输出格式输出点 S 到点 T 的最大流。如果从点 S 无法到达点 T 则输出 0。数据范围2≤n≤1000,1≤m≤10000,0≤c≤10000,S≠T输入样例:7 14 1 71 2

  • java异常中常见的问题

    java异常中常见的问题

  • Java8 Stream 数据流,大数据量下的性能效率怎么样?

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 作者:Al_assad blog.csdn.net/Al_assad/article/details/8235660…

  • 矩阵特征值和特征向量详细计算过程(转载)_矩阵特征值的详细求法

    矩阵特征值和特征向量详细计算过程(转载)_矩阵特征值的详细求法1.矩阵特征值和特征向量定义        A为n阶矩阵,若数λ和n维非0列向量x满足Ax=λx,那么数λ称为A的特征值,x称为A的对应于特征值λ的特征向量。式Ax=λx也可写成(A-λE)x=0,并且|λE-A|叫做A的特征多项式。当特征多项式等于0的时候,称为A的特征方程,特征方程是一个齐次线性方程组,求解特征值的过程其实就是求解特征方程的解。 计算:A的特征值和特征向量。计算行列式得化简…

    2022年10月22日
  • 如何测试网站打开速度(网站访问速度)

    检测网站打开速度的5个方法网页载入速度对于一个网站来讲很关键,Google已经将一个网站的载入速度列入了网站关键字排名的考虑因素当中,也就是说如果你的网站有足够的内容,而且载入速度比别人的网站更快一步的话,那么你就是获得更好的排名。那么下面就赶快测试你的网站,提高网站访问速度吧。1:用Ping命令简单测网站速度的方法Ping可以用来检查网络是否通畅或者网络连接速度,点击开始→运行在运行中输…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号