如何检测大数据上的类似文本?

时间:2015-11-18 16:05:37

标签: text similarity minhash simhash

正如我所知,simhash和minhash可用于此任务。但是所有这些算法都必须遍历整个文本数据库,这将非常令人难以置信。 是否有任何可以加速任务的优化或其他算法? 我想到的就是将文本数据库分成几个部分并且并行获得成对相似性。 我的文本数据库有大约10亿条记录。

1 个答案:

答案 0 :(得分:1)

您必须遍历整个数据库一次(10亿条记录)。

minhash和simhash的好处是你不必单独比较每个可能的对,看它们是否相似(大约500万亿可能的对)。

将数据库拆分成多个部分并没有帮助;你会错过一些相似之处。如果记录自然地落入您知道它们之间不具有任何相似性的组中,则拆分是合理的(例如,如果您有两种非常不同类型的记录,它们彼此之间不相似,则可以单独处理它们以进行相似性检测)

simhash和minhash都可以从分布式计算中受益。生成哈希可以根据需要进行分配。如果您愿意,可以使用map / reduce分割哈希值,但对于simhash,您可能不需要它,因为它足够紧凑,可以放入相当标准的机器的主存储器中。

Simhash只能找到非常相似的相似性对,并且通常需要相当多的调整才能很好地工作。如果你想找到更松散的相似之处,可以使用一种更宽容的minhash变体。我建议结合LSH检查superminhash。 Superminhash是快速生成哈希值,但更重要的是它可以实现更好的精度,因此需要存储更少的哈希值。 LSH将哈希分为乐队,这样你就不会比较单个哈希;你一次比较整个乐队。这两种技术都意味着查找单个共享哈希(或后一种情况下的波段)所需的查询较少,特别是LSH意味着每个查询需要处理的结果较少。这应该会给你带来很大的加速。