神经网络语言模型的结构与技术研究评述
2019-08-12徐昊易绵竹
徐昊,易绵竹
(1.信息工程大学洛阳校区研究生四大队,洛阳471000;2.信息工程大学洛阳校区基础系,洛阳471000)
0 引言
语言模型是基本的自然语言处理问题之一,语言模型能够估计某一词序列为自然语言的概率,也就是在假设所有可能的词语排序组合出现的概率为1 的情况下,预测每个组合,也就是句子,出现的概率。对于一个好的语言模型,正确句子出现的概率应当相对较高,而错误的、不合语法的句子,出现概率则相对较低,甚至接近于零。在实际应用中,许多场合都可以依靠语言模型处理问题。如在语音识别中排除错误的同音词:P(I saw a van)>P(eyes awe of an);在机器翻译中,选择较为合理的句子:P(high winds tonight)>p(large winds tonight);或是在输入法中,得到用户更需要的输出:P(你现在干什么|nixianzaiganshenme)>P(你西安在干什么|nixianzaigaanshenme)。
语言模型可以通过以下方式形式化。如果我们以S 代表句子,V={w1,w2,w3,…,wn}代表语言的单词集合,句子S 就是一个单词序列:S=(w1,w2,w3,…,wm),m 为句子长度。那么,一个句子的出现概率可以表示为:
P(wm|w1,w2,w3,…,wm-1)即表示在已知前m-1 个单词的情况下,第m 个单词为wm的概率。因此,只要把句子中每个单词的条件概率相乘,即可计算出这一句子的出现概率。但是,由于任何一门自然语言的词汇量都非常大,组合的序列更是数不胜数。对于词汇量为V 的语言,任意序列中第m 个词出现的概率P(wm|w1,w2,w3,…,wm-1)共有Vm种,要保存这么多的参数目前的无法实现的。为了解决参数过多带来的问题,自然语言方向的研究者们提出了多种使用不同技术实现的语言模型。
1 传统语言模型
1.1 N-Gram语言模型
N-Gram 模型采用Markov 假设[2],认为语言模型中每个词的出现概率只与其前面n-1 个词有关。按照公式(1),可将N-Gram 模型形式化表示如下:
上述公式中的n 即为N-Gram 模型的阶数,不难看出,模型的复杂性和精度都与阶数呈正相关。选取合适的n 值建立N-Gram 模型的要点,一般情况下NGram 模型的阶数在1 到7 之间。
N-Gram 模型利用到了自然语言中的局部约束性质来描述自然语言,但当语言中存在远程约束时,NGram 模型便无法表现出来。并且,N-Gram 模型受稀疏数据影响大,对未在训练集中出现的词,会得到概率为0 的情况,这显然是不合理的。为此,针对N-Gram模型进行平滑处理就十分有必要,如Good-Turing 法、Kaze 回退法等。
1.2 决策树语言模型[3]
N-Gram 模型虽然结构简单,同时考虑了上下文的影响,但在实际的自然语言中,上下文信息并不是都对预测有益的,N-Gram 对n 以内的上文信息一视同仁并不严谨,并且将上文的范围限制在n 以内也是折中之举。因此,需要找到一种方法,能够从上下文中分辨与预测相关的词,并且不受其与预测对象距离的限制。
决策树模型是树结构模型,其非叶子节点包含问题和训练子集两部分,每个非叶子节点根据对问题的n个回答产生n 个子节点。叶子节点由训练子集和从该训练子集学习得来的条件概率组成。在有合适的问题集合的情况下,决策树模型通过降低条件熵的方法,递归的生成决策树,产生合适的问题序列。决策树模型能够选出与预测变量有关的上下文,并且不受距离的限制。
然而,如何选择合适的问题集合是一个难题,在简单模型的情况下,决策树性能较好,问题集合的设置也比较简单。但在自然语言处理的背景下,往往需要生成较为复杂的模型,问题集合的设置需要较高的专业知识水平,同时随着决策树高度的增加,越接近叶子节点,训练子集的规模会越分越小,对参数的估计也会受到影响。这被称为数据的碎片化问题。
1.3 最大熵模型
熵的概念最早由香农从热力学领域引入到信息论中,熵是不确定度的度量,当一个随机变量均匀分布时,熵的值最大;反之,若是变量的值可以完全确定,熵的值为0.。通过熵来预测变量的思想由Jaynes 提出[4],最大熵模型认为,在已知部分变量的情况下,对未知变量的最合理推断,应当选择最不确定即熵值最大的推断。其原理在于,其他推断的确定度较高,意味着是添加了我们已掌握信息以外的约束或假设才得出的,这必然是不符合逻辑的,而最随机的推断才是惟一不偏不倚的选择[5]。
最大熵语言模型的建立,首先要建立对概率分布的约束,即设定特征函数,形如:
其中x,y 可以是诸如上下文或词与词性等,若有k个特征,则1 ≤j ≤k。之后通过给定的训练语料,可以得到特征fj的期望值:
在满足特征的约束的条件下,就是指在概率分布的特征期望值应与式(4)得到的样本期望值一致的情况下,选择能使熵H(p)的值最大的概率分布:
最大熵模型在整个训练语料上展开,不会遇到NGram 与决策树模型的数据碎片化问题,特征的选择也较为灵活,可以使用各种类型的特征,如上下文与预测变量的关系、语义关系等。最大熵模型不依赖独立性假设,可以通过特征选择进行参数平滑,而不需要专门适配常规平滑算法。
传统的语言模型使用数学的方法描述自然语言的,但只利用到了单词间的统计关系,对词语间的语义关系利用很少。虽然也有基于语言知识的统计模型,如概率上下文无关文法,但这需要研究人员人为地加入语言相关的知识,无法通过机器自动的从数据中提取知识信息,而且知识的准确度随研究者个人的专业水平而异,可靠性存疑。
2 神经网络学习时序问题
近年来,随着深度神经网络学习的兴起,使用神经网络处理自然语言问题开始成为热门研究。2000 年,后任职于百度深度学习研究院的徐伟提出使用神经网络学习语言模型的想法[6]。之后Bengio 等人在2003 年发表使用神经网络估计N-Gram 模型的概率分布的研究[7],被称作神经概率语言模型。神经概率语言模型通过词向量体现了词语之间的相似性,弥补了传统的NGram 模型的缺陷,在Associated Press News 数据集上,取得比Kneser-Ney 平滑的N-Gram 模型明显更高的性能,并在神经网络模型中引入了词向量的概念。
2.1 循环神经网络
Bengio 的神经网络语言模型使用一般的前馈神经网络模型结构,在输入上仍受到如N-Gram 模型一样,上下文长度固定的限制,对远距离历史信息的建模能力差。2010 年,Mikolov 等利用带有有向环的特殊结构神经网络,即循环神经网络(Recurrent Neural Network,RNN),训练语言模型[8]。RNN 源自1982 年Sathasivam提出的霍普菲尔德网络[9]。在每一时刻t,RNN 会结合当前模型状态给出一个输出ht,并将这一输出作为下一时刻的输入,网络当前状态由上一时刻输出ht-1和当前输入xt共同决定。因此,RNN 模型带有记忆性,可以刻画一个序列当前的输出与过去信息的关系。由于RNN 模型结构包含有循环边,因此被称作循环神经网络或递归神经网络。如图1 所示。
图1 循环神经网络结构示意图
基本的RNN 结构主要由输入层(Input Layer)、隐藏层(Hidden Layer)、输出层(Output Layer)三部分组成,每个时刻t,输入层节点为输入向量xt,向量x 是输入词的One-hot 编码,向量维度与词汇表大小相同。隐藏层节点为非线性激活函数,接收输入向量xt与上个时刻的网络状态ht-1,输出向量ht并将其作为下一时刻输出的参考。
图2 循环神经网络按时间展开后的结构
如图2 所示,RNN 结构按时间在长度N 的序列上展开后,可看作一个前馈神经网络,并可通过反向传播算法进行训练。这是循环神经网络常用的训练方法:沿时间反向传播(Back-Propagation Through Time)。然而实际实验表明,RNN 训练中存在消失梯度问题,时间上相隔过远的输入即使发生较大变化,产生的影响也很难被梯度检测到,这使得基于梯度的反向传播算法训练出的RNN 语言模型对较长距离信息的学习效果不好。根据Bengio 等人的研究,RNN 语言模型的性能约等于n 为8 到9 的前馈神经网络模型[10]。
2.2 长短时记忆网络
循环神经网络有助于解决与时间序列有关的问题,能够更好地利用传统全连接神经网络不能建模的信息,但是它也存在长期依赖问题(Long-Term Dependencies)。在自然语言处理中,往往会遇到复杂的上下文场景,例如在模拟“天空是…色”的句子时,一般情况下“蓝色”的上文会是“天空”,但如果在更早的上文中存在“空气污染严重”等类似的信息时,“天空”的下文就可能是“灰色”。简单的循环神经网络对这种远距离信息的建模能力较差,而且在更复杂的场景中,有用信息与预测变量的距离有远有近,普通循环神经网络的性能无法处理。准确地说,RNN 模型在训练过程中总是倾向于按照序列结尾处的权值的正确方向进行更新[11]。为此,Schmidhuber 等在1997 年提出一种具有特殊结构的循环神经网络——长短时记忆网络[12](Long Short-Term Memory,LSTM),LSTM 能够记住有意义的长时记忆,也能遗忘那些司空见惯的时刻。
LSTM 与标准RNN 的结构差异在于,常用的改进型LSTM 结构用一个具有“三门”结构的网络替换了RNN 中的单一tanh 循环体。如图3 所示。
图3 LSTM单元结构示意图
LSTM 中的“门”结构主要包含一个sigmoid 神经网络,sigmoid 激活函数因为值域为[0,1],所以用来描述有多少信息量能够被“门”结构“保留”或“遗忘”。“遗忘门”根据当前输入xt和上一时刻的输出ht-1与状态ct-1训练权重参数W,学习哪一些信息应当被“忘记”,例如当模型先学习到“天空是蓝色”后,又收到“空气被污染”的信息,就应当忘记“蓝天”的状态:
“输入门”则根据当前输入xt和上一时刻输出ht-1学习哪些信息应当被写入新状态,例如“空气被污染”就是值得被写入的新状态ct:
计算出当前状态后,“输出门”会根据当前状态ct和输入xt,上一时刻的输出ht-1来得到当前时刻的输出ht,例如在当前状态被更新为“空气被污染”后,对于输入“天空是…”的最大概率预测可能是“灰色”:
上述公式(6)-公式(10)组成LSTM 的前向传播过程,通过训练生成参数矩阵W,LSTM 能够对具有复杂上下文场景的序列预测问题,表现出比标准循环神经网络更优异的性能。不过,近期有研究报告指出,LSTM 结构存在功能重复的问题,“三门”结构中“遗忘门”起到了较重要的作用,因此出现了LSTM 的变体——门控循环单元(Gated Recurrent Unit,GRU),使用“重置门”和“更新门”替代了LSTM 的“三门”结构。一般实验证明,GRU 参数更少收敛更快,但在数据集很大的情况下,LSTM 的表达性能更好。
3 神经语言模型
上文介绍了目前在自然语言处理领域常用的神经网络模型,对于语言模型生成问题,为了达到更好的效果,无论使用哪种网络都会改变其结构,主要是在网络的两端加入词向量层(embedding)和Softmax 层。如图4 所示。
图4 循环神经网络实现语言模型
3.1 词向量层
词向量层,或称嵌入层,功能是将单词转换为词向量。自然语言处理中,要使机器自动处理与学习自然语言,就需要把自然语言的符号数字化,将词汇表“嵌入”一个固定维度的实数空间,就是词的向量化表示。在过去常用的方法是one-hot 表示法,这种表示法产生的向量维度等于词汇表的长度,每个向量只有一个维度的值为1,其余为0,N-Gram 语言模型就使用这种表示法。One-hot 表示法无法体现两个词之间的依赖关系,并且向量过于稀疏,将导致维数灾难问题。
神经网络语言模型中的词向量层能够将稀疏的向量转换为稠密的向量,被称为分布式表示法(Distributed Representation)[13]。这种稠密向量比一般的编号型向量包含更多的信息,通常会赋予语义相近的词以取值相近的向量,从而使上层的循环神经网络更好的学习词语间的关联性。另外还能降低输入的维度,onehot 表示法的向量维度通常在10000 左右,而分布式的词向量维度通常在200-1000 之间,大大减少了模型的参数量与计算量。依赖于连续词袋模型和Skip-Gram模型[14],神经网络语言模型中,往往通过添加词向量层来完成嵌入过程。
添加词向量层进行降维的方式可以看作添加一个简单的全连接网络,通过此全连接层的权重矩阵计算来降低维度。如图5 所示。
图5 词向量层
这一技术被称为“word2Vec”,由谷歌公司的Mikolov 等人于2013 年提出[15],词向量层的输入层是onehot 向量,隐藏层的激活函数是f(x)=x,输出层为Softmax 层。Word2Vec 认为拥有相似上下文的词的词义是相近的,例如“猫”和“狗”都经常出现在“兽医”的上下文中。Word2Vec 有两种模型:连续词袋模型(Continuous Bag-of-WordsModel,CBOW)和Skip-Gram 模型,CBOW 将一个词的上下文的词作为输入,要计算向量的词本身作为输出,旨在训练模型通过上下文猜出大致的词义;Skip-Gram 模型的输入和输出则相反,即通过给出的词预测可能出现的上下文。模型训练完成后,从输入到隐藏层的权重矩阵就包含了词汇表中所有词的分布式向量。对于一个特定词,通过将其onehot 向量与权重矩阵进行相乘运算即可得到它的分布式词向量。
实验表明,CBOW 模型训练出的词向量对语法测试更准确,Skip-Gram 模型则在语义测试中准确性更高。
人在阅读时如果遇到生僻词,仍可能根据上下文猜测其词义,Word2Vec 对分布式词向量的生成过程,可以说是对这种人类行为的模仿。
3.2 Softmax层
Softmax 层是使用Softmax 函数作为激活函数的网络层,经常作为神经网络的最后一层作为输出层。Softmax 函数,或称归一化指数函数,可将多个标量映射为一个概率分布,其值域为(0,1),公式如下:
在神经网络语言模型中,Softmax 层将网络的输出转化为词汇表中每个单词的输出概率。在Softmax 之前还要先进行一次线性映射,将RNN 隐藏状态维度的输出映射到一个和词汇表大小相同的向量,从而才能在这个向量的维度上进行Softmax。
相比隐藏层,词向量层和Softmax 层的参数数量通常很大,与词汇表的大小成正比,在整个网络的总参数数量中占了较大比例。有研究指出[16],可以共享词向量层和Softmax 层的参数,这样不仅能大幅减少参数训练量,还能提高模型最终效果。
3.3 神经语言模型的损失与性能
神经言模型通常使用困惑度(perplexity)的计算作为损失函数,在训练中通过梯度下降法使困惑度逐步降低。
困惑度刻画的是语言模型对样本的预测能力,其实际是计算每一个单词得到的概率倒数的几何平均,可以理解成模型预测下一个词时的平均可选择数量。在语言模型的训练中,通常采用困惑度的对数表达形式,使乘积求平方根计算转换成加法计算,达到加速计算的效果。
3.4 神经网络语言模型的性能优势
不同语言模型之间的性能比较,需要建立在相同数据集,相同词典的基础上。本文使用公开英语文本数据集PTB(Penn Treebank Dataset),取其中词频前9998 的词作为词典,并对数据集中不在词典中的词,使用<unk>进行替换。再加上句子分隔标签<eos>,得到总次数为10000 的词典。使用PTB 数据集中设定好的训练集与测试集。
使用N-Gram 方法对以上语料进行语言模型建模,分别建立3-gram 和5-gram 模型。3-gram 模型在测试集上的困惑度为186.7,5-gram 的困惑度为167.7。
使用LSTM 网络的神经语言模型性能优异,一个隐藏层规模为300 的LSTM,经过6600 次迭代训练,可将测试集上的模型困惑度从10000 左右减少到88。
4 结语
语言模型应用广泛,语音识别、机器翻译、词性标注等自然语言领域的问题,都可依靠语言模型的研究解决。近年来随着深度学习的兴起,语音模型的训练方法从传统的统计学习方法转向了神经网络学习,自2010 年起,基于循环神经网络的语言模型在很多自然语言处理问题上超越了传统的统计模型,并在学术界和工业界都得到广泛应用。广为人知的谷歌翻译系统使用的seq2seq 翻译模型,其中的解码器网络就是一个以输入编码为前提的语言模型(Conditional Language Model)。
神经网路语言模型在一定程度上克服了维数灾难,至今仍处于不断发展完善中,且相关新技术层出不穷。使用卷积神经网络取代循环神经网络的模型使训练过程可以并行执行、注意力机制的加入使翻译系统更高效。随着技术的进步,想必还会出现性能更优异的模型和更快捷的训练方法。相信未来的神经网络语言模型能使机器“说出”更自然的语言。