我已按照给出此链接的说明对我的语料库进行了w2v和k-means的培训。
https://ai.intelligentonlinetools.com/ml/k-means-clustering-example-word2vec/
我要执行的操作一种。查找给定单词的集群IDb。从给定单词的聚类中获取最接近的20个单词。
我已经弄清楚了如何在给定簇中的单词。我想要的是找出在给定簇中与我给定单词更接近的单词。
感谢您的任何帮助。
您的链接指南根据其给定的数据有些误导。仅凭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]
。