文本文档的动态聚类

数据挖掘 聚类 文本挖掘 相似 类似文件
2022-02-24 14:57:07

我有几十万个文本文档。其中一些非常相似——它们只是在 ex 上有所不同。名称或一些数字,所有其他文本都是相同的。我想对这些文档进行聚类,所以当我列出它们时,最相似的会分组列出。这就是我如何避免一个接一个地列出许多(几乎)相同的文件。

我在想某种聚类会派上用场。但问题是,我不知道我需要多少个集群。此外,数字必须是动态的。而且,大多数文档不属于一个集群,因为它们没有任何类似的文档。所以我会聚集类似的文件。

任何人都可以指出可以帮助我解决这个问题的方向,或者提供一些类似问题的例子。

2个回答

听起来好像您不需要 clustering

而是您试图检测附近的重复项

不同之处在于集群试图组织一切,重点放在更大的整体结构上。但是您的大部分数据可能不是重复的。聚类既困难又缓慢。近似重复更容易,也更快(例如,使用 MinHash 或相似性搜索)

正如您所说,提前考虑集群的数量可能会受到限制。一个简单的解决方案是使用 KNN。
然而,KNN 运行数百 ks 文档的成本可能相当高。为了限制您的搜索空间,您应该首先过滤掉(并快速完成)没有机会与新文档共享集群的文档。所以,我在考虑某种散列,但更简单的解决方案是采用l您的 TF-IDF 表示或其他内容中的前导索引。因此,您需要一些字典将索引集(如语料库中的单词)映射到某个整数值。

所以一个通用的方案可以遵循以下几行:

  • 创建TF-IDF表示d到您的文档。
  • 提取一些l在该文档中具有最高价值的单词,称为这个集合W.
  • 提取一个集合小号在所有文件中W(或者说,90%W) 作为他们的引导词。
  • 运行 KNNd过集小号.

另一种更简单但更基于数学的方法称为MinHash,在 Jure Leskovec 的书《挖掘海量数据集》第 3 章第 3.4 节中有详细描述。该方法使用词袋模型Jaccard 相似度来计算随机排列签名,然后对签名应用LSH以将相似的文档存储在一起。

祝你好运!