聚类非常多的稀疏二元向量

数据挖掘 聚类 大数据 二进制
2022-02-27 13:06:04

我有一组非常大的高维但稀疏的二进制向量。每个向量代表一个“one-hot-style”的 n-gram 单词序列,其中出现在 n-gram 中的单词的每个索引都设置为 1,所有其他的都设置为 0。例如

[0,0,0,0,0,1,0,0,0,0,1,0,0,0,...]

5-gram 的有效表示:

[5,10,235,1253,5521]

我想做的是从大型文本语料库中生成这样的 n-gram 表示。因此,这可能很容易导致数十万的词汇量(取决于潜在的预处理步骤,包括停用词删除、词干提取等),甚至更多不同的 n-gram ( m)。这可以表示为 size 的矩阵m x vocab_size

随后,我想通过将相似的 n-gram 聚集在一起同时保留包含的单词来减少行数。例如:

[5,7,10,12,15],[5,8,10,15,18] -> [5,7,8,10,12,15,18]

我的幼稚方法是应用一些传统的聚类算法,以便将初始 n-gram 集中的每个条目分配给特定的集群,然后对分配给集群的所有 n-gram 执行联合。

第一个问题:什么是聚类稀疏二进制表示的合理算法?第二个问题:如何使用非常大的数据集来完成?

2个回答

我不认为集群是正确的方法。你想自动合并它们,但是集群太不可预测了;您需要手动检查聚类结果。

我建议您改为查看近似重复检测。您想要合并具有高重叠的文档。为此,有一些有趣且可扩展的算法。特别是,minhash(以及后来的工作)值得一看。

几点。首先,如果你在做文本分析,有一些方法可以减少空间,例如停用词过滤和词干提取。你也可以考虑训练一个word2vec模型,比如gensim提供的:https ://radimrehurek.com/gensim/models/word2vec.html

这种方法的特殊优势在于将空间从 O(10^7) 占用到 O(10^2)(但向量会变得密集)。从那里,您可以尝试近似最近邻或余弦相似度。