计算机系统应用  2019, Vol. 28 Issue (9): 203-208   PDF    
基于循环神经网络的语义完整性分析
刘京麦野, 刘新, 郭炳元, 孙道秋     
湘潭大学 信息工程学院, 湘潭 411105
摘要:本文提出了一种基于循环神经网络的语义完整性分析方法, 通过判断句子是否语义完整, 将长文本切分成多个语义完整句. 首先, 对文本进行分词, 映射为相应的词向量并进行标注, 然后将词向量和标注信息通过循环窗口和欠采样方法处理后, 作为循环神经网络的输入, 经过训练最后得到模型. 实验结果表明, 该方法可以达到91.61%的准确率, 为主观题自动评分工作提供了基础, 同时对语义分析、问答系统和机器翻译等研究有一定的帮助.
关键词: 语义完整性    语义分析    序列标注    循环神经网络    自然语言处理    
Semantic Integrity Analysis Based on Recurrent Neural Network
LIU Jing-Mai-Ye, LIU Xin, GUO Bing-Yuan, SUN Dao-Qiu     
College of Information Engineering, Xiangtan University, Xiangtan 411105, China
Foundation item: Open Fund of Hunan Higher Education Key Lab of Cybercrime Investigation (2018WLFZZC003)
Abstract: This study proposes a semantic integrity analysis method based on recurrent neural network. By judging whether the sentence is semantically complete, the long text is divided into multiple semantic complete sentences. First, dividing the sentences into words, mapped to the corresponding word vector and labeled. Then the word vector and the annotation information are processed by the loop window and the undersampling method, and used as the input of the recurrent neural network. Finally we get the model by training. The result of experiment indicates that this method can achieve an accuracy of 91.61%. This method is the basis of automatic assessment of the subjective questions, and also helps the research of semantic analysis, question and answer system and machine translation.
Key words: semantic integrity     semantic analysis     sequence labeling     recurrent neural networks     natural language processing    

近年来随着科技信息的发展, 自然语言处理逐渐成为计算机科学和人工智能交叉领域中的一个研究热点[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表示输出门的输出、Stt时刻的状态、htt时刻的输出.

${f_t} = \sigma \left( {{W_f}.\left[ {{h_{t - 1}},{x_t}} \right] + {b_f}} \right)$ (1)
${i_t} = \sigma \left( {{W_i}.\left[ {{h_{t - 1}},{x_t}} \right] + {b_i}} \right)$ (2)
${\tilde C_t} = \tanh \left( {{W_C}.\left[ {{h_{t - 1}},{x_t}} \right] + {b_C}} \right)$ (3)
${S_t} = {f_t} * {S_{t - 1}} + {i_t}*{\tilde C_t}$ (4)
${o_t} = \sigma \left( {{W_o}.\left[ {{h_{t - 1}},{x_t}} \right] + {b_o}} \right)$ (5)
${h_t} = {o_t} * \tanh \left( {{S_t}} \right)$ (6)

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]. Dropout层将在训练过程中每次更新参数时按一定概率随机断开输入神经元, 这就防止了神经元之间过度的协同适应.

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

${S_i} = \frac{{{e^{{V_i}}}}}{{\displaystyle \sum\nolimits_i^C {{e^{{V_i}}}} }}$ (7)

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

2.4 训练与预测

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

$C = - \frac{1}{n}\sum\limits_x {\left[ {y\ln a + \left( {1 - y} \right)\ln \left( {1 - a} \right)} \right]} $ (8)

其中, y表示真实标签的分布, a则为训练后模型的预测标签分布, 交叉熵损失函数可以衡量ya的相似性. 此外, 交叉熵作为损失函数还有一个好处是能避免均方误差损失函数学习速率降低的问题, 因为学习速率可以被输出的误差所控制. 模型的训练过程采用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为类别数, PiRi分别表示第i个类别的P值和R值.

${\rm{macro - P = }}\frac{1}{n}\sum\limits_{i = 1}^n {{P_i}} $ (9)
${\rm{macro - R = }}\frac{1}{n}\sum\limits_{i = 1}^n {{R_i}} $ (10)
${{macro - F1}} = \frac{{2 \times {{macro - P}} \times {{macro - R}}}}{{{{macro - P + macro - R}}}}$ (11)
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的循环神经网络模型, 对长文本实现自动标注, 从而实现语义完整性分析. 从实验结果和项目使用来看, 本方法可以较好的解决标注语义完整性的问题. 后续将模型用到生产环境的过程中, 可以结合标签之间的依赖关系, 对模型输出结果, 按照一定的词性规则进一步提升预测结果.

参考文献
[1]
林奕欧, 雷航, 李晓瑜, 等. 自然语言处理中的深度学习: 方法及应用. 电子科技大学学报, 2017, 46(6): 913-919. DOI:10.3969/j.issn.1001-0548.2017.06.021
[2]
Mikolov T, Chen K, Corrado G, et al. Efficient estimation of word representations in vector space. arXiv: 1301.3781, 2013.
[3]
Graves A. Generating sequences with recurrent neural networks. arXiv: 1308.0850v5, 2013.
[4]
Tang DY, Qin B, Liu T. Document modeling with gated recurrent neural network for sentiment classification. Proceedings of 2015 Conference on Empirical Methods in Natural Language Processing. Lisbon, Portugal, 2015, 1422-1432.
[5]
何炎祥, 孙松涛, 牛菲菲, 等. 用于微博情感分析的一种情感语义增强的深度学习模型. 计算机学报, 2017, 40(4): 773-790.
[6]
刁琦, 古丽米拉•克孜尔别克, 钟丽峰, 等. 基于循环神经网络序列标注的中文分词研究. 计算机技术与发展, 2017, 27(10): 65-68. DOI:10.3969/j.issn.1673-629X.2017.10.014
[7]
李艳翠, 冯文贺, 周国栋, 等. 基于逗号的汉语子句识别研究. 北京大学学报(自然科学版), 2013, 49(1): 7-14.
[8]
王博立, 史晓东, 苏劲松. 一种基于循环神经网络的古文断句方法. 北京大学学报(自然科学版), 2017, 53(2): 255-261.
[9]
Dyer C, Ballesteros M, Ling W, et al. Transition-based dependency parsing with stack long short-term memory. arXiv: 1505.08075, 2015.
[10]
赵楠, 张小芳, 张利军. 不平衡数据分类研究综述. 计算机科学, 2018, 45(6A): 22-27, 57.
[11]
Srivastava N, Hinton G, Krizhevsky A, et al. Dropout: A simple way to prevent neural networks from overfitting. The Journal of Machine Learning Research, 2014, 15(1): 1929-1958.
[12]
周志华. 机器学习. 北京: 清华大学出版社, 2016.
[13]
Kingma DP, Ba J. Adam: A method for stochastic optimization. arXiv: 1412.6980, 2014.
[14]
Zeiler MD. ADADELTA: An adaptive learning rate method. arXiv: 1212.5701, 2012.
[15]
Reddi SJ, Kale S, Kumar S. On the convergence of Adam and beyond. International Conference on Learning Representations. New York, NY, USA. 2018.