炼数成金 门户 商业智能 自然语言处理 查看内容

HFL技术分享 #8 | 语言模型简介

2019-6-4 10:02| 发布者: 炼数成金_小数| 查看: 9658| 评论: 0|原作者: nihao|来自: 哈工大讯飞联合实验室

摘要: 统计语言模型(Statistical Language Model)是自然语言处理的基础,它是一种具有一定上下文相关特性的数学模型,本质上也是概率图模型的一种,并且广泛应用于机器翻译、语音识别、拼音输入、图像文字识别、拼写纠错、 ...

tm 网络 模型 神经网络 自然语言处理

1、引言
统计语言模型(Statistical Language Model)是自然语言处理的基础,它是一种具有一定上下文相关特性的数学模型,本质上也是概率图模型的一种,并且广泛应用于机器翻译、语音识别、拼音输入、图像文字识别、拼写纠错、查找错别字和搜索引擎等。简单地说,语言模型就是用来计算一个句子的概率的模型,即,利用语言模型,可以确定哪个词序列的可能性更大,或者给定若干个词,可以预测下一个最可能出现的词语。

那么如何计算一个句子的概率呢?给定一个句子,它的概率表示为:

但是,当前面依赖的词过多时,模型的计算量将非常大,而且计算机的存储空间也有限,中文中词汇的数量数十万,不同长度的各种词的排列组合数几乎是无限的。因此需要近似的计算方法,常用的方法有N-gram模型、神经网络等等。

2、N-gram语言模型
马尔科夫曾提出一个假设,即考虑 t 时刻状态时仅考虑 t-1 时刻的状态,就是对每一个词出现的概率仅考虑与前一个词有关,或者根据需要只考虑前两个或者前三个词,这样问题就简单多了。一般来说,仅考虑前一个词,就可以有着不错的准确率,在实际使用中,通常考虑与前两个词有关就够了,极少数会考虑前三个词,这分别称为二元、三元和四元语言模型。n元语言模型情况下,概率表示如下:


 C(X)表示X序列在训练预料中出现的次数,训练预料规模越大,参数估计的结果越可靠。但是即便训练数据规模巨大,仍然有大量语言现象在训练语料中没有出现过,这就会导致许多概率为0。这种问题被称为数据稀疏,常用的解决办法是通过数据平滑来解决。数据平滑的方法有很多,例如:加法平滑,Good-Turing平滑,Katz平滑等。
2.2 平滑算法
加法平滑

Katz平滑方法
Katz平滑也称为回退(back-off)平滑,其基本思想是当一个n元对的出现次数足够大时,用较大似然估计方法估计其概率;当n元对的出现次数不够大时,采用Good-Turing估计对其平滑,将其部分概率折扣给未出现的n元对;当n元对的出现次数为0时,模型回退到低元模型。

参数α和β保证模型参数概率的归一化约束条件,即:

2.3 语言模型自适应
在自然语言处理系统中,语言模型的性能直接影响系统的性能。尽管语言模型的理论基础已经比较完善,但在实际应用中常常会遇到一些难以处理的问题。其中,模型对跨领域的脆弱性和独立性假设的无效性是两个明显的问题。也就是说,一方面在训练语言模型时所采用的语料往往来自多种不同的领域,这些综合性语料难以反映不同领域在语言使用规律上的差异,而语言模型恰恰对于训练文本的类型、主题和风格等都十分敏感;另一反面,n元语言模型的独立性假设前提是一个文本中的当前词出现的概率只与它前面相邻的n-1个词相关,但这种假设在很多情况下是明显不成立的。另外,香农实验表明,相对而言,人更容易运用特定领域的语言知识、常识和领域知识进行推理以提高语言模型的性能(预测文本的下一个成分)。因此,为了提高语言模型对语料的领域、主题、类型等因素的适应性,Kupiec和Kuhn&De Mori等提出了自适应语言模型的概念。

3、神经网络语言模型
传统的统计语言模型有一些缺点:1、由于维度灾难,在高维下,数据的稀疏性导致统计语言模型存在很多为0的条件概率,传统的统计语言模型花费大量时间处理数据稀疏问题,包括平滑、插值、回退等方法;2、语言模型的参数数量随着阶数呈指数增长,所以一般N-gram模型的阶数不能太高,这就导致N-gram无法建立长远的语法关系;3、N-gram无法建模出多个相似词的关系,比如在训练集中有:the cat is walking in the bedroom,但是用N-gram预测时,遇到:the dog was running in a room这个句子,并不会因为两个句子相似就让该句子的概率变高。

3.1 NNLM
利用统计语言模型来解决自然语言处理问题时,经常会遇见的问题就是维度灾难,尤其是当测试数据集中的文本与训练数据集中的文本相似度较低时。而且利用统计的方法训练一个较大的模型,同时将训练时间控制在一个合理的范围内是一件比较困难的事。2003年Bengio发表了一篇论文《A Neural Probabilistic Language Model》[1],提出了一种关于自然语言处理问题的新模型,它能够同时学习到关于单词的分布式表示和关于单词序列的概率函数。通过实验能够发现,该模型较之原来效果较好的N-gram模型有所提升。而且对于处理长文本有着更大的优势。

统计语言模型中,N-gram结合一些tricks已经能获得不错的效果。但是实际整个句子还包含有更多的有用信息,如果使用整句来预测是能够取得比只使用前几个词更好的效果的。这篇文章主要解决了两个问题,一个是不会只考虑前一个或是两个词,二是不会只考虑到词之间的相似性。

这篇文章的一个主要贡献在于,能够利用神经网络(之后会看到,这是一个多层的且共享权值的神经网络)来训练一个庞大的数据集。尽管代价较为昂贵,仍在可接受的范围内,同时对于长文本具有较好的扩展性,最后的结果也是很具有竞争力的。

文章提出的新模型的特性如下,模型结构如图1所示:
(1)为每一个在词典中的单词赋一个实值向量,向量的维度一般取30,60,100。较之原来one-hot的表示方法,维度大大减小了;
(2)利用单词的特征向量来构建概率函数,这与N-gram模型中的函数是非常相似的;
(3)对于特征向量和概率函数中的参数都是同时学习得到的。

图 1:neural network language model

为了直观理解这个模型,举个例子:假如现在我们要根据文档中出现的前3个词,来预测下一个词,则初始化部分:
• 对所有的文档提取单词制作一个词汇表,每个单词有一个的索引,即词汇表每行代表一个单词的embedding;
• 模型参数的初始化,除了神经网络的连接权重初始化之外,还需要初始化一张词汇表。

前向传播部分:
• 从文档中提取模型的输入,输入为3个单词的索引;
• 模型根据输入的3个单词的索引从词汇表中拿出对应的embedding表示得到每个单词的词向量。假如我们打算将每个单词转换为1个50维的向量,此时3个单词就转换为3个向量,每个都是50维;
• 将3个50维向量串在一起,变为一个150维的向量作为网络的输入层,传送给隐层;
• 对于隐层的每个神经元,150维输入乘以与每个神经元链接的权重,求和后输入给tanh激活函数;
• 激活函数的输出作为输出层(softmax)的输入,假设隐层的神经元数量为300个,则输出层的输入就是一个300维向量;
• softmax层的单元数量为词汇表的单词数量|V|,对每个单元,输入的300维乘以与输出层连接的权重后求和,并计算各个单元输出的概率作为下一个单词是第i个单词的概率。在这里例子中为300维向量,则对第i个softmax单元,权重为1个300维向量,转置后与输入相乘;
• 每一个softmax单元的输出为一个概率值,指示在词汇表中第i个单词为待预测单词即第四个单词的概率;
• 整个softmax的输出为一个长度为词汇表长度的概率分布,其和为1。

反向部分:
• 计算softmax的代价函数;
• 利用BP,一层一层求出网络连接权重的偏导数,并使用梯度下降更新;
• 对词向量层也需要求偏导数使用梯度下降来更新词向量表,整个过程反复迭代,词汇表就得到了不断的更新。
 这篇文章所提出的词向量的概念,成为了之后深度学习在自然语言处理方面的基础,其对单词的表达维度较统计方法大大地减小,而且更多地考虑到了单词的语义。甚至我们可以发现,词向量中存在着一些特定的运算,例如China-Beijing=Japan-Tokyo(这里用单词来表示它们的词向量)。

3.2 RNN LM
NNLM解决了数据稀疏和相似词的问题,但是上下文依赖太短仍然没有解决。基于循环神经网络的语言模型(recurrent neural network language model, RNNLM)[2]通过学习能够将当前词的历史信息存储起来,以词的整个上下文作为依据,来预测下一个词出现的概率,克服了N-gram和NNLM无法利用语句中长距离上下文信息的缺点。另外,在模型的训练过程中,由于词的历史信息被映射到低维连续空间,语义相似的词被聚类,在语料中出现次数较少的词仍然能够得到很好的训练,不再需要额外的数据平滑技术。迄今为止,采用RNN训练的语言模型在模型困惑度(perplexity,PPL)上取得了较好的效果。
RNNLM的网络结构包含输入层(input layer)、隐含层(hidden layer)和输出层(output layer)3个部分,模型结构如图2所示。

图 2:recurrent neural network language model

输入向量w(t)代表t时刻时输入词,采用one-hot编码,维数与词汇表大小相同。隐含层s(t)为网络的状态,表示t时刻时上下文的历史信息,输出向量y(t)表示待遇测词在词汇表上的概率分布。U、W为输入层与隐含层之间的权值矩阵,V为隐含层与输出层之间的权值矩阵。在t时刻,网络的输入由当前词向量w(t)和前一时刻的隐含层输出s(t-1)构成,联合计算下一个隐含层,通过隐含层循环的方式,可利用更长的上下文信息,更好地表示自然语言,网络中各层输出值用矩阵形式表示为:

在实际应用中,循环神经网络的梯度消失问题使网络不能较好学习较长距离的信息。这是因为在循环网络中,时间上隔得较远的输入的微小变化对网络训练几乎不会产生影响,即使远距离输入发生较大变化时,其产生的影响仍存在不能被梯度检测到的问题,这就使得在一些特定情况下,基于梯度的训练算法对长距离依赖的学习变得困难。一个解决办法是将RNN单元换成LSTM单元。

限制RNNLM使用的一个原因是计算量大,训练时间长。为了充分利用RNNLM的能力,不少学者尝试对RNNLM做了优化。下面我们将介绍几种常用的优化方法。第一种方法为:Mikolov提出的基于类别RNNLM[3],做法是将输出层的词汇分成n类,每个词属于其中的一类,计算概率的时候先计算目标词在某一类的概率,再在该类中计算目标词的概率,然后将两个概率相乘得到最终的概率。如图3所示:

图 3:class-based recurrent neural network language model

第二种方法是层次softmax方法,将输出层构造成一颗Huffman树[4],构建树的时候按照词汇频次由高到低。原有的计算量和词汇量V成正比,而现在由于二叉树的特性,复杂度变成了log(V),如图4所示:

图 4:hierarchical softmax model

第三种方法是方差正则化(variance regularization,VR)[5],方差正则化显式添加正则化项的方差至标准的CE目标函数。相关的目标函数如下: 

在NCE训练过程中,归一化项Zi的方差能被隐式限制为常量。训练步骤只与输出层的目标词和k个样本相关,而不是整个输出层。这样,输出层的计算消耗不再对词典大小敏感,且有显著下降。

第五种方法是在训练方法上的改进。基于类别的RNNLM能够在CPU上高效训练。然而,基于类别的RNNLM的使用不仅引进了词分类时的性能敏感性,也很难将不规则大小类别特定权重矩阵的训练并行化以便进一步加速。一个改进思路是,采用了带完整输出层的RNNLM,在GPU上以串(或minibatch)模式训练[7],能并行处理多路训练句子。另一个改进思路是利用拼接句子传技术,拼接句子串技术用来最小化句子长度变化引入的串流之间的同步开销。拼接句子串的思想在下图中描述。多个句子被拼接进N个串流之一(N为串的规模)。在训练过程中,一个N维的输入词向量通过在每个流中取一个词而构成。目标词向量通过在每个流中取下一个词而构成,模型结构如图5所示。

图 5:RNNLM training with spliced sentence bunch

第六种方法是LightRNN[8],是对网络结构和训练方式上的改进,LightRNN是微软提出的一个解决方案,模型结构如图6所示:

图 6:light recurrent neural network

该方法提出了一个2-Component shared embedding。概念将词分配到一个二维的词表里面。词表所有相同行的词共享一个行向量,所有相同列的词共享一个列向量。而一个词由其对应的行向量与列向量联合表示。这样就仅需要个向量来表示词表中的所有的词,其中V为词表的大小。

一个重要的技术挑战就在于怎么合理地将词分配到词表中,这分为三步:
①首先随机将词分配到词表中,训练LightRNN模型;
②固定训练好的向量,然后重新对词进行分配,从而最小化训练误差,这是一个图论中最小权较佳匹配的问题,并且可以有效地被解决;
③重复第二步直到满足停止机制的条件。

用LightRNN在几个基准数据集上面进行语言模型的任务。LightRNN可以达到目前较好的或者能与较好结果相媲美的效果,并且将模型的规模降了100倍,并且将训练过程的速度提升了2倍。

4、总结
本文第二章介绍了传统的N-gram语言模型以及各种平滑算法,第三章介绍了目前效果比较好的RNN语言模型和一些改进方法。大量实验证明,RNN相对于N-gram无论是在困惑度还是具体任务表现均更好,目前限制RNN语言模型的主要瓶颈在于RNN训练和测试需要大量计算开销,近几年不少学者尝试解决这个问题,但是到目前为止,仍然不能大规模替代N-gram。

参考文献
[1] Bengio, Y., Ducharme, R., Vincent, P., & Jauvin, C. (2003). A neural probabilistic language model. Journal of machine learning research, 3(Feb), 1137-1155.
[2] Mikolov, Tomáš, et al. "Recurrent neural network based language model." Eleventh Annual Conference of the International Speech Communication Association. 2010.
[3] Mikolov, Tomáš, et al. "Extensions of recurrent neural network language model." Acoustics, Speech and Signal Processing (ICASSP), 2011 IEEE International Conference on. IEEE, 2011.
[4] Jiang, Nan, et al. "Exploration of tree-based hierarchical Softmax for recurrent language models." Twenty-Sixth International Joint Conference on Artificial Intelligence. 2017.
[5] Shi, Yongzhe, et al. "Variance regularization of RNNLM for speech recognition." Acoustics, Speech and Signal Processing (ICASSP), 2014 IEEE International Conference on. IEEE, 2014.
[6] Dyer, Chris. "Notes on noise contrastive estimation and negative sampling." arXiv preprint arXiv:1410.8251 (2014).
[7] Chen, Xie, et al. "CUED-RNNLM—An open-source toolkit for efficient training and evaluation of recurrent neural network language models." Acoustics, Speech and Signal Processing (ICASSP), 2016 IEEE International Conference on. IEEE, 2016.
[8] Li, Xiang, et al. "LightRNN: Memory and computation-efficient recurrent neural networks." Advances in Neural Information Processing Systems. 2016.

声明:本文版权归原作者所有,文章收集于网络,为传播信息而发,如有侵权,请联系小编及时处理,谢谢!

欢迎加入本站公开兴趣群
商业智能与数据分析群
兴趣范围包括:各种让数据产生价值的办法,实际应用案例分享与讨论,分析工具,ETL工具,数据仓库,数据挖掘工具,报表系统等全方位知识
QQ群:81035754

鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

热门频道

  • 大数据
  • 商业智能
  • 量化投资
  • 科学探索
  • 创业

即将开课

 

GMT+8, 2019-6-18 23:06 , Processed in 0.172257 second(s), 25 queries .