使用Word2vec模型预测单词


20

给出一个句子:“当我打开??门时,它会自动开始加热”

我想获得??中可能的单词的列表 很有可能。

word2vec模型中使用的基本概念是根据周围环境“预测”单词。

一旦建立模型,什么是正确的上下文向量运算以对新句子执行我的预测任务?

它仅仅是线性和吗?

model.most_similar(positive=['When','I','open','the','door','it','starts' ,'heating','automatically'])

我实现了以上算法,并遇到一个问题:为什么要使用softmax?让我向您展示两个标准化函数的示例:def softmax(w,t = 1.0):#来源:gist.github.com/stober/1946926 e = np.exp(w / t)return e / np.sum( e)def规范化(w):返回w / np.sum(w)a = np.array([。0002,.0001,.01,.03])打印规范化(a)打印softmax(a,t = 1 )让我们比较输出:[0.00496278 0.00248139 0.24813896 0.74441687] [0.24752496 0.24750021 0.24996263 0.25501221]如我们所见,softmax给出的.03与.0001的概率大致相同(这是

Answers:


9

Word2vec在两种模型CBOW和skip-gram中工作。让我们采用CBOW模型,因为在给定周围单词的情况下,您的问题以与预测目标单词相同的方式进行。

从根本上讲,该模型开发了输入和输出权重矩阵,该矩阵在隐藏层的帮助下取决于输入上下文词和输出目标词。因此,当预测输出向量与当前输出矩阵之间的误差差时,将使用反向传播来更新权重。

基本上说来,从给定的上下文词中预测目标词被用作方程式,以获得给定数据的最佳权重矩阵。

为了回答第二部分,这似乎不仅仅是线性和。

  1. 获取上下文词的所有词向量
  2. 对它们求平均以找出h大小为2的隐藏层矢量Nx1
  3. 获得大小为的输出矩阵syn1word2vec.cgensimVxN
  4. 乘法syn1通过h,所得到的矢量将是z与尺寸Vx1
  5. y = softmax(z)用size 计算概率向量Vx1,其中最高概率表示词汇中目标词的一键表示。 V表示词汇量,N表示嵌入向量的量。

资料来源:http : //cs224d.stanford.edu/lecture_notes/LectureNotes1.pdf

更新:长期短期记忆模型目前在预测接下来的单词方面做得很好。seq2seq模型在tensorflow教程中进行了解释。还有一篇有关文本生成的博客文章


谢谢 !您知道对此有任何实现吗?(例如,作为gensim的一部分)。否则,它看起来并不太复杂。
DED 2016年

嗨,您能给我更多有关如何从经过训练的w2v嵌入模型中检索输出矩阵(在您的示例中为syn1)的详细信息吗?我认为w2v在完成训练时会丢弃输出矩阵。
周星驰

根据我的理解,您对第二个问题的回答是重构输出矩阵,对吗?
周星驰

1
我认为值得注意的是,这并不像序列分类器那样工作。单词的顺序被忽略。
displayname

syn1只需保存模型即可获得输出矩阵。是的,排序被忽略了,因为对于该应用程序,实际上可以使用基于LSTM的seq2seq模型。
yazhi

4

Word2Vec的最新版本已添加了单词预测缺失功能。当然,您的句子需要匹配用于训练模型的Word2Vec模型输入语法(小写字母,停用词等)

用于预测“当我打开?门”的前3个单词的用法:

print(model.predict_output_word(['When','I','open','door']), topn = 3)

它怎么知道center在第三个和第四个词之间?这对我来说没有意义。我以为只能输入偶数个上下文词,它会选择介于floor(len(n)/2))和之间的词floor(len(n)/2))+1
bmc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.