minhash算法检索相似文本_海量数据相似数据查找方法

本文介绍了在处理高维稀疏数据时,如何使用minhash, LSH(局部敏感哈希)和simhash算法进行相似数据查找。minhash通过降低高维集合到低维空间,LSH则进一步通过哈希机制减少比较次数,而simhash将文本映射为固定长度的二进制串,便于高效计算汉明距离。这些方法在推荐系统和文本去重等领域有广泛应用。" 120961806,11529257,Redis中保存时间序列数据的方法与优缺点,"['Redis', '数据库', '哈希算法']
摘要由CSDN通过智能技术生成

目录

主要分为高维稀疏向量和稠密向量两大方向。

高维稀疏向量的相似查找——minhash, lsh, simhash

针对高维稀疏数据情况,如何通过哈希技术进行快速进行相似查找。

例如,推荐系统中item-user矩阵。如果你有item数量是百万级别,user是千万级别,这个矩阵是十分稀疏的。你如何计算每一个item的Top N相似item呢?

同样海量文本场景,文本集合可以看成doc-word 稀疏矩阵,如何求解每个文档的Top N相似文档?

如果采用两两比较的话,至少有两个问题:

O(n^2) 遍历时间复杂度;

两个高维向量之间计算相似度,比如jaccard相似度,时间很耗时。

常见的解决方法如下:

正排是doc-words,倒排是word-docs

对正排里doc1的所有words,拉出对应的倒排docs,归并

对正排里doc2的所有words,拉出对应的倒排docs,归并

对上述两个向量求相似度

问题:虽然时间复杂度可以减小,但高频词可能导致倒排的拉链长度太长,导致效率下降。

minhash

例如,小写字母代表词,大写字母代表文档:

S1={a, d}, S2={c}, S3={b, d, e}, S4={a, c, d}

然后,把原来的词典{a, b, c, d, e} 顺序随机重排,例如得到{b, e, a, d, c},

定义一个函数h:计算集合S最小的minhash值,就是在这种顺序下最先出现1的元素。那么,

h(S1) = a, h(S2)=c, h(S3)=b, h(S4)=a

类似地,如果进行n次重排的话,就会有n个minhash函数,{h1(S), h2(S)…, hn(S)}, 那原来每个高维集合,就会被降到n维空间,比如S1->{h1(S1), h2(S1)…, hn(S1)}。

但是实际中因为重排比较耗时,会用若干随机哈希函数替代。比如设定一个哈希函数: h(x) = (i+1) % 5.

以{a, b, c, d, e}顺序,“i”表示各个索引,比如a的“i”值为1, b的“i”值为2等。

对集合S1,计算各个元素哈希值为{2,0},其中h(a->i) = 2, h(d->i) = 0,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值