Java调用berkeleylm,从经典NNLM结构到改进方法,神经网络语言模型综述

模型可以总结出具有相同特征的单词类别。在神经网络训练时应用因子代替单词 token 可以更好地学习单词的连续表征,可以表征集外词,也可以降低 LM 的困惑度。然而,对不同的因子的选择和不同的上游 NLP 任务、语言模型的应用是相关的。除了对各个因子分别进行实验外,没有其他方法可以用于因子的选择。因此,对于特定的任务,需要有一种高效的因子选择方法。同时,必须建立带有因子标签的语料库。

双向模型

传统的单向 NN 只能根据过去的输入预测输出。我们可以以未来的数据为条件,建立一个双向的 NN。Graves 等于 2013 年、Bahdanau 等人于 2014 年将双向 RNN 和 LSTM 神经网络(BiRNN 和 BiLSTM)引入了语音识别或其它的 NLP 任务。BiRNN 通过在两个方向处理输入数据来使用过去和未来的上下文。目前双向模型最火的工作当属 Peter 等人于 2018 年提出的 ELMo 模型,这是一种基于 BiLSTM-RNNLM 的新型深度上下文单词表示。预训练的 ELMo 模型的嵌入层的向量是通过词汇表中的单词学习到的表征向量。这些表征被添加到了现有的模型的嵌入层中,并且在 6 个具有挑战性的 NLP 任务中显著提升了目前最先进的模型的性能。

尽管使用过去和未来的上下文的双向语言模型(BiLM)已经取得了进展,但仍然需要注意的是,BiLM 不能够被直接用于 LM,这是因为 LM 是定义在当前单词之前的上下文中的。由于单词序列可以被视为一种同时输入的序列,因此 BiLM 可以被用于其它的 NLP 任务(如机器翻译、语音识别)。

缓存模型

「最新出现的单词可能会再次出现」。基于这个假设,缓存机制最初被用于优化 N 元语言模型,克服了对依赖的长度限制。该机制会在缓存中匹配新的输入和历史数据。缓存机制最初是为了降低 NNLM 的困惑度而提出的。Soutner 等人于 2012 年试图将 FFNNLM 与缓存机制相结合,提出了基于缓存的 NNLM 结构,导致了离散概率变化问题。为了解决这个问题,Grave 等人于 2016 年提出了连续的缓存模型,其中变化依赖于隐藏表征的内积。

另一种缓存机制是将缓存用作 NNLM 的加速技术。该方法主要的思路是将 LM 的输出和状态存储在一个哈希表中,用来在给定相同上下文历史的条件下进行未来的预测。例如,Huang 等人于 2014 年提出使用 4 个缓存来加速模型推理。使用到的缓存分别为:「查询到语言模型概率的缓存(Query to Language Model Probability Cache)」、「历史到隐藏状态向量的缓存(History to Hidden State Vector Cache)」、「历史到分类归一化因子的缓存(History to Class Normalization Factor Cache)」以及「历史和分类 Id 到子词汇表归一化因子的缓存(History and Class Id to Sub-vocabulary Normalization Factor Cache)」。

注意力机制

RNNLM 利用上下文预测下一个单词。然而,并非上下文中所有的单词都与下一个相关、对于预测有效。和人类一样,带有注意力机制的 LM 通过从单词中选择出有用的单词表征,高效地使用长期的历史。Bahdanau 等人于 2014 年首次提出将注意力机制用于 NLP 任务(在他们的论文中是机器翻译任务)。Tran 等人和 Mei 等人分别于 2016 年证明了注意力机制可以提升 RNNLM 的性能。

注意力机制可以通过一系列针对每个输入的注意力系数捕获需要被重点关注的目标区域。注意力向量 z_t 是通过 token 的表征 {r_0,r_1,· · ·,r_(t−1)} 来计算的。

13dbae91154b066c087b14cdf6ae3016.png

这里的注意力系数α_ti 是通过得分 e_ti 的 Softmax 函数值归一化计算得来的,其中

7c994228d62f6818eb1bb5437b068de0.png

这是一个对齐模型,用于评估某个 token 的表征 r_i 和隐藏状态 h_(t-1) 的匹配程度。该注意力向量是用于预测的上下文历史的一种很好的表征。

针对大型语料库的加速技术

在一个拥有大规模单词表的语料库上训练模型是非常费时的。这主要是由于用于大型词汇表的 Softmax 层。为了解决训练深度神经网络时输出空间大的问题,人们提出了许多方法。一般来说,这些方法可以分为四类,即:分层的 Softmax、基于采样的近似、自归一化以及在有限损失函数上的精确梯度。其中前两种方法被广泛用于 NNLM。

语料库

一般来说,为了减少训练和测试的开销,需要在小型语料库上对模型的可行性进行验证。常用的小型语料库包括 Brown、Penn Treebank 以及 WikiText-2(见表 1)。

在模型结构被确定后,需要在大型语料库上对其进行训练和评估,从而证明模型具有可靠的泛化能力。常用的大型语料库会随着时间根据网站、报纸等媒体(包括华尔街日报、维基百科、新闻评论、 News Crawl、Common Crawl 、美联社(AP)新闻等)被更新。

然而,我们通常会利用不同的大型语料库训练 LM。即使在同一个语料库上,各种不同的预处理方法和不同的训练/测试集的划分也会影响实验结果。与此同时,展示训练时间的方式也不一样,或者在一些论文中并没有给出训练时间。不同论文中的实验结果并没有得到充分的比较。

工具包

传统的 LM 工具包主要包括「CMU-Cambridge SLM」、「SRILM」、「IRSTLM」、「MITLM」以及「BerkeleyLM」,它们只支持带有各种平滑技术的 N 元语言模型的训练和评估。随着深度学习的发展,人们提出了许多基于 NNLM 的工具包。

Mikolov 等人于 2011 年构建了 RNNLM 工具包。该工具包支持训练 RNNLM 来优化语音识别和机器翻译,但是它并不支持并行训练算法和 GPU 运算。Schwenk 于 2013 年构建了神经网络开源工具 CSLM(连续空间语言建模),用于支持 FFNN 的训练和评估。Enarvi 和 Kurimo 于 2016 年提出了可伸缩的神经网络模型工具包「TheanoLM」,它训练 LM 对句子进行打分并生成文本。

根据调查,我们发现并没有同时支持传统 N 元语言模型和 NNLM 的工具包。而且它们通常并不包含加载常用的 LM 的功能。

未来的研究方向

首先,降低计算开销、减少参数数量的方法仍然会被继续探索,从而在不增加困惑度的条件下提升训练和评估的速度。其次,我们期待能够产生一种新的架构,它能够模拟人的工作方式,从而提升 LM 的性能。例如,为 LM 构建一种生成模型(例如 GAN),可能会成为一个新的研究方向。最后,同样重要的是,目前的 LM 的评估体系并不规范。因此,有必要构建一个评价对比基准来统一预处理以及论文中应该展示的实验结果。

c2c9ed493cd281aa86d8a6f5178c4c01.gif [1] [2] 610626052e95c7fbe3d254abc769d9ad.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值