nlp自然语言处理之word2vec--cbow和skip gram讲解
1、模型结构——CBOW
- 输入层:上下文单词的onehot。单词向量空间dim为V,上下文单词个数为C
- 所有onehot分别乘以共享的输入权重矩阵W。V*N矩阵,N为自己设定的数,初始化权重矩阵W
- 所得的向量相加求平均作为隐层向量,size为1*N.
- 乘以输出权重矩阵W'
- 得到向量1*V**函数处理得到V-dim概率分布,对应V个单词
- 概率最大的index所指示的单词为预测出的中间词与true label的onehot做比较,根据误差更新权重矩阵。
最后定义loss function(交叉熵),采用梯度下降更新W和W'。训练完毕后,输入层的每个单词与矩阵W相乘得到的向量的就是我们想要的word embedding,W是所有单词的word embedding,也叫做look up table
2、模型结构——Skip-Gram
- 假设有一个句子“The dog barked at the mailman”
- input word:“dog”
- skip_window:从input word的一侧选取词的数量。如果skip_window=2,那么窗口中的词就是['The', 'dog', 'barked', 'at']。
- num_skips:从整个窗口中选取多少个词作为output word。当skip_window=2,num_skips=2时,我们将会得到两组
- (input word, output word) 形式的训练数据,即 ('dog', 'barked'),('dog', 'the')。
神经网络基于这些训练数据将会输出一个概率分布,这个概率代表词典中的每个词是output word的可能性。假如我们先拿一组数据 ('dog', 'barked') 来训练神经网络,那么模型通过学习这个训练样本,会得到词汇表中每个单词是“barked”的概率大小。模型的输出概率代表着到我们词典中每个词有多大可能性跟input word同时出现。下图中,蓝色代表input word,方框内代表位于窗口内的单词。Training Samples(输入, 输出)
哈夫曼树:带权最小二叉树
层次softmax:把词频作为权重,构造哈夫曼树,依次判断,复杂度O(N)到O(logN)
negative sampling:只更新少量负面类,从而减轻了计算量。
hierarchical softmax:将词库表示成前缀树,从树根到叶子的路径可以表示为一系列二分类器,一次多分类计算的复杂度从|V|降低到了树的高度
求解目标