【问题标题】:How to find semantic similarity using gensim and word2vec in python如何在 python 中使用 gensim 和 word2vec 查找语义相似度
【发布时间】:2018-08-06 01:16:16
【问题描述】:

我的 python 程序中有一个单词列表。现在我需要遍历这个列表并找出语义相似的单词并将它们放入另一个列表中。我一直在尝试使用带有 word2vec 的 gensim 来做到这一点,但可以找到一个合适的解决方案。这就是我到目前为止所实现的。我需要有关如何遍历变量句子中的单词列表并找到语义相似的单词并将其保存在另一个列表中的帮助。

import gensim, logging

import textPreprocessing, frequentWords , summarizer
from gensim.models import Word2Vec, word2vec

import numpy as np
from scipy import spatial

sentences = summarizer.sorteddict

logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
model = word2vec.Word2Vec(sentences, iter=10, min_count=5, size=300, workers=4)

【问题讨论】:

    标签: python machine-learning nlp word2vec gensim


    【解决方案1】:

    如果你不关心合适的个集群,你可以使用这个代码:

    similar = [[item[0] for item in model.most_similar(word)[:5]] for word in words]
    

    如果你真的想对单词进行聚类,这里有几个注意事项:

    • 可以有多个这样的集群。
    • 集群的数量取决于一个超参数,一个阈值。当阈值大时,所有的词都相似,属于同一个簇,当阈值太小时,它们都不相似。
    • 单词可以自然传递包含到一个簇中,即A类似于BB类似于C,所以这三个应该在同一个簇中.这意味着您必须实现某种图遍历算法。
    • 性能很大程度上取决于训练语料库:只有足够大,gensim word2vec 才能捕获适当的相似度。因此,Gemnsim 超参数和文本预处理也很重要。

    这是一个幼稚且可能不是非常有效的算法,用于识别集群:

    model = gensim.models.word2vec.Word2Vec(sentences, iter=10, min_count=5, size=300, workers=4)
    vocab = model.wv.vocab.keys()
    
    threshold = 0.9
    clusters = {}
    for word in vocab:
      for similar_word, distance in model.most_similar(word)[:5]:
        if distance > threshold:
          cluster1 = clusters.get(word, set())
          cluster2 = clusters.get(similar_word, set())
          joined = set.union(cluster1, cluster2, {word, similar_word})
          clusters[word] = joined
          clusters[similar_word] = joined
    

    【讨论】:

    • 非常感谢。这很有道理。
    猜你喜欢
    • 2015-10-10
    • 2019-07-02
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 2018-08-29
    • 2018-08-30
    相关资源
    最近更新 更多