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

上一期的Pycon 2016 tensorflow 研讨会总结 — tensorflow 手把手入门 #第二讲 中, 谈到过word2vec, 但是究竟什么是Word2vec ? 以及skip-Gram模型和CBOW模型究竟是什么? 也许还有小伙伴不是很明白, 这一次我们来好好讲一下这两种word2vec:

  • 连续Bag-of-Words (COBW)
    • 从上下文来预测一个文字
  •  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

发布者

David 9

邮箱:yanchao727@gmail.com 微信: david9ml

发表回复

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