目录
原因:
- 看了几篇提及CBOW(Continuous Bag-of-Word)的综述,都没直接看懂。综述中都指向这篇文章的这张图。
word2vec是一个预训练(pretrained)模型,在大量语料上训练词向量(或者称为词嵌入,word embedding)。尽管训练语料与应用场景不尽相同,但实验表明,对下游(downstream)应用效果良好。
CBOW的目的是通过上下文(context)预测目标词(target word)。举例来说,“I like this cute [target word] very much”,其中[target word]就是要预测的目标词,而上下文指的是与目标词距离为k的窗口内的词,如果窗口大小m=2,则上下文为“this cute”和“very much”。N-gram只考虑目标词前面的词。
我的理解:CBOW的训练模型,以m=1为例,训练数据train_data为多段文本的集合,其中每段文本,以text表示,可以得到len(text)-2个训练样本。例如,text=‘I love Tom Hank’,则训练样本两个,分别为‘I love Tom’和‘love Tom Hank’,目标词分别为‘love’和‘Tom’。输入张量shape=(None,sequence_length),其中第一维为None,代表输入个数,第二维为sequence_length,大小为2m+1。然后,送入嵌入Embedding层。然后,Dense层,最后,softmax层,得到vocabulary中每个词的概率。
实际上,采用bigram模型,即只考虑上下文中的一个词(没说是左侧还是右侧),也没有Embedding层,输入是这个词one-hot编码,也就是说,编码长度是vocabulary的大小V。输入是V维列向量。对于vocabulary中的第k个word x k \textbf{x}_k xk,只有第k维=1,其余为0。
模型三层,输入层,隐藏层(全连接+softmax),输出层。
- 输入层——隐藏层之间的权重矩阵 W \textbf{W} W是 V × N V\times N V×N维,隐藏层——输出层之间的权重矩阵 W ′ \textbf{W}' W′是 N × V N\times V N×V维矩阵。
隐藏层的输入(或者说输入层的输出)是 W T x \textbf{W}^\textrm{T}\textbf{x} WTx,即N维列向量 h \textbf{h} h。将 W \textbf{W} W写作列向量的形式,即 W = ( w 1 , … , w V ) T \textbf{W}=(\textbf{w}_1,\ldots , \textbf{w}_V)^\textrm{T} W=(w1,