基于局部感知递归神经网络的字符级语言模型预测方法与流程

文档序号:15616495发布日期:2018-10-09 21:31阅读:265来源:国知局

本发明属于自然语言处理领域,具体是一种基于局部感知递归神经网络的字符级语言模型预测方法。



背景技术:

递归神经网络是一种极具表达能力的动态模型,因为rnn有高维度隐藏的非线性内部状态,使得它能够从先前处理过的信息中抽取先验的依赖信息。理论上,一个隐藏状态足够大的rnn能够生成任意复杂度的序列,并且已经证明在给定任意数量隐藏神经元的情形下rnn是图灵完备的;但实际上,标准的rnn不能存储较长的已有输入序列信息,所以尽管rnn的能力对人们很具有吸引力,但内部隐藏状态经过多次递归处理后变得不稳定,梯度极易消失或膨胀。这使得图灵完备的rnn的应用受到限制。

2011年sutskever等人采用rnn的一个变种来训练字符级语言模型,并取得当时最好的性能,此后graves通过大量的实验表明了递归神经网络强大的序列结构信息捕获能力;2015年mikolov分别使用前向神经网络、最大信息熵、n-gram在单词级别和字符级别给出效果对比。许多研究成果表明,与传统的前向神经网络模型或概率模型相比,递归神经网络更适合处理数据序列窗口较宽的字符级神经网络语言模型。

然而,传统的多层递归神经网络各层的形式类似,功能类同,这使得每层递归神经网络的职能难以划分,也不容易确定需要要的分层数量及各层的神经元数量;且当数据输入传统多层递归神经网络时,每个timestep,数据单纯由底层神经网络向上一层神经网络传输,数据信息流入方式单一,难以处理较长的数据序列。



技术实现要素:

本发明的目的是针对现有技术存在的问题,提供一种基于局部感知递归神经网络(la-rnn)的字符级语言模型预测方法,通过将三层类似递归神经网络(rnn)的网络结构按一定层次组合在一起,由低层到高层使每一层负责不同层次的信息处理,从而使新模型具有更强的信息综合能力,从而使得模型更容易处理较长的数据序列。

为实现上述目的,本发明采用的技术方案是:一种基于局部感知递归神经网络的字符级语言模型预测方法,包括以下步骤:

步骤a,数据预处理,将ptb数据分为训练、验证和测试三种数据集,对所述三种数据集包含的所有字符按ascii码进行排序,再将所述数据集的字符向前错位1步位置,按索引表示生成目标集;

步骤b,神经网络构建,所述局部感知递归神经网络包括依次非线性连接的a隐藏层、b隐藏层及h隐藏层;所述局部感知递归神经网络后面依次连接神经元数量为102的全连接层、relu层、神经元数量为102的全连接层、relu层、神经元数量为51的全连接层以及softmax回归层;

步骤c,神经网络训练,首先使用adadelta优化训练至测试集bpc低于1.45,再使用学习速率0.0001、动量为0.9的sgd优化方法训练,如果训练时在测试集上的bpc值连续两次没有下降,则学习速率减半;

通过训练数据的前向传播计算每个节点的值,通过与目标期望值的比较,计算出损失函数,然后进行误差的反向传播,由输出层开始逐层计算各层神经元的输出误差,使用所述步骤c中的方法训练神经网络,得到最终模型训练结果,根据误差梯度下降法来调节各层的权值和阈值,使修改后的网络最终输出接近期望值。

具体地,所述a层为输入预处理层,用于对输入数据进行预处理;所述b层为短期信息提取层,用于a层和h层提取信息作为输入数据;所述h层为长期信息综合层,用于输出和反馈数据;所述relu层为激活函数,用于快速收敛网络,防止梯度弥散,节省计算量。

具体地,步骤a中所述按索引表示的方法为通过onehot层将数据用51维的字符向量表示,所述onehot层与局部感知递归神经网络的前端通过神经元数量为51的全连接层连接。

具体地,所述步骤b中局部感知递归神经网络通过以下公式构建:

at=tanh(wa[xt,at-1,bt-1]+ba),

f1t=sigmoid(wf1[at,bt-1]+bf1),

i1t=sigmoid(wi1[at,bt-1]+bi1),

bt=i1t⊙wbaat+f1t⊙wbbbt-1+bb,

f2t=sigmoid(wf2[xt,bt,ht-1]+bf2),

i2t=sigmoid(wi2[xt,bt,ht-1]+bi2),

ht=f2t⊙whhht-1+i2t⊙tanh(wh[xt,bt]+bh);

其中,t表示数据处理时的每个时间步,tanh为层a、层b、层c之间的激活函数,w为矩阵,sigmoid为设置在局部感知递归神经网络后面的激活函数,用于缓慢收敛网络,x为预处理数据,⊙为对应元素质相乘操作符(elementwisemultiplication)。在所述局部感知递归神经网络la-rnn模型中,相比于传统的rnn模型,除细胞状态h外,所述la-rnn增加了细胞状态b和a以及相应的elementwise“门”操作f1、i1、f2、i2。f1为层a到层b的遗忘门,i1为层a到层b的输入门,f2为层b到层h的遗忘门,i2为层b到层h的输入门;f1、f2根据相应的输入信息遗忘掉b、h中不再需要的状态信息,而i1、i2根据相应的输入信息决定哪些输入信息存储到b、h中的状态中。围绕局部细胞状态a所形成的rnn用于获取局部的输入流信息,取决于要收集的局部信息长度,也可以加入f0、i0用于更精确的控制细胞状态a;围绕细胞状态b形成的rnn用来获取长期的输入流信息;围绕细胞状态h形成的rnn中引入了输入流x到h的peephole链接,这使得细胞状态b中保存的流信息得到一定程度的修正。细胞状态h、b与“门”之间简单的elementwise线性操作使得细胞状态信息更容易长期保存。

具体地,步骤b所述中局部感知递归神经网络的三个隐藏层之间均添加了dropout层,用于减少过拟合,公式如下:

at=tanh(wad([xt,at-1,bt-1])+ba),

f1t=sigmoid(wf1d([at,bt-1])+bf1),

i1t=sigmoid(wi1d([at,bt-1])+bi1),

bt=i1t⊙wbad(at)+f1t⊙wbbd(bt-1)+bb,

f2t=sigmoid(wf2d([xt,bt,ht-1])+bf2),

i2t=sigmoid(wi2d([xt,bt,ht-1])+bi2),

ht=f2t⊙whhd(ht-1)+i2t⊙tanh(whd([xt,bt])+bh);

其中,d算子表示对参数进行dropout操作。

具体地,所述dropout层的舍弃概率设为0.25,通过舍弃部分神经元来防止网络过拟合。

具体地,所述步骤b中a层、b层和h层神经元数量分别为51、102和512。

具体地,所述损失函数采用负对数似然函数nll。

与现有技术相比,本发明的有益效果是:(1)本发明的三层递归神经网络中,上层神经网络以类似窥孔的方式从下层甚至原始数据直接或取数据,并自动调整各层传入数据的权重,可以有效地处理较长的数据序列;(2)本发明的三层递归神经网络明确划分了输入预处理层(a层)、短期信息提取层(b层)和长期信息综合层(h层),a、b、h隐藏层神经元数量分别为51、102、512,各层神经网络之间分工明确,从而使该模型具有更强的信息综合能力,同时也提升了该模型预测的准确度。

附图说明

图1为本发明基于la-rnn的字符级语言模型预测流程框图;

图2为本发明中la-rnn神经网络层模型结构示意框图;

图3为本发明中la-rnn神经网络模型按时间展开的信息传递结构示意图。

具体实施方式

下面将结合本发明中的附图,对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动条件下所获得的所有其它实施例,都属于本发明保护的范围。

如图1至3所示,本实施例提供了一种基于局部感知递归神经网络的字符级语言模型预测方法,具体包括以下步骤:

s1:获取原始数据,对数据进行预处理,将数据划分为训练数据、测试数据和验证数据,使用数据集ptb训练模型,训练集有5.2m个字符900k个单词;验证集有400k个字符73k个单词;测试集有464k个字符82k个单词;用'|'替换'<unk>'后的字符集有51个字符;批处理大小为50,序列长度为250,每个字符使用51维的onehot向量表示;

s2:神经网络构建,语言模型第一层la-rnn中a、b、h隐藏层神经元数量分别为51、102、512;再依次连接神经元数量为102的全连接层、relu层、神经元数量为102的全连接层、relu层、神经元数量为51的全连接层,最后输出到回归层做字符概率预测,cost函数(损失函数)使用nll函数(负对数似然函数),所述relu层为激活函数;

s3:神经网络训练,使用bptt-rnn(递归神经网络反向传播算法)方法训练,首先使用adadelta(自适应学习率调整)优化训练至测试集bpc低于1.45,再使用学习速率0.0001、动量为0.9的sgd(随机梯度下降)优化方法训练,如果训练时在训练集上的测试结果没有改进(测试集上的bpc值连续两次没有下降),则将学习速率减半;直到训练至模型bpc为1.33(字符预测模型的理论bpc值为1.2);因为将此预训练模型应用到情感分析后还要再次调整,因此,在此预训练模型中,没必要继续训练下去。

具体地,在数据预处理过程中,将训练数据集中的每一个文本数据读入后作为数据输入,再将输入数据的时间序列提前1步后作为目标文本,以字符预测的方式预训练,提取字符向量,最后输出到softmax层做字符概率预测。

具体地,在模型训练过程中,本实施例以64个样本为一个批次进行批处理,64个字符序列作为训练的时间步,每轮训练都将样本的顺序重新打乱,在参数更新时,使用[-0.3,0.3]的剪裁梯度值以减少梯度爆炸的概率。

具体地,步骤s2中,回归层函数损失函数

具体地,步骤s2中,局部感知递归神经网络通过以下公式构建:

at=tanh(wa[xt,at-1,bt-1]+ba),

f1t=sigmoid(wf1[at,bt-1]+bf1),

i1t=sigmoid(wi1[at,bt-1]+bi1),

bt=i1t⊙wbaat+f1t⊙wbbbt-1+bb,

f2t=sigmoid(wf2[xt,bt,ht-1]+bf2),

i2t=sigmoid(wi2[xt,bt,ht-1]+bi2),

ht=f2t⊙whhht-1+i2t⊙tanh(wh[xt,bt]+bh);

其中,t表示数据处理时的每个时间步,x为原始数据,f1为层a到层b的遗忘门,i1为层a到层b的输入门,f2为层b到层h的遗忘门,i2为层b到层h的输入门;

其中第一层a的输入数据有3个来源:原始输入数据x,上一时刻a的输出和上一时刻b的输出;f1的输入为层a的当前输出和上个时间步层b的输出,i1的输入与f1相同;第二层b的输入为:i1和前一时刻的b;f2的输入数据为:原始数据x,层b当前输出和上一时刻层h输出,i2的输入与f2相同;第三层h的输入为:上一时刻h的输出,原始数据x和层b的输出。

为减少过拟合,在所述局部感知递归神经网络的三个隐藏层之间均添加dropout层,公式如下:

at=tanh(wad([xt,at-1,bt-1])+ba),

f1t=sigmoid(wf1d([at,bt-1])+bf1),

i1t=sigmoid(wi1d([at,bt-1])+bi1),

bt=i1t⊙wbad(at)+f1t⊙wbbd(bt-1)+bb,

f2t=sigmoid(wf2d([xt,bt,ht-1])+bf2),

i2t=sigmoid(wi2d([xt,bt,ht-1])+bi2),

ht=f2t⊙whhd(ht-1)+i2t⊙tanh(whd([xt,bt])+bh);

具体地,上式中,d算子表示对参数进行dropout操作,⊙为对应元素质相乘操作符(elementwisemultiplication)。

具体地,步骤s2中,在所述la-rnn层前端连接有概率为0.25的dropout层,这样做的好处是,通过在神经网络训练期间随机的关闭一些神经元及其连接,这使得在训练期间有无数个(指数级)部分神经元组合成的小神经网络得到同时训练,而达到模型平均的效果,避免某些特征只在固定组合下才生效,有意识地让网络去学习一些普遍的共性(而不是某些训练样本的一些特性)这样能提高训练出的模型的鲁棒性。

具体地,步骤s3中,bpc的计算公式为:

本发明的模型在测试集上的结果为1.41bpc,强于2016年bielik等人的结果(1.53bpc),且本发明提出的模型仅有1.1m参数,训练速度更快。

尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1