没有标签传播的半监督学习

数据挖掘 Python 聚类 word2vec 半监督学习
2022-03-11 01:55:00

我试图通过亲和力来聚类一些单词。使用 Word2Vec,我获得了可以用普通无监督方法聚类的每个单词的向量表示。

不过,在这些词中,我知道其中一些词的分类,例如我知道:

Colors组 ==> red, blue,yellow
Gender组 ==> man,woman

UNKNOWN==> shoes, brown, beautiful.

如示例所示,brown应归类为Color,但shoesbeautiful应为不同的集群。

我如何使用这些信息来创建一个半监督模型以对每个单词进行聚类?


虽然这个问题很笼统,但我实际上尝试在 Python 中创建一个程序,我尝试了 scikit 方法sklearn.semi_supervised.LabelSpreadingsklearn.semi_supervised.LabelSpreading.
但是,这些并不是我所需要的,因为它们只将已知标签分配给剩余的对象,这意味着我最终只会得到我的ColorsGender组。

1个回答

在这里看起来不错的一种策略是实例级约束聚类。这些方法是半监督算法,在已知标签的实例之间具有“必须链接”和“不能链接”约束。因此,在您的示例中,您会将 4 对(红色、蓝色)、(红色、黄色)、(蓝色、黄色)和(男人、女人)绑定为“必须链接”,并将 6 对(红色、男人), (red, woman), ..., (yellow, woman) 作为“无法链接”。

结果类似于无监督聚类。例如,如果您要使用 DBSCAN(忽略标签/约束),则无需指定要尝试实现的集群/组的数量,该算法甚至会找到“异常值”。

事实上,有一个支持实例级约束的 DBSCAN 版本,称为 C-DBSCAN。Ruiz 等人 (2010) 在“基于密度的半监督聚类”一书中对其进行了描述。

我不知道任何可用的开箱即用实现,但我有一个用于实验的 C-DBSCAN 工作版本。但是,它没有记录,也不是性能/生产级别。如果您有兴趣,可以在我实验室的存储库中找到它(还包含 C-DenStream,它是它的数据流版本,但它似乎不适合您的问题)。