avatar

Word2Vec:基于上下文的分布式表达

Word2Vec:基于上下文的分布式表达

Word2Vec是语言模型中的一种,它是从大量文本预料中以无监督方式学习语义知识的模型,被广泛地应用于自然语言处理中。

Word2Vec是用来生成词向量的工具,而词向量与语言模型有着密切的关系。

基本思想

首先用一个神经网络,将词映射一个向量(即分布式嵌入向量);然后将这个向量通过另一个神经网络(预测网络)生成一个词分布,使得这个生成的词分布与其对应的上下文分布尽可能的一致。由于分布式嵌入向量通过预测网络可以近似表达词的上下文分布,因此,我们认为分布式嵌入向量包含课词的上下文信息,进而也就可以作为词语义的一种合理的表达。

目前Word2Vec有两种最常见的算法,分别是CBOM(Continuous Bag-of-Words)算法和Skip-Gram算法。这两个算法互为镜像,理解了其中一个算法,以外一个算法也就非常容易理解。

CBOM与Skip-Gram的区别

Skip-Gram:将当前词作为输入,其对应的上下文最为输出,训练神经网络。训练的目标是网络的输出(即预测的上下文)与其实际的上下文越接近越好。

CBOM:在训练时,对于每一个词,他以该词的上下文最为输入,而将该词最为输出,即用词的上下文来预测该词。

CBOM模型

A simple CBOM

  • input_layer输入的X是单词的one-hot representation(考虑一个词表VV,里面的每一个词wiw_{i}都有一个编号i1,2,3...Vi\in1,2,3...|V|,那么词wiw_{i}的one-hot表示就是一个维度为V|V|的向量,其中第ii个元素值非0,其余元素全为0,例如w2=[0,1,0,0,...,0]Tw_{2} = [0,1,0,0,...,0]^{T}
  • 输入层到隐藏层之间有一个权重矩阵WW',隐藏层得到的值是由输入XX乘上权重矩阵得到的(细心的人会发现,010-1向量乘上一个矩阵,就相当于选择了权重矩阵的某一行,如图:输入的向量XX[0,0,1,0,0,0][0,0,1,0,0,0],WW的转置乘上XX就相当于从矩阵中选择第3行[2,1,3]作为隐藏层的值);
  • 隐藏层到输出层也有一个权重矩阵WW',因此,输出层向量的每一个值,其实就是隐藏层的向量WW'点乘权重向量的每一列,比如输出层的第一个数7,就是向量[2,1,3]和列向量[1,2,1]点乘之后的结果;
  • 最终的输出需要经过softmax函数,将输出向量中的每一个元素归一化到0-1之间的概率,概率最大的,就是预测的词。

目标函数定义如下:

L=maxlogp(wContext(w))L = max \,log\,p(w|Context(w))

=maxlog(yj)= max \, log \,(y_{j}^{*})

=maxlog(exp(uj)(exp(uk)))= max \, log(\frac{exp(u_{j}^{*})}{\sum(exp(u_{k}))})

输出层通过softmax归一化,uu代表的是输出层的原始结果。通过下面公式,我们的目标函数可以转化为现在这个形式:

maxlog(exp(uj)(exp(uk)))=maxujlogk=1Vexp(uk)max \, log(\frac{exp(u_{j}^{*})}{\sum(exp(u_{k}))}) = max\,u_{j}^{*} - log\,\sum_{k=1}^Vexp(u_{k})

拓展到CBOM

Skip-gram模型

如上图所示,Skip-gram model是通过输入一个词去预测多个词的概率。输入层到隐藏层的原理和simple CBOW一样,不同的是隐藏层到输出层,损失函数变成了C个词损失函数的总和,权重矩阵WW'还是共享的。

参考资料:

【1】《深度学习模型及应用详解》

【2】https://www.cnblogs.com/leebxo/p/12929684.html

Author: Hui Ning
Link: https://angelni.github.io/Word2Vec/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Donate
  • 微信
    微信
  • 支付宝
    支付宝

Comment