【发布时间】:2019-02-11 08:56:14
【问题描述】:
我有一个关于 gensim Word2Vec 的问题,文档对我没有帮助。
例如,在我的文本块中,我有一些类似的句子:
<Word1> <Word2> <Word3>
<Word1> <Word2> <Word3>
<Word1> <Word2> <Word3>
...
然后我有一个新句子,比如:
<Word1> <Word2> <Word3> <Word4>
如何检测这种情况? (当然 Word4 也在字典中)
我的解决方案: 1)。我试图为每个单词找到最相似的单词,然后看看 - 如果下一个单词在这个是 - 好的,否则 - 我可以找到 Word4。我的意思是我会这样做:
model.most_similar('<Word_i>')
or
model.similar_by_vector('<Word_i>')
在答案列表的顶部,我将得到 Word_i+1。但它不起作用! 因为我认为训练后句子中的单词会有非常相似的坐标,并且在顶部列表中 Word_i+1 将是 Word_i。 但这是错误的。当我检查此解决方案并接受所有文本语料库的训练时,我遇到了 Word_2 不在 Word_1 的顶部列表中的情况!我的解释是,不是近的词有非常相似的坐标,但是上下文接近的词有非常相似的坐标,它不一样..
2)。所以我的第二个解决方案是使用 doesnt_match(),它接受一个单词列表,并报告离所有单词的平均值最远的一个单词。
print(model.doesnt_match('<Word1> <Word2> <Word3> <Word4>'.split()))
是的 - 在这种情况下,答案将是 Word4! (所以我检测到这个词) 但如果我这样做:
print(model.doesnt_match('<Word1> <Word2> <Word3>'.split()))
答案将是 Word2(例如)。如果我再次探索 Word1 和 Word3 的热门单词,我将不会在此列表中看到 Word2,但是这句话(Word1 Word2 Word3)是正常的。
那么我该如何检测呢?
【问题讨论】:
标签: python python-3.x machine-learning nlp word2vec