本文章基于论文《Efficient estimation of word representations in vector space》(2013,Tomas Mikolov等)、《word2vec Parameter Learning Explained 》(2016,Xin Rong)和《word2vec Explained: Deriving Mikolov et al.’s Negative-Sampling Word-Embedding Method 》(2014,Yoav Goldberg and Omer Levy)等进行讲解,内容包括CBOW和Skip-gram算法,以及分层softmax和负采样优化算法。
一、为什么要提出CBOW和Skip-gram算法
1.1 稀疏表示问题
在自然语言处理中,需要将文本中的单词转化为计算机能够处理的数值向量形式,即词向量。传统的词表示方法,如独热编码,存在维度灾难、无法捕捉语义信息等问题。
1.2 提升计算效率
早期的神经网络语言模型,如前馈神经网络语言模型(NNLM),存在计算瓶颈。
NNLM用于预测一句话下一个词语出现的概率:例如,输入10个词语,预测第11个词。模型架构如下:

模型包含四层:输入层—>投影层—>隐藏层—>输出层。
(1)输入层:假设输入N个词,每个词的独热编码是V维(V为词汇量)。输入层无显示计算。
(2)投影层:将N个词的的独热编码(V维)映射为D维度的稠密向量(NxD维)。计算复杂度为NxD。
(3)隐藏层:将投影层输出(NxD维)通过全链接层映射到H维隐藏层。计算复杂度为NxDxH。
(4)输出层:隐藏层输出(H维)通过全连接层映射到V维概率分布(Softmax)。计算复杂度为HxV。
因此,NNLM总的计算复杂度为N×D+(N×D)×H+H×V。NNLM的主要瓶颈在于投影层到隐藏层的计算((N×D)×H)及隐藏层到输出层的计算(H×V)。
1.3 有效利用上下文信息
自然语言中,单词的含义往往与其周围的上下文紧密相关。CBOW 算法根据上下文单词来预测目标单词,Skip - gram 算法则根据目标单词来预测上下文单词,它们都能够有效地利用文本中的上下文信息来学习单词的表示,从而更好地理解单词在不同语境中的语义。
二、CBOW算法
CBOW的网络架构与NNLM比较类似,但CBOW去掉了隐藏层,并且所有上下文词共享同一投影矩阵(词嵌入矩阵),而非每个词独立映射。为了便于理解,我们从上下文单词数为1个的简单场景开始学习。
2.1 One-word context

上图为上下文单词数为1的CBOW网络结构图。假设词库大小为V(共有V个单词),因此输入层one-hot向量的维度为V;隐藏层神经元个数为N;输入层到隐藏层,隐藏层到输出层均为全链接,且无激活函数。输入层到隐藏层之间的权重矩阵为。
的每一行都是一个N维的向量,用
表示。
1、从输入层到隐藏层:
给定一个上下文(一个单词),假设这个单词的one-hot向量中第k个元素,其他
的元素
。因此,我们有:
(1)
其中:h为隐藏层向量 x为输入层向量
表示输入单词
的词嵌入向量。
2、从隐藏层到输出层:
从隐藏层到输出层的权重矩阵用表示,
。从隐藏层到输出层的计算公式为
。假设
为
的第j列,
(2)
表示得到词库中第j个单词(
)的得分(输出层第j个神经元的输入)。然后经过softmax后将得分进行归一化:
。 (3)
表示输出层的第j个神经元的输出。这也是给定上下文单词
的情况下,得到单词
的概率,即
将公式(1)和公式(2)带入公式(3)后,得到公式:
(4)
可以看出和
均为单词
的词嵌入向量,
来自于
,
来自于
,我们将
叫做输入向量,
叫做输出向量。
3、隐藏层到输出层的权重更新
根据公式(4),对于给定的上下文,实际输出的词为
,因此我们要使条件概率
值最大,即
(6)
因为,所以
(7)
就是我们的损失函数,需要进行最小化。
根据E的公式,先对求偏导:
当时,
;当
时,

最低0.47元/天 解锁文章
2129

被折叠的 条评论
为什么被折叠?



