Word2Vec的工作原理?Python

我对gensim Word2Vec 有一个问题,文档没有帮助到我。

例如,在我的文本块中有一些句子如下:

<Word1> <Word2> <Word3><Word1> <Word2> <Word3><Word1> <Word2> <Word3>         ...

然后在某个时候我有一个新的句子如下:

<Word1> <Word2> <Word3> <Word4>

我如何检测这种情况?(当然Word4也在词典中)

我的解决方案:1)。我尝试为每个词查找最相似的词,看看 – 如果下一个词在其中 – 那就OK,否则 – 我可以找到Word4。我的意思是我会这样做:

model.most_similar('<Word_i>')ormodel.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)是正常的。

那么我如何检测它呢?


回答:

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

那么,让我们考虑有两个句子的情况:<Word1> <Word2> <Word3><Word1> <Word4> <Word3>。在创建word2vec模型时,我们会取目标(当前)词的左右相同数量的词,并构造像这样的元组:(target_word, proximity_word)。假设我们想要观察目标词是中间词的情况。所以对于句子1,我们会得到(<Word2>, <Word1>)(<Word2>, <Word3>),对于句子2,我们会得到(<Word4>, <Word1>)(<Word4>, <Word3>)。这样我们告诉模型<Word1><Word3> 是在<Word2>的上下文中。同样,<Word1><Word3> 是在<Word4>的上下文中。这意味着什么呢?我们可以得出结论,<Word2><Word4> 在某种程度上是相似的。

所以如果你调用most_similar(<Word2>),你不会得到或但因为词2和4出现在相同的上下文中。也就是说,你不能期望如果你有句子<Word1> <Word2> <Word3> <Word4> 并调用most_similar(<Word3) 就能得到<Word4>的向量。相反,你会得到某个出现在词1、2和4的上下文中的词(这个上下文窗口取决于我们在训练前指定的大小)。我希望这对你有帮助,并使word2vec更加清晰。

Related Posts

为什么我们在K-means聚类方法中使用kmeans.fit函数?

我在一个视频中使用K-means聚类技术,但我不明白为…

如何获取Keras中ImageDataGenerator的.flow_from_directory函数扫描的类名?

我想制作一个用户友好的GUI图像分类器,用户只需指向数…

如何查看每个词的tf-idf得分

我试图了解文档中每个词的tf-idf得分。然而,它只返…

如何修复 ‘ValueError: Found input variables with inconsistent numbers of samples: [32979, 21602]’?

我在制作一个用于情感分析的逻辑回归模型时遇到了这个问题…

如何向神经网络输入两个不同大小的输入?

我想向神经网络输入两个数据集。第一个数据集(元素)具有…

逻辑回归与机器学习有何关联

我们正在开会讨论聘请一位我们信任的顾问来做机器学习。一…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注