融合多通道CNN 与BiGRU 的字词级文本错误检测模型
2022-09-15郭可翔王衡军白祉旭
郭可翔,王衡军,白祉旭
(1.信息工程大学 密码工程学院,郑州 450001;2.中国人民解放军96714 部队,福建 永安 366001)
0 概述
随着社会信息化水平的不断提升,无纸化办公成为新趋势,然而电子文本数量急剧增多,不可避免地会出现各种各样的文本错误,机关公文、学术论文、法律文书等重要文本错误将影响各类文书的权威性和公信力。因此,如何有效减少文本错误,确保文本正确性和可靠性成为当前的研究热点。
文本校对是自然语言处理(Natural Language Processing,NLP)领域的重要分支,是文本撰写工作中不可或缺的关键环节,主要利用NLP 技术,按照一定的规则和要求,识别并纠正文本中所包含的错误。文本校对一般由检错和纠错两部分组成,正确纠错离不开检错,精准高效的检错是校对工作的基础。通常地,文本检错的输入为可能包含错误的待检错句子,输出为T(正确文本)或F(含字词错误文本)二类检测结果。
与英文文本相比,中文文本不存在非字错误,常见错误可分为字词错误、语法错误和语义错误3 类。词是自然语言中能够独立运用的最小单位,也是自然语言处理的基本单位。字词错误在文本中出现频率相对较高,对文本检错而言,字词错误检测十分重要。字词错误包括多字、缺字、别字、易位等错误。
传统的文本检错采用人工逐字逐句校对的方式,不仅考验审校者的语言学知识水平,而且费时费力、效率不高。国内对中文文本自动检错的研究始于20 世纪90 年代初且发展迅速,主要采用基于规则、基于统计和基于传统机器学习等方法。近年来,深度学习技术因强大的特征学习能力被广泛应用于自然语言处理领域,尤其长短时记忆(Long Short-Term Memory,LSTM)网络[1]在中文分词、命名实体识别[2-3]、语法分析[4]等应用上取得较好成果,因此已有一些学者将深度学习技术应用于中文文本校对任务。
本文以中文文本字词错误为检测对象,提出一种基于多通道卷积神经网络(Convolutional Neural Network,CNN)和双向门控循环单元(Bidirectional Gated Recurrent Unit,BiGRU)的中文文本字词错误检测模型,主要包括词向量层、多通道CNN 层、BiGRU 层和Softmax 输出层。
1 相关工作
1.1 传统的文本检错方法
传统的文本检错方法包括基于规则的检错方法、基于统计的检错方法和基于传统机器学习的检错方法。
基于规则的检错方法[5-6]主要利用语言学规则来侦测文本错误,规则越丰富,检错效果越好。该方法通俗易懂、可解释性强、精确度高,但文本错误千变万化、层出不穷,规则难以覆盖所有错误类型,限制了检错的效果。
基于统计的检错方法[7-9]主要利用统计规律来检测文本错误,很大程度上依赖训练语料的规模和质量,规模越大,质量越高,检错效果越好,但容易出现数据稀疏问题,需要使用各种平滑技术来解决,且准确率有待提升。
基于传统机器学习的检错方法主要利用大规模人工标注的语料样本建立数学模型,通过调试模型的参数使其达到最优,其性能好坏取决于数学模型本身、训练样本规模的大小和模型参数的调试情况[10]。CHENG 等[11]提出一种基于条件随机场(Conditional Random Field,CRF)的文本乱序错误诊断方法。WU 等[12]基于CRF 模型训练一个线性标记器,构建中文语法错误诊断系统。CHEN 等[13]利用统计的方法在大规模语料库上收集搭配信息,并将搭配特征集成到CRF 模型中,得到了更精确的文本检错模型。卓利艳[14]提出一种基于CRF 和n-gram散串技术的联合检错方法,该方法首先标注数据、训练模型,利用训练好的CRF 检错模型判断错误位置及错误类型,然后在分词的基础上得到散串,利用n-gram 模型确认错误位置。传统机器学习方法在处理结构复杂的数据泛化问题时性能较差,且只能人工提取到浅层特征。
1.2 基于深度学习的文本检错方法
目前,运用深度学习技术处理中文文本检错问题的研究仍处于起步阶段。但神经网络能通过训练模型参数实现特征自学习,学习到文本抽象的语义特征,使模型具有良好的泛化能力,因此基于深度学习的中文文本检错方法具有广泛的研究前景。为提高文本检错准确率:ZHENG 等[15]提出一种CRF 和LSTM 相结合的模型,将CRF 的输出作为LSTM 输入层的离散特征;YANG 等[16]在LSTM 的输出层后接一个CRF 层,确保预测标注序列的合法性,提高了句子标注的准确性;龚永罡等[17]在Seq2Seq 模型的基础上,加入BiLSTM 单元和注意力机制,有效提升了检错水平。针对表达冗余、词汇误用和内容缺失等问题:叶俊民等[18]提出一种基于层次化修正框架的文本检错纠错模型,利用基于预训练模型获得的文本语义表示来识别错误的位置,根据层次化修正框架计算精化的修正操作并修正错误;王辰成等[19]将语法检错纠错任务转换成翻译任务,提出一种基于Transformer和多头注意力机制的纠错模型,利用残差网络动态连接不同神经模块的输出,使模型能更好地捕获语义信息;段建勇等[20]改进了Transformer模型,在自注意力中加入高斯分布偏置项,加强了模型对局部信息的关注及对错误字词与前后文关系的提取,同时采用ON_LSTM 结构,提升了模型获取语法错误结构信息的能力;曹阳等[21]基于Transformer 网络提出一种中文单字词错误侦测方法,利用原始语料、汉字混淆集自动构建单字词错误训练语料并使用不同大小的移动窗口诊断单字词错误。
2 基础模型
2.1 卷积神经网络
CNN 在机器视觉、图像处理领域取得了巨大成功,近年来也被广泛应用于NLP 领域且表现出色。CNN主要由输入层、卷积层、池化层、全连接层和输出层等组成,其中卷积层和池化层是核心部分,结构如图1所示。
图1 CNN 卷积层和池化层结构Fig.1 Structure of CNN convolutional layer and pooling layer
在NLP 任务中,CNN 的输入层主要为文本的词向量表示,如式(1)所示:
其中:Α为矩阵表示符;n为句子中词向量的个数;m为词向量的维度。
卷积层主要作用是基于卷积核对输入向量进行卷积操作,提取局部特征f,利用其稀疏连接和权值共享的特性,降低输入数据的维度,防止出现过拟合。卷积操作如式(2)所示:
其中:x为词向量矩阵;W为权重矩阵,即卷积核矩阵;b为偏置量;φC为卷积核激活函数ReLU;*为卷积操作。以图2 为例,卷积操作如式(3)~式(6)所示:
图2 卷积操作Fig.2 Convolution operation
池化层主要作用是进行下采样,筛选出卷积操作后最重要的特征,减小特征规模,提高特征鲁棒性。常见的池化策略有最大池化(max pooling)和全局平均池化(global average pooling)。池化后的输出作为全连接层的输入,全连接层相当于前馈神经网络的隐藏层,通常在CNN 的尾部进行重新拟合,减少特征信息的损失。输出层主要用于输出结果。
考虑到CNN 强大的局部特征提取能力,本文以CNN 模型为基础,研究字词级文本错误检测模型。在文本检错任务中,CNN 模型可以提取句子中类似n-gram 的关键局部信息。
2.2 门控循环单元
循环神经网络(Recurrent Neural Network,RNN)是深度学习技术在自然语言处理任务中的重要应用,t时刻隐藏层状态的计算依赖于t时刻的输入和t-1 时刻隐藏层的输出状态,因此具有一定的记忆功能,能够提取到上下文的文本特征,处理序列识别建模问题时优势明显。然而,RNN 在反向传播前面时刻的参数计算过程中,随着参数W初始化为小于1的值,容易出现梯度消散的问题,从而导致训练的停滞。通常,RNN 只能记忆5~10 个时间步的信息,难以捕获序列中长时间和长距离的依赖关系。
在RNN 模型的基础上,HOCHREITER 等[1]提出长短时记忆网络,通过使用输入门、输出门和遗忘门3 个门结构,LSTM 在记忆重要上下文信息的同时,遗忘无用的信息,在一定程度上解决了RNN 长期记忆和反向传播中梯度消散等问题。然而,LSTM 训练时间较长、参数较多且计算复杂。CHO 等[22]提出门控循环单元(Gated Recurrent Unit,GRU),GRU 是长短时记忆网络模型的一种变体模型,结构如图3所示。
图3 GRU 结构Fig.3 Structure of GRU
对于任意时刻t,假定此刻GRU 的隐藏层的输入为xt、输出为ht,GRU 的计算过程如式(7)~式(10)所示:
其中:rt、ut和分别表示t时刻的重置门、更新门和候选隐藏层的状态;ht-1表示t-1 时刻的隐藏层的输出;Wr、Wu、Wh、br、bu、bh分别表示重置门的权重矩阵、更新门的权重矩阵、候选隐藏层的权重矩阵、重置门的偏置量、更新门的偏置量、候选隐藏层的偏置量;φ和σ分别为tanh 和Sigmoid 激活函数;[]表示向量拼接操作;⊗为哈达玛积,表示向量元素相乘操作。
GRU 利用2 个门单元(重置门、更新门)代替LSTM 中的3 个门单元(输入门、输出门和遗忘门),实现对上下文信息的有效筛选与过滤。由式(7)、式(9)可知,重置门主要负责确定t-1 时刻隐藏单元的状态ht-1在t时刻候选状态中被重置的程度,重置门的值越大,则被重置的程度越高。由式(8)、式(10)可知,更新门主要负责确定t-1 时刻隐藏单元的状态ht-1、t时刻候选状态对当前状态ht的影响程度,更新门的值越大,则前一时刻隐藏层状态被遗忘的程度越高,当前候选状态被记忆的程度也越高。
GRU 具备了LSTM 的优点且只有两个门单元,模型结构更简单、参数更少、收敛性更好,很大程度上缩短了模型训练时间,提高了训练效率。在经典的GRU 模型中,状态是根据序列由前向后单向传输的,忽略了后序状态对前序状态的影响。BiGRU 是GRU 的一个变体模型,既能提取前文特征,又能捕捉后文信息,弥补了单向GRU 的不足,提升了模型的效果,结构如图4 所示。在图4 中,xi(i=1,2,…)表示当前的输入,表示经过GRU 输出的正向隐藏状态,表示经过GRU 输出的反向隐藏状态,hi表示正向和反向拼接后的隐藏状态。
图4 BiGRU 结构Fig.4 Structure of BiGRU
在通常情况下,中文文本中的字词错误与上下文均有关。因此,综合考虑硬件的计算能力、时间成本以及对上下文特征提取的需求,本文以BiGRU 模型为基础,研究字词级文本错误检测模型。在文本检错任务中,BiGRU 模型可以捕获变长且双向的n-gram 信息。
3 基于多通道CNN 与BiGRU 的文本错误检测模型
本文提出一种基于多通道CNN 与BiGRU 结构的字词级文本错误检测模型,既能充分发挥CNN 提取待检错文本局部特征的优势,又能利用BiGRU 深入学习待检错文本的上下文语义信息及长时依赖关系。该模型主要由词向量层、多通道CNN 层、BiGRU 层和Softmax 输出层等组成,整体结构如图5所示。采取无监督学习的方式训练模型,利用带标签类的语料训练基于多通道CNN 与BiGRU 的字词错误检测模型,使其自动学习模型中的各参数,采用训练得到的检错模型对待检错语句进行分类,判断是否存在字词错误并输出结果。
图5 基于多通道CNN 与BiGRU 的字词级文本错误检测模型结构Fig.5 Structure of the word-level text error detection model based on multi-channel CNN and BiGRU
3.1 词向量层
词向量层主要是将输入的待检错文本向量化。词向量是词汇的分布式表示,关键在于将词汇转化为相对低维的连续的稠密实数向量,在深度学习技术应用于NLP 领域扮演着重要的角色。词向量之间的距离表征了词语间的相似性,距离越近,则相似程度越高。
给定一个含词量为n的句子X=x1,x2,…,xn,xi(i=1,2,…,n)为句子中的第i个词语,经过词向量层的映射后,则句子X可表示为由n个词向量拼接而成的二维矩阵,如式(11)所示:
其中:ei表示句子中xi对应的词向量。
3.2 多通道CNN 层
多通道CNN 层主要利用多通道卷积神经网络有效提取文本的局部特征,输入为预训练好的词向量。选择不同大小的卷积核对输入的词向量进行卷积操作,可以提取到广度不同的上下文信息,即不同粒度的特征信息[23],从而达到提取文本局部特征的目的。
使用不同尺寸的卷积核进行卷积操作,从而得到文本的局部特征,如图6 所示。令第i个通道所使用的卷积核为k,如式(12)所示:
图6 多通道卷积操作Fig.6 Multi-channel convolution operation
经该卷积核k卷积操作后的特征fij的计算如式(13)所示:
其中:Xi:i+n-1∈Αn×m表示n个词向量组成的卷积核动态处理窗口。当窗口从X1:h动态移动至Xn-h+1:n时,{X1:h,X2:h+1,…,Xn-h+1:n}所对应的第i个通道得到的特征序列如式(14)所示:
多通道CNN 提取到的局部特征进行最大池化操作后生成固定维度的特征序列,再将多个固定维度的特征序列拼接形成融合特征序列f,令通道个数为u,则f可表示如下:
3.3 BiGRU 层
BiGRU 层主要利用双向门控循环单元挖掘文本的上下文信息、解决长时依赖问题,输入为多通道CNN 层经卷积操作提取的特征序列的融合。权值共享的BiGRU 将粒度不同的特征信息映射到相同的向量空间内。
对于给定的n维输入(x1,x2,…,xn),t时刻BiGRU的隐藏层输出为ht,计算过程如式(16)~式(18)所示:
当BiGRU 模型参数过多、训练样本较少时,容易产生过拟合现象。为防止训练过度,BiGRU 层采用dropout 机制,随机丢弃一些隐藏层节点使其暂时不参与模型训练,迫使BiGRU 网络在训练过程中学习鲁棒性更强的特征,提升模型的泛化能力。
3.4 Softmax 输出层
Softmax 输出层主要利用Softmax 函数对BiGRU层的输出进行归一化处理,提升模型的精度和收敛速度,最终得到文本检错结果,如式(19)所示:
其中:WS为Softmax 层的权重矩阵;bS为Softmax 层的偏置量。采用最小化交叉熵损失函数(crossentropy loss function)的方式来求解和评估模型,同时引入L2 正则项,使模型参数更少、结构更简单,防止过拟合,损失函数的计算如式(20)所示:
其中:i为待检错文本的句子索引;j为待检错文本类别的索引T(正确文本)或F(含字词错误文本);M为训练数据集的大小;N为检测结果的类别数量;yi为待检错文本实际所属的类别,为待检错文本经模型预测的类别;λ||ω||2为L2 正则化项,λ为正则化参数,ω为模型参数。
4 实验与结果分析
4.1 实验环境、数据集与评价指标
实验环境为:CPU 为Intel Core i7-7800X,GPU 为GeForce RTX 2080Ti,内存为DDR4 16 GB,操作系统为Windows10(64 位),深度学习框架为tensorflow1.14。
实验在公开数据集SIGHAN2014、SIGHAN2015上进行,采用SIGHAN2014、SIGHAN2015 中文拼写检查任务的训练集作为实验训练语料,SIGHAN2014 中文拼写检查任务的测试集作为实验测试语料。训练语料包括9 701 个段落(共计8 325 个字词错误),其中SIGHAN2014 训练集中有6 527 个段落(共计5 224 个字词错误),SIGHAN2015 训练集中有3 174 个段落(共计3 101 个字词错误)。测试语料包括1 062 个段落,段落文本的平均长度为50,其中50%文本中无字词错误,50%文本中至少含有1 个字词错误(共计792 个字词错误)。如果句子中包含至少1 个字词错误,则该句子为含字词错误文本且被标记为F,否则为正确文本且被标记为T。
实验采用检错的准确率(P)、召回率(R)、调和平均值(F1)作为文本检错模型性能好坏的评价指标,其中F1值为P和R的调和平均值,计算如式(21)所示:
4.2 实验数据预处理与参数设置
在实验开始前需要对实验语料进行数据预处理。在NLP 任务中,预训练词向量的效果影响着文本校对、机器翻译、文本分类等NLP 下游任务模型性能的好坏。本文使用Word2vec 词向量工具[24],基于大规模中文维基百科语料训练skip-gram 模型。考虑到词的数量,将中文文本词向量的维度设置为300。在训练词向量的过程中,词出现次数的阈值设置为5。若一个词出现次数大于5,则将该词添加于词向量词典;反之舍弃。对于未登录词,随机初始化其向量表示。考虑到实验语料中文本的平均长度为50,将句子长度的阈值设置为50。当句子长度小于50 时,进行补零操作;反之进行截断操作。对于实验语料中待检错文本,需要先使用jieba 分词工具进行中文分词。
目前,深度神经网络模型中使用较多、效果较好的优化算法是Adam[25],其引入动量和自适应性学习率使得网络更快收敛。因此,本文实验采用Adam 作为模型的优化器。
本文多通道CNN 所用的卷积核宽度分别为3、4、5,尺寸分别为3×300、4×300、5×300,数量均为128;BiGRU 隐藏层数分别1、2、3、4,隐藏层节点数为128;同时采用L2 正则化和dropout 策略来避免过拟合现象的发生。经过多次实验优化参数,本文模型的实验超参数设置如表1 所示。
表1 实验超参数设置Table 1 Setting of experimental hyperparameters
4.3 实验设计与结果分析
本文共设计4 个实验。实验1、实验2、实验3 利用控制变量法针对影响基于多通道CNN 与BiGRU 字词错误检测模型(简称为CNN-BiGRU 模型)性能的多个重要参数进行实验验证,使模型性能达到最优。在实验1、实验2、实验3 的基础上,设计实验4,将性能最优的CNN-BiGRU 模型与基于RNN、LSTM、GRU、BiGRU的文本检错模型进行比较,从而验证CNN-BiGRU 模型的有效性和优越性。
实验1验证卷积核通道数和宽度对CNN-BiGRU模型性能的影响。在BiGRU 隐藏层数为3、dropout 丢弃率为0.2 的情况下,分别选取单通道卷积核宽度为3、4、5 和多通道卷积核宽度为(3,4,5)进行实验,结果如表2 所示,其中最优指标值用加粗字体标示。
表2 CNN-BiGRU模型在不同卷积核宽度下的测试结果Table 2 Test results of CNN-BiGRU model with different convolutional kernel widths
由表2 可以得出,利用不同通道数和宽度的卷积核对文本进行卷积操作,均能有效挖掘文本的局部特征。多通道CNN-BiGRU 模型效果优于单通道CNN-BiGRU 模型效果。在单通道CNN-BiGRU 模型中,随着卷积核宽度的增大,模型性能越来越好。
实验2验证BiGRU 隐藏层数对CNN-BiGRU 模型性能的影响。在dropout 丢弃率为0.2 的情况下,分别选取BiGRU 隐藏层数为1、2、3、4 进行实验,结果如表3 所示,其中最优指标值用加粗字体标示。
表3 CNN-BiGRU 模型在不同BiGRU 隐藏层数下的测试结果Table 3 Test results of CNN-BiGRU model with different BiGRU hidden layers %
由表3 可以得出,随着BiGRU 隐藏层数的增加,CNN-BiGRU 模型的网络不断加深,表现越来越优,说明适当地增加隐藏层数能够丰富网络结构,提高网络学习能力,从而改善检错模型效果。当隐藏层数为3 时,CNN-BiGRU 模型的精度达到最高。但随着隐藏层数的继续增加,模型参数会大幅增多,模型复杂度也急剧加大,模型性能有所下降,由此说明隐藏层数也不宜过多,否则容易出现过拟合。
实验3验证dropout 机制的有效性及dropout丢弃率对CNN-BiGRU 模型性能的影响。在BiGRU隐藏层数为3 的情况下,分别选取dropout 丢弃率为0.0、0.2、0.5 进行实验,测试在每一轮迭代后检错F1值的变化情况,结果如图7 所示。
图7 CNN-BiGRU 模型在不同丢弃率下的迭代后检错F1值Fig.7 Error detection F1 value of CNN-BiGRU model after iteration with different drop rates
由图7 可以得出,dropout 机制对于防止过拟合、提升检错模型的性能起着重要作用。在丢弃率为0.0 即不采用dropout 机制的情况下,前几轮迭代中CNN-BiGRU 模型性能较好,但当迭代轮数逐渐增大,检错F1值趋于稳定时,丢弃率为0.2 的模型性能优于不采用dropout 机制的模型性能。在丢弃率选取为0.5 的情况下,CNN-BiGRU 模型性能较差,因此,采用dropout 机制时丢弃率不宜选取过大,否则容易丢弃重要特征导致模型性能下降。
实验4验证CNN-BiGRU 模型的有效性。在BiGRU 隐藏层数为3、dropout 丢弃率为0.2 的情况下,对基于RNN、LSTM、GRU、BiGRU、CNN-BiGRU 的文本检错模型进行实验,结果如表4 所示,其中最优指标值用加粗字体标示。
表4 不同文本检错模型的测试结果Table 4 Test results of different text error detection models %
从表4 实验结果可以看出:
1)基于RNN、LSTM、GRU 的文本检错模型均能提取文本序列间的长时依赖关系,基于LSTM、GRU的文本检错模型效果相当,明显优于基于RNN 的文本检错模型,但基于GRU 的文本检错模型结构简单,更具优势。
2)相较于GRU 的文本检错模型,基于BiGRU 的文本检错模型能够充分提取上下文特征信息,弥补了单向GRU 的不足,检错F1值提升了0.77 个百分点。
3)相较于BiGRU,本文基于多通道CNN 与BiGRU 的文本检错模型能够学习文本序列间的局部特征信息,检错F1值提升了1.65 个百分点。
目前公开的字词错误检测的语料较少,实验主要依赖于SIGHAN2014、SIGHAN2015 中文拼写检查任务中的训练集,且训练语料规模不大。然而,字词错误检测模型对训练语料的规模要求较高,制约了基于多通道CNN 与BiGRU 的字词级文本错误检测模型在测试语料中预测准确率、召回率的进一步提升。例如,“那一天我会穿牛仔裤和红色的外套;头上会带着蓝色的帽子。”和“我也想试试看那一家的越南菜;网路上说很多人喜欢那一家餐厅。”均为含有字词错误的文本,其中,“带着”应改为“戴着”,“网路”应改为“网络”,该文本应被标记为“F”却被错误标记为“T”。
5 结束语
本文提出一种融合多通道CNN 与BiGRU 的中文文本字词错误检测模型,在多通道CNN 层深入挖掘文本局部特征,在BiGRU 层充分提取文本上下文信息,同时采用L2 正则化和dropout 策略防止模型过拟合。在SIGHAN2014 和SIGHAN2015 中文拼写检查任务数据集上,设计字词错误检测实验分析并对比模型性能。实验结果表明,该模型有效解决了字词级文本错误检测的问题。后续将使用结构更简单的最小门单元代替门控循环单元,并引入注意力机制完善字词级错误检测模型,使其检错F1值得到进一步提升。