赞
踩
语言模型
直观概念:语言模型是计算一个句子是句子的概率的模型。
例子:深度之眼的论文课真的很好! 0.8
论文课的深度之眼很真好的! 0.000001
语言模型的应用有很多,这里举一个用在输入法里面的例子,在输入法里面输入拼音:zi ran yu yan chu li ,它返回对应的中文就是一个语言模型:
基于专家语法规则的语言模型
语言学家企图总结出一套通用的语法规则,比如形容词后面跟名词。但是很难总结出一套通用的语法规则。
统计语言模型
通过概率计算来刻画语言模型
某一个词出现的概率是怎么计算的?
求解方法:用预料的频率代替概率(频率学派)
统计语言模型是通过一个很大的语料来构建的,这个语料被称为背景语料,通过上图中的公式可以计算出每个词出现的频率,用频率来代替概率。
条件概率怎么计算?
求解方法:频率学派+条件概率
统计语言模型中的平滑操作
有一些词或者词组在语料库中没有出现过,但是这不能代表它不可能存在。
平滑操作就是给那些没有出现过的词或者词组也给一个比较小的概率。
_Laplace Smoothing_也称为加1平滑:每个词在原来出现次数的基础上加1.
P(w)= c(w) / N ===> P(w) = c(w)+1 / N+V
主要解决了词的问题,但是词组的问题还没得到很好的解决。
平滑操作的问题,可能会导致一个有语法错误的句子和一个正确句子的概率是相同的。
还会引发参数空间过大以及数据稀疏严重。
马尔科夫假设
下一个词的出现仅依赖于前面的一个词或几个词。
例子
语言模型评价指标:困惑度(Perplexity)
语言模型实质上是一个多分类问题,比如P(w1)的计算,输入是空白的,标签就是w。
词的表示方式
1.衡量词向量之间的相似程度:余弦相似度和词类比。
2.作为预训练模型提升nlp任务
外部任务比如命名体识别、文本分类;应用到其他nlp任务上,相当于半监督训练。
《Efficient Estimation of Word Representations in Vector Space》
基于向量空间中词表示的有效估计
在nlp任务中,首先都会构建word2id以及id2word,它们都是字典类型。
_input layer_层,首先输入的是index,将每个index映射成一个向量,将这些向量进行拼接,如输入的是n-1个词,每个词都是100维,因此拼接完成后变成100×(n-1)维;
_hidden layer_层,将上一步得到的向量输入到全连接层中,使用tanh激活函数;
_output layer_层,上一步得到的结果再接一个全连接层,然后使用softmax。
n-grams是通过前n-1个单词,来预测第n个位置单词的概率。因此将前n-1个单词输入到上述模型中去,模型经过最后softmax得到的结果来预测第n个位置单词的概率,然后通过不断地优化,使得模型能够正确预测到第n个位置上的单词。这样可以得到句子中每个词的概率,每个词的概率相乘就可以得到句子的概率。语言模型是无监督的。
如何求困惑度?
需要将每个句子中每个词的概率给预测出来,然后将他们相乘吗?这样做也是可以的,但在实际中有更加方便巧妙的方法。
先写出Loss,使得预测出得到的每个正确单词得到的概率越大越好,使用了交叉熵损失函数,这个Loss是一句话的Loss:
其中,T表示句子中词的个数。
困惑度是句子的概率开负T分之一:
这样在得出loss的情况下,可以很方便的求出困惑度是多少,看看困惑度的情况。现在都是批次进行训练和预测的,每计算batchsize大小的个数进行一次loss的计算。
s(t-1)是上一个时间步的输出,w(t)是当前词向量(也是通过one-hot方式转换的)的输入。
每个时间步预测一个词,在预测第n个词的时候,使用到了前n-1个词的信息,它就没有使用马尔科夫假设了。
定义:将语言模型的建立看成一个多分类问题,相当于线性分类器加上softmax。
γ = softmax ( wx + b )
只有softmax中求指数是非线性的,变成log就是线性的???
如何求上图中的概率?其实语言模型中概率问题都是一个多分类问题,输入就是Wi,而标签就是Wi-1,相当于一个词表大小的多分类问题,怎么求概率以及学习词向量?
input:Wi label:Wi-1
输入是index,代表这个词在词表中的位置;1×V是这个词的one-hot编码,V×D是词向量矩阵,这个词向量矩阵W被叫做中心词的词向量矩阵;得到1×D的词向量与周围词的词向量矩阵W’ 进行相乘,得到1×V的向量,这个向量在经过softmax之后,得到每个词的概率,然后使得正确词的位置上的概率越大越好。
其中W和W*就是想训练得到的词向量,一般用W就可以或者用(W+W’ )/2
1×D的词向量代表的是中心词Wi的词向量,W’ 是周围词的词向量矩阵,它们相乘后再做softmax,把Wi-1这个位置的单词取出来。
分母是Vwi与所有的周围词做内积的和,而分子是Vwi与Wi-1这个位置上的词做内积。
求以下公式的最大值:
对于中心词来说只有一个训练的样本,而之前的skip-gram对于中心词,根据窗口大小假设等于2,他会根据窗口大小产生4个训练的样本。
U是周围词的矩阵,V是中心词的矩阵,第三个矩阵相乘相当于是一个没有激活函数也没有偏置的全连接层,全连接层额神经元个数是词表大小,因为softmax层要输出V个概率,V是特别大的,因此这个全连接层也是特别大的,那么如何降低复杂度呢?能不能将softmax的复杂度降低呢?论文中也提到了两种方法,下面依次介绍。
softmax会一下子求出词典大小数的概率,那么,能不能转换成求几个sigmoid呢?层次softmax的基本思想就是将softmax的计算转换成求sigmoid的计算。怎么转换呢?
将其写成二叉树的结构,在每个节点上作一个二分类,比如结果小于0.5就往左走,大于0.5就往右走。因为softmax总共要做V次指数操作,一次sigmoid做一次指数运算,因此只需要转成少于V次的sigmoid的指数运算即可,怎么实现做最少的sigmoid呢?
这里写一个有8个节点的满二叉树,词表大小是8,那么做softmax就需要做8次指数操作,而sigmoid只需要做树的深度减一次即可,即只需要做log2 V次就可以。 那么如果是其他的二叉树呢,效果会不会更好?看看Huffman树的效果。
上图中叶子结点上数字对应于词上,代表词出现的频率,比如第一个词出现的频率是5等,因此计算这个词的sigmoid的次数就是5×2次,依次类推,可以得到上图中左边的式子和右边的式子。
Huffman树的思想是将出现频率高的词放到上面,例如上图中将出现频率为13的词放到第二层,那么计算这个词的概率只需要计算一次sigmoid就可以了。
如果将词构建成Huffman树的形式,那么求解softmax就可转换成最少于log2 V次的sigmoid的求解。具体计算概率如下:
首先每一个分支节点都是一个向量,对于比如说在skip-gram里面,有一个中心词向量Vc ,它与塞塔进行相乘,结果大于0.5往左走,小于0.5往右走等。
下面解释一下下图中的公式,n(w,j+1)表示词w在树上的第j+1个节点;n(w,j+1)==ch(n(w,j))判断词w在树j+1个节点是否是j个节点的右孩子,通过这个式子来判断是右孩子还是左孩子,
这里再在CBOW中说一下层次softmax,CBOW与skip-gram的唯一区别是u0 是窗口内上下文词向量的平均值,塞塔是没有变的。
这里有一个问题,之前我们在讲原始的skip-gram和cbow的时候,我们说最终的词向量可以是中心词向量和周围词向量的平均,但是在层次softmax上我们就只有一组词向量了,因为塞塔的个数是少于V个的,而且也不知道塞塔具体值得是什么,因此这个塞塔是没办法用的。
负采样在效果上比层次softmax上好点,之前softmax之所以慢,就是进行了多分类,而且是一个V类别的多分类,所以能不能舍弃多分类来提升速度呢?就是把多分类变成一个二分类,二分类中要有正负样本。正样本是一个中心词和一个周围词在一块,负样本就有一个巧妙的思想,先拿skip-gram举例,先把中心词拿出来,比如将over拿出来,然后再在所有的词表里面随便选一个词,比如again,将over和again组合到一块作为负样本。随便选一个词当然可能会选到真正的周围词,但是周围词的个数相比词表中单词的个数来说太少了,因此选到周围词的概率很低,可以忽略。
负采样的思想就是增大正样本的概率,减小负样本的概率。对于每一个词,不能只对应一个负样本,因为一个负样本可能有一定的偏差,一般情况下要选3–10个之间,它要输出正样本的概率,还要输出k个负样本的概率,这样只需要输出k+1个概率。
它的复杂度是下图中的式子,第一项是正样本的概率,第二项是负样本的概率,由于第二项中添加了负号,因此只需让下面的式子得到的值越大越好。
其中,vc 是中心词向量,u0 是窗口内上下文词向量,uk 是负采样上下文词向量。
它的效果要比多分类要好,但是和最原始的word2vec一样,这里也需要一组中心词向量和周围词向量,并且都是完整额V×D,因此它总的参数个数要比层次softmax多,但是每次的计算量不多,每次只需要输出k+1个概率就可以,而在层次softmax中要输出log2 V个概率。
那么应该如何采样比较好?
论文中提到一种采样方法,将每个词出现的频率都开四分之三次方,然后再除以归一化来作为该词采样的频率。
为什么要减少把频率大的词的抽样概率,增大频率小的词的概率呢?
因为一些重要的词往往出现的次数少一些,不重要的词往往多一些,比如the、a等。
下面看一下CBOW中负采样是怎么使用的。
周围词的词向量的平均与随机采样得到的词组成的是负样本,与中心词组成的是正样本,损失函数如下图中J所示,也是最大化J。
总结下负采样和层次softmax的策略,层次softmax的思想是把softmax转换成多个sigmoid,并且多个sigmoid是少于log2 V次的,减少了计算量;而负采样是将一个多分类问题转换成一个二分类问题,这样就不用受到softmax的干扰了。
自然语言处理共识:文档或者数据集中出现频率高的词往往携带信息较少,比如the、is,而出现频率低的词往往携带信息多。
重采样的原因:
1.想更多的训练重要的词对,比如训练"Frence"和"Pairs"之间的关系比训练"France"和"the"之间的关系要有用,即多训练这些含有信息比较多的词对,少训练含所有信息比较少的词对;
2.高频词很快就训练好了,因为高频词出现一次就训练一次,而低频次需要更多的轮次。
重采样方法:
使用上图中的公式进行重采样。由公式可知,词频越大,f(wi )越大,P(wi )越大,那么词wi 就有更大的概率被删除,反之亦然。如果词wi 的词频小于等于t,那么wi 则不会被剔除。
优点:加速训练,能够得到更好的词向量。
模型的复杂度也就是时间上的复杂度,O = E × T × Q
O是训练复杂度 training complexity
E 是训练迭代次数 number of the training epochs
T 是数据集大小 number of the words in the training set
Q 是模型计算复杂度 model computational complexity
论文中求Q的方法比较特殊,使用参数的数目来计算时间复杂度
Q = V×H + N×D×H + N×D
输入层的参数:输入n个上下文的词,每个词映射成1×D的向量,N个词就是N×D;
隐藏层的参数就是W,隐藏层的输入是(N×D)维,输出得到的神经元的个数是H,因此W的维度是(N×D)×H;
U是H×D维。
如果使用层次softmax,每次计算一个词的概率,需要平均做log2 V次的sigmoid,就相当于有log2 V个塞塔和隐藏输出做内积,每个塞塔的个数都是和隐藏输出的个数相同,因此V×H就变成了H×log2 V。
输入也是1×D维,矩阵U是D×H维,矩阵W是H×H,V是H×V。
按照论文来说,D和H是一样大的,因此Q = 1×D + D×H + H×H + H×V,将D换成H,并加以整理,得Q = H(1+2H) + H*V
对于原始的skip-gram,它的中心词词向量是D维,然后乘以W’ (D×V维),而对于一个中心词来说,它对应着多个周围词,一般是5–10 个,这里假设是C个,因此再乘以C,便可以得到上图中的第一个公式。如果使用的是层次softmax,那么便将D×V变成D×log2 V。
对于每一个中心词来说,有1,个正样本和K个负样本,每个都会变成一个D维的词向量,便得到上图中第二个公式。
原始的CBOW,输入的是周围词,每个周围词的维度是1×D,那么N个周围词就是N*D维的,又经过一个前馈层,得到词典大小V的向量,因此中间矩阵的维度为D×V,所以总的参数个数为N×D+D×V。
与skip-gram相同,cbow对应于层次softmax和负采样的复杂度如上图所示。
前馈神经网络最复杂的部分是由隐藏层引起的;循环神经网络最复杂的部分是H×H;
可以自己取具体的值带入到公式中,然后对比查看复杂度的差别。
对比可知,不管是基于层次softmax的结构还是基于负采样的结构,他们的速度都是比基于前馈神经网络模型和循环神经网络模型的速度快的;skip-gram要比cbow稍微慢一点;负采样要比softmax要快一些。
任务是一个词对推理的任务,下图中前五个是语义类,后九个是语法类
用小数据集调参,选择最好的参数,参数包括维度、训练的数据量。
随着维度的增加,随着数据集的扩大,效果基本上是越来越好的。
RNNLM和NNLM都在语义上表现的比较好,在语法上表现的比较差,CBOW也是,而skip-gram在语法和语义上都表现的比较好。
超参数选择:请问,利用genism做word2vec的时候,词向量的维度和单词数目有没有一个比较好的对照范围呢?
词向量的维度一般在100–500维之间选择,初始值词典大小V的1/4次方,V=10k,dim=100。
min_count一般在2–10之间选择,min_count指在词在语料中最小的频率,min_count选越大,词表就越小,因为删去的词就越多,
论文的主要创新点:
1.提出一种新的结构
这个结构是使用词预测词,而不是用前面的一系列词来预测词,简化了结构;也提出了层次softmax和负采样,大大减少了计算量,从而可以使用更高的维度,更大的数据集
2.利用分布式训练框架
在大数据上训练,从而达到更好的效果
3.提出了新的词相似度任务
Analogy词类别
关键点:
1.更简单的预测模型——word2vec
2.更快的分类方案——HS和NEG
创新点:
1.使用词对的预测来替换语言模型的预测
2.使用HS和NEG降低分类复杂度
3.使用subsampling加速训练
4.新的词对推理数据集来评估词向量的质量
创新点
1.大数据集上的简单模型往往强于小数据集上的复杂模型
论文能否通过增加数据集来提升自己的模型?
2.King的词向量减去Man的词向量加上Woman的词向量和Queen的词向量最接近
它很好的说明了word2vec具有的非常良好的性质,它能学到这种代数的关系,词对的这种关系。
3.我们决定设计简单的模型来训练词向量,虽然简单的模型无法像神经网络那么准确地表示数据,但是可以在更多地数据上更快的训练。
因此我们设计模型不一样要往复杂的方向进行设计,也可以按照简单的方向进行设计。
4.我们相信在更大的数据集上使用更大的词向量维度能够训练得到更好的词向量。
数据非常重要。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。