Word2vec 入门(skip-gram部分)

Skip-gram

给定句子中一个特定的词(input word),随机选它附近的一个词。网络的目标是预测 我们选到这个附近词的概率。

输入,输出

取窗口大小为2(前后两个词):得到一些词对:
image_1bnistvll1f771ivtjos1nh6d459.png-71.8kB

如之中的(quick, brown)
训练神经网络时:
image_1bnit17pvb711tn81mjlpl1mq7m.png-90.7kB
输入quick的one-hot编码, 输出层softmax分层的brown的概率应该是最大的


隐层:

我们训练一个简单的网络来执行一个任务,但是我们实际上并没有用这个网络来预测test中的任务。而是,利用这个任务(目标)去学习网络中的权重W。我们将看到这些学出来的权重W就是我们所要的词向量(wordvectors)。

假设corpus里有10000个词语, 目标词向量为 300维:
简单做一个图来表示过程:
依然用(quick, brown)训练神经网络
image_1bnivd1134qnd0a7cu1v1k1p7a1g.png-63kB


如果两个不同的词有相同的上下文,那么我们的模型会需要预测类似的输出。那么网络为了输出类似的预测,他就会使这两个不同词的word vector尽可能相似。所以,如果两个词有相同的上下文,我们就可以得到比较接近的word vector。

那么什么词有相同的上下文? 比如一些近义词 smart 和intelligent 再比如 一些相关的词 engine 和 transmission。


训练过程:

所以word2vec采用了降采样(subsampling)的策略。对于每个我们在训练样本中遇到的词,我们有一个概率去删除它。这个概率与单词出现的频率相关。

(这里word2vec)就直接做了一个类似 去掉一些大众词汇,类似tf_idf的工作


训练神经网络 意味着输入一个训练样本调整weight,让它预测这个训练样本更准。换句话说,每个训练样本将会影响网络中所有的weight。像我们之前讨论的一样,我们词典的大小意味着我们有好多weight,所有都要轻微的调整。

Negative sampling 解决了这个问题,每次我们就修改了其中一小部分weight,而不是全部。
(这里其实我还有一点疑问,因为没有细读paper, 既然输入的是one-hot向量,相当于look-up的话,和别的权重(隐层神经元)有什么关系呢?有必要Negative sampling吗?)

Ref:
http://mccormickml.com/2016/04/19/word2vec-tutorial-the-skip-gram-model/
http://mccormickml.com/2017/01/11/word2vec-tutorial-part-2-negative-sampling/
http://blog.csdn.net/Layumi1993/article/details/72866235
http://blog.csdn.net/Layumi1993/article/details/72868399

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章