单机实现亿级规模题库去重

这篇博客讨论了如何在近亿规模的题库中进行去重工作,通过分析不同算法如MD5、最长公共子序列、最小编辑距离和Jaccard相似度的优缺点,提出利用线上拍搜日志进行聚类和精细计算的策略。博主通过日志选取、集合求并、元素限制和精细计算步骤,实现了有效的去重方案,降低了计算量,提高了搜索引擎的准确性。
摘要由CSDN通过智能技术生成

背景

最近工作中遇到了一个问题:如何对大规模题库去重?公司经过多年的积累,有着近亿道题目的题库,但是由于题目来源不一导致题库中有很多重复的题目,这些重复的题目在检索时,除了增加搜索引擎的计算量外,并不会提高准确率。

此外由于题目过多,搜索引擎往往采取了截断策略,只对一部分题目进行计算,这导致了某些正确的题目反而得不到计算,拍搜准确率甚至不增反降。所以对于一个搜索引擎来说,虽然初期增加题目数量往往可以大幅提高拍搜准确率,但是当题目量大到一定程度时,反而会由于计算量跟不上导致准确率下降。如何尽可能的去除重复题目显得尤为重要。

一些尝试方案

比较MD5值

对每道题目计算其MD5值作为签名,这样在新增题目时,只要判断题库中是否有相同的MD5值即可。

这种方案只适用于两道题目一模一样的情况,而现实中题目往往不只是这样。

  • “A比B大10"与"B比A小10”

  • “小红买10本书”与“小明买10本书”

  • “今天空气温度为10度”与“今天的空气温度为10度”

这些应该是重复题,但是MD5值不同,没法去重。

利用最长公共子序列和最小编辑距离算法

利用最长公共子序列算法与最小编辑距离算法计算两个题目的相似度,如果相似度大于一定比例,例如大于90%,就认为是重复的题目。

这个方法理论上可行,但是计算量太大。假如文档数为N,平均文档长度为M,那么计算量大致为:O(N2∗M2) 。

假设N=1000万,M=200,则计算量约为 4∗1018 ,笔者线下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值