【问题标题】:For a given word, Predict the cluster and get the nearest words from the cluster对于给定的单词,预测聚类并从聚类中获取最近的单词
【发布时间】:2020-04-16 00:30:52
【问题描述】:

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

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

我想做什么 一种。查找给定单词的集群 ID 湾。从给定单词的簇中获取前 20 个最接近的单词。

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

感谢任何帮助。

【问题讨论】:

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


    【解决方案1】:

    您的链接指南,其给定的数据,有点误导。您无法从仅 30 个单词的语料库中获得有意义的 100 维单词向量(gensim Word2Vec 类默认值)。这种模型的结果将是无意义的,对于聚类或其他下游步骤毫无用处——因此,任何声称展示此过程并具有真实结果的教程都应该使用更多的数据。

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

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

    我假设您有一些查找对象cluster,对于cluster[word],它会为您提供特定单词的集群 ID。 (这可能是一个字典,或者在提供的向量上执行 KMeans-model 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]

    【讨论】:

    • 谢谢@gojomo。您的代码有效。正如您所说,我必须有足够好的数据集才能获得所需的结果。我正在努力。的目的是从给定的主题中找到词包。对于主题建模,我使用的是 LDA。这个想法是创建每个主题的集群并获取每个主题的词包。如果这有助于您提出更好的方法,请告诉我。谢谢
    猜你喜欢
    • 2019-10-29
    • 2015-06-22
    • 2017-06-16
    • 2012-11-25
    • 2015-08-15
    • 2018-03-14
    • 2013-04-19
    • 1970-01-01
    • 2017-02-25
    相关资源
    最近更新 更多