python - 如何在 python 中使用 gensim 和 word2vec 查找语义相似性

标签 python machine-learning nlp word2vec gensim

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

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)

最佳答案

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

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

关于python - 如何在 python 中使用 gensim 和 word2vec 查找语义相似性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48990935/

相关文章:

python - 在Python中处理列表和消息

python - 如果几个字符串之一在其他字符串中 : return a value + matching string, Python

python - scikit : Wrong prediction for this case

python - 重新初始化已编译的 Theano 函数的最佳方法

python - 我可以在 python 中使用 NLTK 从 Spacy 依赖树中找到主题吗?

python - 如何使用 css_parser 获取此属性?

python - 循环访问数据帧列表时功能不起作用

r - 在 r 中预测 3 个相关结果不起作用

javascript - 如何避免node.js自然地分割带有特殊字符的单词

python - 有没有办法使用 Python 或某些 NLP 技术从字符串中删除不需要的空格? (不是尾随或额外的空格)