词嵌入的 K-means 聚类给出了奇怪的结果

数据挖掘 nlp 聚类 词嵌入
2021-09-19 13:17:49

我正在尝试根据预先训练的嵌入对单词进行聚类。我进行了一个简单的实验,获得了大约 100 个与“食物味道”相关的词,从预训练集中获得了词嵌入,并尝试对结果运行 k-means。

我确实在某些集群上得到了合理的结果,但在其他集群上却得到了非常奇怪的结果。例如:

Cluster 1: [fatty, oily, greasy] -- (good)
Cluster 2: [crumbly, powdery, grainy, flakey, chalky] -- (good)
Cluster 3: [flavorful, hearty, unflavored, savory, full-bodied] -(bad)
Cluster 4: [seasoned, unseasoned] -- (bad)

任何人都可以建议为什么看似相反的词(如(调味,未调味)和(美味,未调味)会聚集在一起?

我尝试了什么:

1) 使用 fasttext 嵌入和 Glove 嵌入。最新结果来自连接 fasttext wikipedia 和常见的爬网嵌入。

2)在做k-means之前将向量归一化为相同的长度(使用eucledian distnaces)。我认为这有点类似于余弦距离。尝试没有很好地规范化,但规范化给出了更好的结果。

3)尝试了其他一些集群方法,如 DBSCAN,但 k-means 似乎更好。

4) 尝试 PCA 来降低词向量的维数 - 并没有太大改变结果。为我的词汇中需要聚类的选定嵌入尝试了 PCA,而不是整个单词集。

欢迎任何改进我的结果的建议。如果有人遇到讨论类似问题的研究文章,请同时发布。

谢谢!跨国公司

1个回答

词嵌入是通过可替代性而不是相似性来训练的。

如果您考虑像“这种食物没有味道”这样的句子。那么一个好的替代词将是“调味”,而句子仍然是“正确的”。

在许多情况下,可替代性源于相似性(松脆、酥脆),但它也确实源于对立面。你也可以认为“国王”和“王后”是对立的。

那么你可能应该使用有监督的方法。