[转载]究竟什么是Word2vec ? Skip-Gram模型和Continuous Bag of Words(CBOW)模型 ?

原文:http://nooverfit.com/wp/%E7%A9%B6%E7%AB%9F%E4%BB%80%E4%B9%88%E6%98%AFword2vec-skip-gram%E6%A8%A1%E5%9E%8B%E5%92%8Ccontinuous-bag-wordscbow%E6%A8%A1%E5%9E%8B/

  • 连续Bag-of-Words (CBOW)
    • 从上下文来预测一个文字
  •  Skip-Gram
    • 从一个文字来预测上下文

其实, 用一个向量唯一标识一个word已经提出有一段时间了. Tomáš Mikolov 的word2vec算法的一个不同之处在于, 他把一个word映射到高维(50到300维), 并且在这个维度上有了很多有意思的语言学特性, 比如单词”Rome”的表达vec(‘Rome’), 可以是vec(‘Paris’) – vec(‘France’) + vec(‘Italy’)的计算结果.

接下来, 上word2vec示意图:

screen-shot-2015-04-10-at-4-16-00-pm

很显然, word2vec是只有一个隐层的全连接神经网络, 用来预测给定单词的关联度大的单词.

WI 的大小是VxN, V是单词字典的大小, 每次输入是一个单词, N是你设定的隐层大小.

举个例子, 如果我们的语料仅仅有这3句话: “the dog saw a cat”, “the dog chased the cat”, “the cat climbed a tree”. 那么单词字典只有8个单词: “the”, “dog”, “saw”, “a”, “cat”, “chased”, “climbed”, “tree”.

那么V=8, 输入层的初始就可以是:

[0, 0, 0, 0, 0, 0, 0, 0] 代表: [“the”, “dog”, “saw”, “a”, “cat”, “chased”, “climbed”, “tree”]

输入[“”, “dog“, “”,  “”,  “”,  “”,  “”,  “”] 可以表示为: [0, 1, 0, 0, 0, 0, 0, 0]

输入[“”, “”,  “saw“,  “” ,  “”,  “”,  “”,  “”] 可以表示为: [0, 0, 1, 0, 0, 0, 0,0]

如果是在字典中有的, 就用1表示

W0 的大小是NxV, 于是, 通过训练完毕的WI 和W0 , 只要输入单词, 就能预测出最符合这个上下文的下一个单词. 当然这个单词一定是字典中有的, 就是说在大小V中的字典中, 选出概率最大的那个单词。

那么, 连续Bag-of-Words (COBW)又是怎么从上下文来预测一个文字呢 ?  其实它就是通过拷贝上面word2vec的输入层做到的:

screen-shot-2015-04-12-at-10-58-21-pm

这样, 拷贝次数C就是这个短语的长度, 即单词个数.  

输入层和隐含层之间就多了好多个W矩阵, 每个矩阵就代表了这个单词对隐层的影响和贡献.

最后的NxV矩阵依然能预测出最可能的下一个单词.

 Skip-Gram就是把上图颠倒过来, 如果你要预测的输出上下文的单词个数是C, 那么, 就像CBOW一样, 拷贝C次输入矩阵就OK啦.

 

参考文献:

https://iksinc.wordpress.com/tag/skip-gram-model/

http://stats.stackexchange.com/questions/194011/how-does-word2vecs-skip-gram-model-generate-the-output-vectors

posted @ 2018-07-24 04:30  LifeExp  阅读(840)  评论(0)    收藏  举报