当前位置:首页 期刊杂志

基于循环神经网络的语义完整性分析①

时间:2024-05-04

刘京麦野,刘 新,郭炳元,孙道秋

(湘潭大学 信息工程学院,湘潭 411105)

近年来随着科技信息的发展,自然语言处理逐渐成为计算机科学和人工智能交叉领域中的一个研究热点[1].其中语义完整性分析的主要工作就是判断一句话是否语义完整,它是长文本句法分析、语义分析、机器翻译等自然语言处理任务的前期工作.在主观题的自动评分中,特别是长文本答案的主观题评分,就需要将学生答案和标准答案进行分句处理,即分割成多个语义完整的句子,再进行句法、语义的相似度匹配.对中文进行语义完整性分析的原因在于汉语中标点的使用没有严格的语法限制,尤其逗号的使用较为随意,逗号既可用于语义完整片段的分隔,也可在语义不完整时起停顿作用.因此,利用最新的自然语言处理技术对中文句子进行语义完整性分析具有重要意义.

目前对于语义完整性还没有公认的统一定义.根据实际工作的需要,我们认为一条语句如果能够完整的表达出意思,不再需要借助其他的语句,且不产生歧义,就称它是语义完整的.语义完整性分析,判别语义完整性,有助于提高问答系统,机器翻译以及主观题自动评分等应用系统的准确性.

1 相关工作

近年来深度神经网络发展迅速,被广泛应用于语音识别、计算机视觉和自然语言处理等邻域中.目前,将深度学习技术应用于解决自然语言处理(NLP)任务是一个研究热点.其中循环神经网络(Recurrent Neural Network,RNN)的特点是可以将某个时刻隐藏层的输出作为输入用于计算下一时刻隐藏层的输出,所以适合来解决一些时间序列的问题.而且不同于以往模型使用的固定序列长度,它能够处理任意长度的序列.

文献[2]通过使用循环神经网络来训练语言模型,提出了词向量Word2Vec,随后对词的分布式特征的研究不断兴起.文献[3]使用循环神经网络来生成文本,提出了一种新的RNN 结构MRNN,提高文本生成能力.文献[4]和文献[5]分别将循环神经网络和深度学习用在情感分析领域,并取得了不错的效果.文献[6]在序列标注的前提下利用双向循环神经网络模型进行中文分词,通过增加词的上下文信息能够有效地解决梯度爆炸问题,并取得了相对较好的分词效果.文献[7]中提出了一种通过抽取句法、词汇、长度等特征分析逗号是否是子句边界的方法,然而,在本文语义完整性分析研究中,若使用传统方法判断句子是否是语义完整,一方面需要对句子进行句法、语法分析,另一方面需要从分析结果中抽取合适的特征并且分析特征与结果的因果关系,当问题较复杂时,这种方式基本不可行.文献[8]提出了一种基于循环神经网络的古文自动断句方法,该方法采用基于GRU 的双向循环神经网络对古文进行断句.在大规模古籍语料上的实验结果表明,该方法能够取得比传统方法更高的断句F1 值,但是该方法是针对于单个字进行标注用于断句,并不适合本文以词语为单位进行标注的语义完整句切分.

本文试图将循环神经网络应用于中文句子语义完整性分析,将句子语义完整性分析转换为典型的序列标注问题来处理.

2 语义完整性分析方法

本文提出的模型采用基于双层的Bi-LSTM 循环神经网络,结构如图1所示.首先,模型的输入为原始文本经过预处理后的词序列,将其映射为相应的词向量并标注,经过循环滑动窗口和欠采样处理后作为Bi-LSTM 的输入.然后通过双层Bi-LSTM 更加准确地学习特征,最终通过分类器输出相应标签概率.

图1 基于循环神经网络的语义完整性分析方法架构

2.1 分词与词向量

汉语词汇是语言中能够独立运用的最小语言单元,是语言中的原子结构,所以对中文进行分词是自然语言处理的基础.分词的准确率将会直接影响后续词性标注,句法分析,词向量等相关工作的质量.本文采用结巴分词的精确模式进行分词处理.

为了让计算机理解人类的自然语言,把词表示为计算机适合处理的方式,这样词向量的概念就应运而生了.通常,词向量有两种表示方式:one-hot representation和distribution representation.

One-hot representation 是一种离散表示,它把每个词表示为一个长向量,向量中只有一个维度的值为1,其余维度为0,这个维度就代表了当前的词.例如:“物质”表示为[0,0,0,1,0,0,0,0,0,···,0,0,0],这种表示方式简单容易实现,但缺点就是编码太过于稀疏,将会导致维度非常高,同时每个词本身的信息量太小,无法展示词与词之间的关系.

Distribution representation 是将词转化成一种分布式表示,是一种既能表示词本身又可以考虑语义距离的词向量表示方法.它是一种低维实数向量,例如:“物质”表示为[0.792,-0.177,-0.107,···,0.109,-0.542].这种分布式表示的优点在于它不但解决了维数灾难问题,并且挖掘了词与词之间的关联属性,每一维度都有特定的含义,包含了更多的信息,从而提高了向量语义上的准确度.因此,近几年流行的语言模型Word2Vec 就是采用这种方法表示词向量的.

2.2 LSTM 神经网络

近几年循环神经网络(Recurrent Neural Network,RNN)广泛应用于自然语言处理,它引入了基于时间(状态)的循环机制,RNN 神经单元在某一时刻的输出依赖于当前的输入和以往时刻的信息,同时这一时刻隐藏层的输出也可以作为下一个神经单元的输入,这样就能够保持数据的依赖关系,有效利用信息.

经过大量实验证明,当相关信息和当前预测位置之间的间隔变得非常大时,普通循环神经网络就很难学习长期依赖,原因在于梯度消失和梯度爆炸问题,所以长短时间记忆(Long Short-Term Memory,LSTM)网络这种特定类型的循环神经网络就是专门设计出来解决这个问题的.LSTM 在以往的循环神经元结构基础上进行了改进,它有四个不同的神经网络层进行信息的交互.LSTM 单个神经元的网络结构如图2所示.

图2 LSTM 神经元细胞

LSTM 通过“门”的结构来控制细胞状态,门可以实现让信息选择性的通过,它主要是包括一个非线性激活函数Sigmoid和一个点乘运算Pointwise 操作来实现.这样的门有三个,分别是输入门、遗忘门和输出门,LSTM 通过这三个门来实现信息的存储和更新.其中Sigmoid 函数输出的是一个0 到1 之间的实数,表示让对应信息通过的权重,0 表示“不让任何信息通过”,1 表示“让所有信息通过”.它通过公式(1)~(6)进行计算,其中xt表示t时刻的输入,ft表示遗忘门的输出、it表示输入门的输出、ot表示输出门的输出、St为t时刻的状态、ht为t时刻的输出.

Bi-LSTM 与LSTM 本质上是一致,只不过Bi-LSTM 是在标准LSTM 上加了一个反向的LSTM,这样某一时刻的输出就能由它前面和后面的若干输入共同决定,充分利用句子的上下文信息,相比标准LSTM信息更加全面.

2.3 改进的双层Bi-LSTM 网络

本文采用改进的双层Bi-LSTM 来进行训练[9],其中每个层包含多个存储器单元,能够更加准确地学习特征.第一层Bi-LSTM 给后一层的Bi-LSTM 提供序列输出,而不是单个值输出.

(1) 输入层

首先对经过清洗后的数据集进行分词,然后采用四元标注集T={S,B,M,E}进行标注.定义B 表示为一个语义完整句的开头词,M 表示为一个语义完整句的中间词,E 表示为一个语义完整句的结尾词,S 表示为特定符号(,:、等)前面和后面最靠近的一个词.例如:“物质世界的运动是绝对的,而物质在运动过程中又有某种相对的静止”.这个语义完整句对应的词序列和正确的标签为“物质/B 世界/M 的/M 运动/M 是/M 绝对/M 的/S 而/S 物质/M 在/M 运动/M 过程/M 中/M 又/M有/M 某种/M 相对/M 的/M 静止/E”.

经过上述规则标注的标签数量会出现严重的类别不平衡问题[10],M 标签数量远大于其他标签,我们采用改进的随机欠采样方法对M 标签进行处理.对于一个语义完整句子来说,E和B 标签的数目为1,S 标签数目与句中标点符号有关,一般是2 个或者4 个,而M 标签的数目可以达到10 个左右.其中连续的M 标签是出现次数最多的,并且其特征对我们语义完整性分析来说,不是特别重要.所以将左边和右边标签都为M 的词依据一定比率进行丢弃,丢弃原则根据为M 标签数目略多于其他标签的数目即可,具体丢弃比率设置可见3.3 节中第四个对比实验.处理前后的标签统计数量如图3所示.虽然处理后的M 依然大概占有近半的数目,但通过后文对比实验表明,本文所提出的改进的随机欠采样方法对类别不平衡问题有很大的改善.

图3 各个标签采样前后数目统计

随机欠采样后的词序列因为上下文特征改变,可能会出现欠拟合的现象,为了既对词序列进行采样,又不丢失一个词应有的上下文信息,本文提出滑动窗口的方法,在随机欠采样前对序列数据进行处理.对于一个有n个词的词序列T(1:n),用大小为k的滑动窗口从首滑动至尾,每次窗口内的子序列作为Bi-LSTM 的输入.假设k值为5,序列T中下标为i(下标从0 开始)的词生成的子序列表示为(Ti-2,Ti-1,Ti,Ti+1,Ti+2),其中Ti=T[(n+i)%n].

(2) 双层Bi-LSTM

为了方便说明,这里假设滑动窗口的大小为5 的双层Bi-LSTM 其内部结构如图4所示.

图4 双层Bi-LSTM 结构图

在输入层我们已经把输入的词序列转换为维度为64 的词向量,图4中小矩形的数目即序列的长度.在第一个Bi-LSTM 中,这里输入为维度64 的词向量,输出为维度128 的词向量,由于其不是最后一层Bi-LSTM,这里会输出5 个128 维的词向量V1’…V5’.第二个Bi-LSTM 输入为V1’…V5’都为128 维词向量,经转换后得到V1”…V5”为256 维词向量,当前已经是最后一层Bi-LSTM,所以这里规定V5”为窗口中间词即词向量V3对应的输出.

(3) 输出层

深层神经网络中,过拟合会使模型泛化性能变差,为了防止过拟合,模型中增加了Dropout 层[11].Drop out 层将在训练过程中每次更新参数时按一定概率随机断开输入神经元,这就防止了神经元之间过度的协同适应.

Dropout 层的输出向量维度与Bi-LSTM 的输出维度相同,为了将向量维度转换为与标签类别数一致,所以增加了一个全连接层,并采用elu 激活函数,将Dropout 层的输出转换为指定维度的向量.最后对提取的特征采用Softmax 激活函数得到输出的概率.Softmax 的函数定义如下:

其中,Vi是全连接层的输出,i表示类别索引,总的类别个数为C,Si表示的是当前元素的指数与所有元素指数和的比值.一个含任意实数的K维向量,通过Softmax 层后,都会“压缩”到另一个K维实向量中,压缩后的向量每个元素都在[0,1]范围中,并且所有元素的和为1.

2.4 训练与预测

本文实际解决的是一个多分类问题,采用的损失函数为交叉熵损失函数[12],即模型的训练目标是使如下损失函数最小:

其中,y表示真实标签的分布,a则为训练后模型的预测标签分布,交叉熵损失函数可以衡量y与a的相似性.此外,交叉熵作为损失函数还有一个好处是能避免均方误差损失函数学习速率降低的问题,因为学习速率可以被输出的误差所控制.模型的训练过程采用GPU 并行加速,为了使模型达到更好的效果,本文选取大量神经网络优化算法进行实验.

模型的预测过程即对于任意的输入序列,深度神经网络输出的是每个时刻标注的条件概率(参见Softmax 输出格式).预测过程中,模型需要根据该输出值,进一步输出对应的标签.本文为了检验模型的准确性,直接选取概率最大的标签作为预测结果.

3 实验

3.1 实验环境

实验环境如表1所示.

表1 实验环境配置

本文采用的数据集是宾州中文树库(CTB)8.0 语料库,总字数大概130 万字,采用自动标注和人工标注相结合的方法,先将数据集中的几种标点(.?!;)视为语义完整的标志,然后通过人工检查进一步提高标注的准确性.最后随机的将数据集切分为90%的训练集和10%的测试集.

词向量数据来源为百度百科+维基百科+新闻+小说一共120 g 数据,词向量维度为64 维.本文在获取词向量过程中,对于未登录词统一用特殊向量代替.

3.2 评估标准

本文属于多分类问题,我们采用准确率(A)、宏查准率(macro-P)、宏查全率(macro-R)以及宏F1(macro-F1)作为评价模型效果的指标.A为模型整体的准确率.其他指标计算方式如下,其中n为类别数,Pi、Ri分别表示第i个类别的P值和R值.

3.3 模型参数设定

本文提出的模型影响实验结果的主要参数有神经元数目,激活函数类型以及模型优化器的选择,为了找到每个参数的较优解,本文采用控制变量法,分别作如下实验.

(1) 神经元数目

这里说的神经元数目,准确来说是循环神经网络的前馈网络层中隐藏神经元的个数,一般情况下,隐藏神经元的数目越多,模型就越复杂,训练时间越长.下面分别将隐藏神经元大小设定为64、128、256、512,实验结果如图5所示.从实验结果可以看到,在神经元数目较小时,随着神经元数目的递增模型各指标递增的比较明显.当神经元数目达到一定的值后,各指标增速放缓,最后甚至有下降的趋势.为了兼顾模型效果和训练速度,本文选取的神经元数目为256.

(2) 激活函数的选择

激活函数的作用是给模型添加非线性因素,增加模型对数据的适应性,使得分类更加准确.神经网络常用的激活函数有sigmoid、tanh、elu、relu 等,本文选取这四种激活函数分别进行实验,实验结果如表2所示.从图中可以看到,不同激活函数对结果影响还是很大的,根据实验结果,本文选择elu 作为激活函数.

图5 神经元数目对比实验结果

表2 激活函数实验对比结果

(3) 模型优化器设定

模型优化器就是设置深度学习的优化算法,主要目的是优化参数的更新策略.不恰当的优化算法会导致模型收敛到局部最优解.本文选择较常用的adam 优化算法[13]及adadelta 算法[14]作对比.实验结果如表3所示.其中adam+decay 表示采用adam 优化算法,但是每次迭代完成后用decay 值减小学习率.AMSGrad 为adam 的变体[15].优化算法的参数选用默认值或者论文中的推荐值.从表中可以看出,adam 的变种(AMSGrad)比原生的adam 的效果要好得多.而adadelta 算法比AMSGrad 算法要略好一点,因此本文选取的模型优化算法为adadelta 算法.

表3 模型优化器对比实验结果

(4) 输入欠采样方案比较

对于分类不平衡问题,本文采取改进的随机欠采样方法对输入数据进行处理.实验结果如表4所示,实验1 为普通随机欠采样方式,M 标签占比为50%.实验2、3、4 为本文提出的改进随机欠采样方式,采样后M 标签占比分别为50%,45%,40%.从实验可以看出,本文提出的改进随机欠采样方法比普通随机欠采样方法效果要好很多,并且当M 标签占比为45%时,实验效果最好,这可能是因为当M 标签占比为45%时,各标签分配比例刚好符合模型训练要求.

表4 优化算法对比实验结果

3.4 模型对比实验

经过上述参数对比试验,本文主要参数设定如下:Bi-LSTM 神经元数目为256,Dropout 层设定比率为0.5,词序列的滑动窗口大小为9,训练神经网络的批次(batch)大小设定为64,训练循环次数(epoch)设定为20,每次循环结束将训练数据集进行shuffle 处理.采用AdaDelta 优化算法,全连接层激活函数为elu.为了说明本模型的有效性,使用相同的数据集,分别采用RNN、LSTM、双层LSTM、双层Bi-LSTM 进行对比实验,实验结果如表5所示.

表5 模型对比实验结果

从结果可以看出,本文提出的双层Bi-LSTM 模型的准确率可以达到91.61%,优于其他模型.一方面,本文采用的循环窗口和随机欠采样方法可以在欠采样过程中很好的保留上下文特征.另一方面,Bi-LSTM 能够更好的学习上下文特征,且双层Bi-LSTM 模型获取特征更准确,因此可以达到较好的效果.

4 结束语

本文采用基于双层Bi-LSTM 的循环神经网络模型,对长文本实现自动标注,从而实现语义完整性分析.从实验结果和项目使用来看,本方法可以较好的解决标注语义完整性的问题.后续将模型用到生产环境的过程中,可以结合标签之间的依赖关系,对模型输出结果,按照一定的词性规则进一步提升预测结果.

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!