Python 中的单词聚类列表



我是文本挖掘的新手,这是我的情况。假设我有一个单词列表['car', 'dog', 'puppy', 'vehicle'],我想将单词聚类成k组,我希望输出为[['car', 'vehicle'], ['狗', 'puppy']]。我首先计算每个成对单词的相似度得分,得到一个 4x4 矩阵(在本例中)M,其中 Mij 是单词 i 和 j 的相似度分数。将单词转换为数字数据后,我利用不同的聚类库(例如sklearn)或自己实现它来获取单词聚类。

我想知道这种方法有意义吗?此外,我如何确定 k 的值?更重要的是,我知道存在不同的聚类技术,我在考虑我是否应该使用 k 均值或 k 中心点进行词聚类?

继Brian O'Donnell的回答之后,一旦你计算了与word2vec(或FastText或GLoVE,...)的语义相似性,你就可以使用sklearn.clustering对矩阵进行聚类。我发现对于小矩阵,光谱聚类提供了最好的结果。

值得记住的是,词向量通常嵌入在高维球体上。具有欧几里得距离矩阵的 K 均值无法捕获这一点,并且可能导致非近邻单词的相似性结果不佳。

如果你想

通过单词的"语义相似性"(即它们的含义的相似性)来聚类单词,请查看Word2Vec和GloVe。Gensim有一个Word2Vec的实现。 这个网页,"Word2Vec Tutorial",由Radim Rehurek提供关于使用Word2Vec确定相似单词的教程。

除了已经说过的关于相似性分数的内容之外,在聚类应用程序中查找k通常由碎石图(也称为"肘部曲线")辅助。在这些图中,您通常会测量 y 轴上的聚类与 x 轴上的聚类数之间的离散。在碎石图中找到曲线的最小值(二阶导数)可以更客观地衡量聚类"唯一性"。

最新更新