对于给定的单词,预测聚类并从聚类中获取最近的单词

时间:2019-12-25 09:31:20

标签: python-3.x cluster-analysis k-means word2vec supervised-learning

我已按照此链接提供的说明对我的语料库进行了w2v和k-means的训练。

https://ai.intelligentonlinetools.com/ml/k-means-clustering-example-word2vec/

我要这样做 一种。查找给定单词的集群ID b。获取给定单词在簇中最接近的20个单词。

我已经弄清楚了如何在给定簇中的单词。我想要的是找出在给定簇中与我给定单词更接近的单词。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

使用给定的数据,您的链接指南有些误导。仅凭30个单词的语料库就无法获得有意义的100维单词向量(默认为gensim Word2Vec类)。这样的模型的结果将是无稽之谈,对于聚类或其他下游步骤毫无用处-因此,任何旨在显示此过程并具有真实结果的教程都应使用更多的数据。

如果实际上您正在使用更多的数据,并且已经成功地对单词进行了聚类,则Word2Vec模型的most_similar()函数将为您提供任何给定的前N个(默认为10个)最近的单词输入单词。 (具体来说,它们将以(word, cosine_similarity)元组的形式返回,并按最高的cosine_similarity排名。)

Word2Vec模型当然不会考虑聚类的结果,因此您必须过滤这些结果以丢弃感兴趣的聚类之外的单词。

我假设您有一些查找对象cluster,它为cluster[word]提供了特定单词的群集ID。 (这可能是字典,或对提供的向量执行KMeans模型predict()的操作。)total_words是模型中单词的总数。 (例如:total_words = len(w2v_model.wv)。那么您的逻辑应该大致类似于

target_cluster = cluster[target_word]
all_similars = w2v_model.wv.most_similar(target_word, topn=total_words)
in_cluster_similars = [sim for sim in all_similars 
                       if cluster[sim[0]] = target_cluster]

如果您只想获得前20名的结果,请剪切到in_cluster_similars[:20]