北方工业大学信息学院 李丹丹
实现中文文本纠错的目的是提高语言的正确性,同时减少人工校验成本。序列到序列的深度模型可以避免人工提取特征,减少人工工作量,对文本任务拟合能力强,特别是Transformer模型,近几年在自然语言处理领域大火大热。Transformer模型摒弃了传统序列到序列模型中CNN或RNN的方法和模块,开创性地将自注意力机制作为编解码器的核心,不仅训练速度快,而且解决了RNN处理长距离文本可能导致语义丢失的问题。本论文设计了一个基于Transformer的中文纠错系统,经过NLPCC 2018官方基准测试集的测试,本论文设计的模型精确率达到27.19,召回率达到12.27,证明本系统有效。
当前,全球格局加速演变,经济全球化、文化多样化已经深入各国的发展。中国的国际地位正在逐步提高,学习中文的人越来越多,而中文经过几千年的演变和发展,已形成了一套复杂的文法和句法规则。这些语法和句法规则复杂多变,比如一些字或词存在多音、多义等现象。当语言使用者对语言掌握不足或粗心大意时,就很容易犯用词不当、张冠李戴等错误。另外爆炸式增长的网络数据中也存在着大量的错误信息,诸如错别字、错误语法等,这极大降低了电子文本的可读性和规范性。
本文期望设计并实现一款基于中文文本的纠错系统,旨在实现自动识别并纠正文本错误的功能,比如纠正文本中包含的用词错误、语法错误。中文纠错系统不仅可以适用于中文的初学者,帮助外国人学习中文,弘扬中国文化,还可以应用于出版业等需要文本校对的机构。这不仅可以大大降低人力成本,还可以提高文本质量,增加人们对电子文本的信赖度。
在文本纠错任务中,输入句子的长度与输出句子的长度不一定相等,输出句子的长度往往是不确定的。Seq2Seq(Seqence2Sequence)就是用来处理这种输出长度不确定时采用的方法。如图1所示,最基础的Seq2Seq模型包含了三个部分:编码器、解码器和连接两者的中间状态向量C,编码器通过学习输入,将其编码成一个固定大小的状态向量C。继而传给解码器,解码器再通过对状态向量C的学习来进行输出。
图1 Seq2Seq基础结构Fig.1 Seq2seq infrastructure
在自然语言处理(NLP)中,输入向量中包含大量信息,但是输入的某些部分可能会比其他部分对决策更有帮助,于是在处理当前单词的时候,希望模型多关注与该单词相关的信息,并忽略一些不相关的信息。这就是注意力机制所做的事,从大量信息中筛选出少量重要信息,并聚焦到这些重要信息上,忽略大多不重要的信息。在注意力机制中,如图2所示,权重越大越聚焦于其对应的值向量(Value)上,即权重代表了信息的重要性,而值向量是其对应的信息。
图2 映射向量Fig.2 Mapping vector
自注意力机制是注意力机制的变体,它减少了对外部信息的依赖,更擅长捕捉数据或特征的内部相关性。这个机制作为本论文所实现模型的核心部分,主要是通过计算词之间的相关性,来解决长距离依赖的问题。
在这里我们选用的计算公式为公式1:
句子中所有词的键向量(K)与编码词的查询向量(Q)点积,然后除以键向量的维度的平方根,也就是8,再通过softmax()这个函数归一化,最后将归一化后的值乘以值向量。最后一步,我们将这些分数求和得到自注意力的输出。
Transformer的结构如图3所示,我们可以看出该模型由很多个小部件构成。我们将这些小部件分成四个部分:输入部分、编码器部分、解码器部分、输出部分。
图3 Transformer结构图Fig.3 Transformer structure
输入部分拿到整个模型的源文本(Inputs),然后将源文本中的词汇通过词嵌入算法(Input Embedding)转换为词向量。在代码中,词向量的维度为512维。接着给这些词向量加上位置编码(Positional Encoding),将它们放在一个列表中传给下一个部分——编码器部分。位置编码的必要性是由于该模型不包含循环网络,也没有卷积网络,而模型需要利用序列中每一个数据的位置信息。在词向量中加入关于序列中字符的相对或绝对位置的一些信息,将“位置编码”添加到编码器和解码器堆栈底部的输入嵌入中。
编码器部分由N个编码器(Encoder)构成。这N个编码器结构相同,互相独立,不共享参数。词嵌入只发生在底层的编码器,也就是说只有最底层编码器接收的输入是由输入部分传来的词向量列表,其他编码器的输入都是上一层编码器的输出。
编码器可分为两层:多头注意力层和前馈网络层。多头注意力层里包含了多头注意力(Multi-Head Attention)和求和与归一化(Add&Norm);前馈神经网络层包含了前馈神经网络(Feed Forward)和求和与归一化(Add&Norm)。其中求和与归一化中的求和,其实就是残差连接。残差连接的概念已经在上面被介绍过了。在本模型中,它的好处体现在两个方面:一是解决梯度消失的问题,二是解决权重矩阵的退化问题。
解码器部分有N个解码器堆叠而成,这里的N与解码器部分的N保持一致。解码器中的网络层与编码器中的编码层大致相同,只有多头自注意力层的操作方式与编码器中的多头自注意力层的操作方式不太相同。在解码器中,自注意力层只能处理输出序列中更靠前的位置,这是因为在softmax步骤前会加入掩码,把后面的位置隐去。之所以加入掩码是因为在一些生成的自注意力张量中,张量的值可能是由指导未来信息计算得到。未来信息被看到是因为训练时会把整个输出结果都一次性进行嵌入,但是理论上解码器的输出不是一次就能产生最终结果,而是一次次通过上一次结果综合得出。
本系统的实现是基于一台Win10的64位操作系统,运行内存为8.00GB,显卡为GTX 1060,显存为6.00GB。本系统的编译在Visual Studio Code完成,系统的实现基于PyTorch库。它是一个基于Python的可续计算包,提供两个高级功能:(1)具有强大的GPU加速的张量计算(如NumPy);(2)包含自动求导系统的深度神经网络。
本系统结构为系统接收用户输入的语句,通过加载语言模型来完成问句查错和错误字符串纠正功能,然后系统输出正确性语句建议。
NLPCC 2018 GEC训练集来自NLPCC2018GEC共享任务测评[1]。
官方地址:http://tcci.ccf.org.cn/conference/2018/taskdata.php
“HSK动态作文语料库”( http://202.112.195.192:8060/hsk/login.asp )是母语非汉语的外国人参加高等汉语水平考试(HSK高等)作文考试的答卷语料库,其中收集了1992-2005年的部分外国考生的作文答卷[2]。
系统所实现的语言模型在上述数据集上进行测试。采用的评价指标为精确率、召回率和F0.5分数,在设计实现的工作中,本文设置了一组实验,用以证明Transformer模型应用于针对中文的文本纠错有效。实验结果如表1所示。
表1 实验结果Tab.1 Experimental results
系统界面的头部是系统的中英简介:中文纠错系统,Welcome to Chinese Text Correction System,用以说明系统的功能。从上往下的第一个输入框用于给用户输入需要校正的语句,并在输入框中设置了提示语句“请在此输入待校正的语句”,提高系统的交互性。在输入框下方设置一个校正按钮,用户点击该按钮后,系统会从下方输入框返回建议的正确语句。下方的这个输入框对用户来说是不可编辑的,仅用于系统返回校正结果,避免用户在输入框中输入了数据,造成界面显示的返回结果不纯。
例如,我们在上方输入框输入一个错误语句“我觉的作业得了满分。”,点击校正按钮后,系统在下方输入框返回校正后的语句“我交的作业得了满分。”
本系统使用Transformer模型来实现中文纠错系统,效果客观,但还有进一步提升的空间,本人认为可以在以下几个方面改善模型效果:可以将Bert模型应用到该任务当中,以Bert模型为首的各种预训练方法在各大任务中大放异彩,可以将预训练模型的隐藏层状态作为词向量,以包含更多的语义信息;可以进一步改进Transformer模型,继Transformer模型大火之后,各种变体的模型相继诞生,如Transformer-XL、Adaptive Attention Span、Reformer等。
引用
[1] 邓永康.基于神经机器翻译的中文文本纠错研究[D].武汉:武汉大学,2019.
[2] 高印权.基于深度学习的文本语法自动纠错模型研究与实现[D].成都:电子科技大学,2020.