由NPLM到Word2vec

    xiaoxiao2021-03-25  123

    1、 log-linear模型

    之所以讲log-linearmodel,是因为后面要介绍的NNLM,CBOW与skip-gram都用log-likelihood作为目标函数,log likelihood也被称为cross entropy。

    其中

    当log-linear模型用在语言模型,其中 :

    为什么叫log linear 模型呢?我们对两边取log看一下:

    说一点别的,log-liner的方法还可以用到其他问题上,比如tagging problem,就设置成:

     

    2、NNLM,或NPLM(Bengio2002年)

    Bengio 的《A Neural ProbabilisticLanguage Model》

    将语料C中的任意一个词w,将context(w)取为前面的n-1个词(类似于n-gram),这样二元对(context(w),w)就是一个训练样本了。

    输入层到隐藏层做的事

    现将n-1的词向量每个进行首位拼接,得到的结果成为xw然后进行以下计算:

    隐藏层到输出层做的事:

    由于隐藏层最后得到的只是一个长度为N(语料C构成的词典的词汇量大小)的向量,不能用概率来对词进行预测,所以需要一个softmax:

    其中,yw,iw为词w在词典D中的索引对应于yw中的分量,而算出来的结果,即新的yw的分量yw,i表示上下文为context(w)时下一个词为词典D中第i个词的概率。

    待确定的参数:

    这些参数都是从训练过程得到。特殊地,在这个网络中,输入(词向量)也是由训练得到。

    各层规模:

    投影层(n-1)m,隐藏层nh,输出层N,其中涉及参数为:

    模型复杂度为:(n-1)*m+(n-1)m*nh+nh*D

           易知,计算量集中于隐藏层和输出层之间,甚至以上的过程是已经去除了原来的论文中输入层到输出层之间的连接。Word2vec就是针对这个优化。

           训练目标函数:

           训练方法:

           因为是梯度上升,而不是梯度下降,所以θ更新时候是加的。

    PS:此模型目标是生成语言模型,词向量是副产品。一般来说,语言模型和词向量会一起产生。

    PPS:模型过程可见piotrmirowski_2014_wordembeddings.pdf的P19~22

    3、HierarchicalNeural Language 模型(Bengio2005年)

           针对2002年的那个模型瓶颈在输出层的语料词汇量大小的问题,Bengio用一棵树来将一个多分类问题转化为多个二分类问题,也就是不要直接判断是哪个字,而是判断那个字是哪个类,这样一层层下去,最后预测出那个字。原本要计算V次的训练,缩减为log2V次,V为词典的词汇量。

           这个二叉树用来预测词的概率的公式如下:

    其中为长度小于 m的二元编码,即是在二叉树中不是叶子也不是根的节点。举个例子:

    例如,假设词库里总共有8个字,则 m=3,若词y的二元值b1=1,b2=0,b3=0,则它在二叉树的训练过程如图所示:

    其中第一幅图是我们想让它达到的目标。第二幅图是开始第一个中间节点的训练,要根据它的输出是1来调整NPLM的参数,其概率的计算公式如下,后面几幅图的过程以此类推:

           还有一个问题就是要从语料(词典)中获取词的阶层分类,要建立这个分类阶层,有很多种方式,例如,使用WordNet所建立的上下位关系,来建立阶层,或者可以用HierarchicalClustering ,像是BrownClustering之类的,自动从训练资料中建立分类阶层。

    这个模型的缺点有两个:

    1) 树的构建需要专家知识

    2) 这个模型相比原先的非分层模型性能差

    4、 Log-Bilinear模型

    (1)    Hinton2007年的work(linear)

    《Three NewGraphical Models for Statistical Language Modeling》

    上面的图这是Bengio的NNLM的,也就是第一部分讲的

    其中指的是zt-n+1到zt-1合起来的向量。

    上面的图这是Log‑BilinearLanguage Model和NNLM不一样的过程,有两个:

    1) Bengio隐藏层是非线性的,Hinton的是线性的(09版就改成和Bengio一样),即为下式:

    其中,是第n个词的预测特征向量,是第i个位置的权重矩阵。是第i个词的实际特征向量(也就是图中word embedding space的各个z)。

    输出层softmax连带着变,变为

    两个b为偏置项。

    2)Bengio是输出层是直接预测出词,Hinton是预测出词向量。

     

    (2)    Hinton2009年的work(HLBL)

    《A scalable hierarchical distributedlanguage model》

           此模型借鉴了上面Bengio层次化的思想,模型特点是:

    1) 叶子结点为词(word)的二叉树,对于非叶子结点虽然也有对应的向量,但并不对应到具体的词。其用来区分词的二元编码中的1、0走向

    2) 每个结点上都要进行决策。

    N 元层次化 Log-bilinear 模型中由上下文预测下一个词为 w 的公式为:

    其中为在第i个节点选择某一边的概率,若为规定选择左边为1,则选择左边的概率为:

    (偏置项b合进去了)

    其中,为非叶子节点的实数向量,是上下文中的词向量加权,来源于LBL,操作一样:

    其中,是第n个词的预测特征向量,是第i个位置的权重矩阵。是第i个词的实际特征向量。

    这里可以允许存在多种层次结构,即每个词对应多种编码,可以将词的所有编码方式求和,即:

    其中,D(w)为词w的编码集合,这词采用多种编码方式能够更好刻画词的不同形式和语义”。

    该模型参数求解可以直接套用LogBi-Linear和Hierarchical NNLM的方式,其中不同之处,Hinton提出了一种新的简单的构建层次结构的方法:通过递归的使用二维的高斯混合模型(GMM,Gaussian Mixture Model)进行聚类,直到每个cluster中仅包含两个词,这样所有的结果就构成一个二叉树。值得注意的是,此方法只是加速了训练过程,因为我们可以提前知道将要预测的词语(以及其搜索路径)。在测试过程中,被预测词语是未知的,仍然无法避免计算所有词语的概率值。但可喜的是,此法在加速的同时,相对于用softmax的方法,最后性能并没有下降,比Bengio的好。

     

    (3)    Hinton2009年的work(Nonlinear)

    《Improving a statistical language modelthrough non-linear prediction》

    上面的图这是NonlinearLog‑Bilinear Language Model,可以和2007年的比较,将2007图中的红色部分的线性部分,换成了Bengio的非线性部分。

     

     

    5、 word2vec

    word2vec是word embedding中最为人知的模型,由Tim Mikolov的三篇论文引出(虽然有一篇是讲Recurrent NN),训练速度快(单机跑缺省数据集,仅20+min)。word2vec代码中包含了两个模型CBOW(Continue BOW)和Skip-Gram。其训练目标与前面不同,是得到一组较好的词嵌入而不是得到一个好的语言模型。

    (1)    CBOW

    给定上下文(wt前面n个词,后面n个词),预测词wt

    在标准的语言模型中,当前词wt依赖于其前面的词w1:(t−1)。而在CBOW和Skip-Gram模型中,当前词wt 依赖于其前后的词。在连续词袋模型中,就直接把隐藏层去掉, 大大减少了计算量, 提高了计算速度, 然后用更多的数据来训练模型, 最后的效果不错.

    在上面的图中,尽管显示输入的词,但是其实输入的是词向量,那这个词向量是哪里来的呢?

    其实一开始输进去的是one-hot词向量,但是这些上下文的词向量会乘以一个权重矩阵,如下图:

    相当于在矩阵中选出某些行,然后将这C个转换后上下文词向量相加,再除以C进行归一化。则得到隐藏层的向量。

    所得词向量:

    上面只是一个为了说明word2vec能得到的词向量的一个简图,上图是一个CBOW的过程,假设我们设定词向量维度是3,词典中有4个词,预测出来的词为y1,则我们预测出来的词的向量即是w11,w12,w13

    目标函数:

    其中,ct为wt的上下文。T为这段文本的总词数。

    输出层处理方法:

    1) 层次化softmax

    此方法Bengio和Hinton都用过,前面介绍了。

    霍夫曼树

    树的构建mikolov用到了霍夫曼树,即词频越高的词语编码长度越短。比如,“the”是英语中最常见的词语,那“the”在霍夫曼树中的编码长度最短,词频第二高的词语编码长度仅次于“the”,以此类推。整篇文档的平均编码长度因此降低。霍夫曼编码通常也被称作熵编码,因为每个词语的编码长度与它的熵几乎成正比。香农通过实验得出英语字母的信息量通常在0.6~1.3之间。假设单词的平均长度是4.5个字母,那么所携带的信息量就是2.7~5.85比特。

    再回到语言模型:衡量语言模型好坏的指标perplexity是2H,H表示熵。熵为9.16的unigram模型(Bengio)的perplexity达到29.16=572.0。我们可以直观的理解为,平均情况下用该unigram模型预测下一个词语时,有572个词语是等可能的候选词语。目前,Jozefowicz在2016年的论文中提到最好的模型perplexity=24.2。因为24.6=24.2,所以这个模型平均只需要4.6比特来表示一个词语,已经非常接近香农记录的实验下限值了。这个模型是否能用于改进网络的hierarchical softmax层,仍需要人们进一步探索。

    目标函数:

    跟上面的一样,都是:

    其中,p(wt|ct)为

    其中,Xw为projection layer中输入上下文词向量之和,为非叶子节点对应的向量,表示路径中第j个借点对应的编码,结合上面的图理解。所以,每一次决策都是一个二分类问题,所以和逻辑回归处理的一样进行最大似然估计:

    到这里,应该知道损失函数是逻辑回归的形式了,其最后是:

    训练:

    这里对它是用随机梯度上升,下面给出损失函数对几个参数的梯度计算。

    (i) 对

    其中;

    更新公式

    其中,η为学习率

    (ii) 对Xw(与(i)中变量是对称的,所以(i)的结果换一下就可以)

    更新公式

    也就是将贡献到Context(w)中每个词的词向量去。不过这里也有提出应该用平均贡献才合理,也就是

    伪代码:为词编码长度,如足球的1001为4

    注意,循环体内第3步和第4步不能交换,要等到贡献完再更新e

    2) 负采样(NEG)

    它是noise contrastive estimation(NCE)的一个简化版本,目的是用来提高训练速度并改善所得词向量的质量。由于NEG的目标是学习高质量的词向量表示,而不是降低测试集的perplexity指标,于是NEG对NCE做了简化。具体在采样里详细讲。

    (2)Skip-Gram模型

    给定一个词wt,预测词汇表中每个词出现在wt上下文中的概率。

    目标函数:

    输出层处理方法:

    1)层次化softmax

    其中,

    目标函数:

    下面梯度更新与CBOW完全类似,略。

    伪代码:

     

    但实际源码(上面右图)中,每处理完Context(w)中一个词,v(w)更新一次(这也更合理)。同CBOW,循环体内第3步和第4步不能交换,要等到贡献完再更新e。

    3) 负采样(NEG)

    同样也等到采样那里再说。

     

     另外mikolov还运用了subsample的方法,来对付训练集中出现出现极为频繁的词语,主要运用论文中的这个公式:

    但实际上,代码中一般用这个:

    其中,t一般设为10的-5次方。

    Reference:

    [1]  Deep Learning  Ian Goodfellow, Yoshua Bengio, Aaron Courville

    [2]SebastianRuder. On word embeddings - Part 2: Approximating the Softmax. http://sebastianruder.com/word-embeddings-softmax,2016.

    [3]  随机模拟-Monte Carlo积分及采样(详述直接采样、接受-拒绝采样、重要性采样)

    http://www.jianshu.com/p/3d30070932a8

    [4] 《神经网络与深度学习》的第12章 邱锡鹏

    [5]  http://www.panxiaotong.com/?p=548www.flickering.cn/nlp/2015/03/我们是这样理解语言的-3神经网络语言模型

    [6]  word2vec_中的数学原理详解

    [7]  Deep Learning实战之word2vec有道

    [8]  http://www.panxiaotong.com/?p=548

    [9]  http://www.cs.utoronto.ca/~hinton/csc2535/notes/hlbl.pdf

    [10] https://piotrmirowski.files.wordpress.com/2014/06/piotrmirowski_2014_wordembeddings.pdf

    [11] Deep Learning in NLP (一)词向量和语言模型http://licstar.net/archives/328

    [12]  The amazing power of word vectors  https://blog.acolyer.org/2016/04/21/the-amazing-power-of-word-vectors/

    转载请注明原文地址: https://ju.6miu.com/read-6362.html

    最新回复(0)