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

How to detect the similar text on big data?

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

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

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

将数据库拆分成多个部分无济于事;您只会错过一些相似之处。拆分只有在记录自然地分成您知道它们之间没有任何相似性的组时才有意义(例如,如果您有两种截然不同的记录类型,它们彼此之间从不相似,您可以将它们分开处理以进行相似性检测) .

simhash 和 minhash 都可以从分布式计算中获益。生成的哈希值可以随心所欲地分发。如果你愿意,哈希的存储可以用 map/reduce 分开,但对于 simhash 你可能不需要这个,因为它足够紧凑以适合相当标准的机器的主内存。

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