大量文本查重相似度计算功能设计-基于simhash+相似度算法

博主记录文本查重功能遇到的问题及解决办法。先介绍simhash分桶策略适合高相似度文本查重,后因业务需求采用simhash与编辑距离算法结合的方式,还提及未用分桶策略、估算海明距离等操作。最后指出优化空间,如用PostgreSQL运算、设定合适海明距离、同机部署减小开销。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近做文本查重功能,陆续遇到一些问题,做一下记录:

1、simhash分桶策略,只适合基本完全相同的文本查重,比如网页查重。64位simhash如果有3位以内的海明距离,则认为文本一致;存储使用hbase等列式存储,分4个桶,64位simhash分4个桶存储,必有一个key一致。这样性能很高,但是也只能查相似度非常高的,90+%以上的;

2、业务需要查询与当前文本重复率达到指定百分比以上的文本,仅仅使用simhash算法是不够的,因此最终采用了simhash算法(高性能)与其它相似度算法(编辑距离算法,可以得到相似度比值,相对于simhash算法性能低)相结合的方式;

a.simhash算法未采用分桶策略,因为业务可能设置较低的相似度,分桶数量过多会占用过多空间,同时也失去了分桶的意义;

b.根据业务测试,估算出较为合适的海明距离8-12,每新增一个文本,过滤hbase中的全部simhash,进行海明距离计算,得到可能相似的文本列表。

c.simhash海明距离判断相似的文本,通过id获取到详细文本,进行下一步的编辑距离相似度计算;编辑距离相似度计算,为提高效率,使用了多线程。

3、优化空间

a、simhash计算海明距离,程序逐个进行运算,数据量较小的情况下可以满足,样本数据量增加到数万至10W+以上,查重时间过长难以满足性能要求;查询资料说可以使用PostgreSQL进行大数据量的海明距离运算。

b、海明距离相似度过滤,存在一定的误判可能性,需要针对自身业务进行测试,设定合适的海明距离。同时业务需要允许一定的查重误判(较小比例)可能性;

c、文本的传输存储,需要消耗一定的网络带宽,可以考虑文本存储和编辑距离运算同机部署,以减小网路开销;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值