我已按照此链接提供的说明对我的语料库进行了w2v和k-means的训练。
https://ai.intelligentonlinetools.com/ml/k-means-clustering-example-word2vec/
我要这样做 一种。查找给定单词的集群ID b。获取给定单词在簇中最接近的20个单词。
我已经弄清楚了如何在给定簇中的单词。我想要的是找出在给定簇中与我给定单词更接近的单词。
感谢您的帮助。
答案 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]
。