【问题标题】:How Word2Vec works? PythonWord2Vec 如何工作? Python
【发布时间】: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


    【解决方案1】:

    我不确定我是否理解这里的问题,但我会尝试解释 word2vec 概念以及 most_similar 返回什么,希望它会有所帮助。

    所以,让我们考虑一下有两个句子的情况:&lt;Word1&gt; &lt;Word2&gt; &lt;Word3&gt;&lt;Word1&gt; &lt;Word4&gt; &lt;Word3&gt;。在创建 word2vec 模型时,我们取目标(当前)词左右相同数量的词,并构造元组,如:(target_word,proximity_word)。假设我们要观察目标词是中间词时的情况。所以对于 sentence1,我们将得到 (&lt;Word2&gt;, &lt;Word1&gt;)(&lt;Word2&gt;, &lt;Word3&gt;),对于 sentence2,我们将得到 (&lt;Word4&gt;, &lt;Word1&gt;)(&lt;Word4&gt;, &lt;Word3&gt;)。这样我们告诉模型&lt;Word1&gt;&lt;Word3&gt; 在.同样,&lt;Word1&gt;&lt;Word3&gt;&lt;Word4&gt; 的上下文中。那是什么意思?我们可以得出结论,&lt;Word2&gt;&lt;Word4&gt; 在某种程度上是相似的。

    因此,如果您致电most_similar(&lt;Word2&gt;),您将不会得到 or 而是因为单词 2 和 4 出现在相同的上下文中。也就是说,你不能指望如果你有句子&lt;Word1&gt; &lt;Word2&gt; &lt;Word3&gt; &lt;Word4&gt; 并调用most_similar(&lt;Word3) 来获得&lt;Word4&gt; 的向量。相反,您会得到一些出现在单词 1、2 和 4 的上下文中的单词(此上下文窗口取决于我们在训练之前指定的大小)。我希望这对您有所帮助并使 word2vec 更清晰。

    【讨论】:

    • 我们使用 window 参数是为了什么?来自文档:“句子中当前单词和预测单词之间的最大距离。”如果窗口 = 1 会怎样?这是否意味着,我们设置为每对单词将是上下文接近的模型?例如:Word1 和 Word2,Word2 和 Word3 等等?
    • 不,这意味着我们在创建元组时考虑了目标词前后的词数。因此,如果window=1 就是我在答案中描述的情况。如果window=2 表示目标词之前有 2 个词,目标词之后有 2 个词
    猜你喜欢
    • 2021-12-31
    • 2018-10-26
    • 2018-08-29
    • 2012-07-20
    • 1970-01-01
    • 2017-02-24
    • 2015-07-20
    • 2014-03-29
    相关资源
    最近更新 更多