APP下载

基于BERT的古文断句研究与应用

2019-11-18俞敬松张永伟

中文信息学报 2019年11期
关键词:断句标点语料

俞敬松,魏 一,张永伟

(1. 北京大学 软件与微电子学院,北京 100871;2. 中国社会科学院 语言研究所,北京 100732)

0 引言

中华文字源远流长,战国竹简中就曾发现标点符号的使用,但古人习惯于不加标点。直到近代,大量古文篇章依然由连续的字符序列组成,缺少标点[1]。古人需要根据自己的知识背景和学术流派在阅读时自行断句。古文自动断句及标点是指根据古代汉语句子特点,结合现代汉语的标点符号用法,让计算机自动切割、断开连续的文本字符序列为句,然后添加标点[2]。中国历史久远,文本类型繁杂,高适应性的自动断句非常困难。标点时,由于借用现代汉语标点体系,处理古籍时难免会不适应。古文断句是古文整理与研究中最基本的任务,也可以说是最重要任务之一。

随着机器学习的兴起,人们开始尝试将统计学习方法应用于古文自动断句。文献[3]指出,这些研究大都以所获取的标点过的古籍的80% 作为训练集,20% 作为测试集的方法进行研究。在实际应用中,需要处理的文本领域和范围却可能是未曾见过的,根据我们的测试,之前论文所报告的方法在处理其他新类型文本时的表现远低于其在论文测试集上报告的水平。本文将新的深度学习方法用于古文自动断句及标点任务,除期望在测试集上有更好的结果外,还期望模型有更好的鲁棒性和泛化能力。

1 相关文献

早期的古文句读研究主要基于规则与统计方法。黄建年等通过规则方法对农业古籍进行断句[4]。由于规则的覆盖度和泛化能力太差,统计方法得到了更多的关注。陈天莹等[5]通过n-gram提取上下文信息以预测断句位置。张开旭等[6]在条件随机场(conditional random fields, CRF)模型的基础上,引入互信息与t-测试差,在《史记》和《论语》语料上进行训练和测试,最终F1值接近80%。Huang 等[7]使用音韵特征,利用条件随机场模型进行断句。许京奕[8]根据邻接搭配强度间的关系特征,在《史记》语料测试集上F1值达到82.16%。这些传统统计学习方法需要人工设计特征,过多依赖于先验知识,因此导致模型规模、表达力都非常有限。

深度学习方法中循环神经网络(recurrent neural network,RNN)为时序性网络结构,通常是序列标注问题的首选。Huang等[9]使用双向长短时记忆网络(bidirectional long short term memory,BiLSTM)+CRF模型,在词性标注、命名实体识别等序列标注任务上取得了当时的最优结果。王博立等[10]将RNN+CRF模型引入古文断句任务,通过使用基于GRU[11](gated recurrent unit)的双向RNN,利用大量语料进行端到端训练,将F1值提升到74.75%。

为解决RNN的网络结构不能并行计算以及可能发生的梯度消失与梯度爆炸问题,Vaswani等[12]提出Transformer模型。Transformer不但可以实现并行计算,其在机器翻译等许多任务上取得了优异的结果。2018年Devlin等[13]基于Transformer提出BERT模型,利用大量文本,通过类似于完形填空的Cloze任务[14]以及上下句判断任务,获得预训练词向量与句向量,随后根据不同的任务进行微调,在包括命名实体识别、问答等多项自然语言处理任务中取得当时的最优结果。

本文将BERT方法引入古文领域的研究,自行训练中国古文字级别的BERT模型,获得高质量向量表示,随后同样通过微调进行古文断句。我们以双层BiLSTM+CRF作为基线方法,对比BERT预训练+微调方法。本文在算法研究上完成了断句和标点两项任务。为了让本文成果在北京大学国家重大学术文化项目《儒藏》工程(1)http://www.ruzang.com/,北京大学《儒藏》工程主页,教育部哲学社会科学研究重大课题攻关项目。中落地使用,本文提出真实语料环境下的长篇章级别自动断句算法并进行了测试。前人文献中还未曾对此有过报道。

2 模型设计

2.1 基线模型和本文的改进

2.1.1 基线模型框架

本文选择双层BiLSTM+CRF模型作为基线模型。首先将输入的文字转为向量表示,随后通过双层BiLSTM模型提取特征信息,最后将BiLSTM提取的特征通过CRF层解码,得到全局最优标注。较之王博立等的模型[10],本文将门控单元由GRU换为LSTM[15],再加深神经网络的层级,以获得更优的文字特征表示。考虑到Zaremba等[16]已经通过实验证明,将dropout[17]机制引入循环神经网络,可在语言建模等任务上提升LSTM表现,本文还为基线模型添加了dropout机制,以抑制过拟合问题。

2.1.2 BiLSTM模块

单向门控RNN通过对于输入序列的时序处理,虽可以提取更好的特征,但无法关注到下文信息。双向RNN通过对输入序列进行正反两个方向的处理,最终获得某一时刻输入的上下文信息。通过多层RNN叠加可使特征提取进一步优化。LSTM在RNN的基础上引入了门控单元,使其可以更好地存储上下文信息,在一定程度上解决了由于长序列输入带来的梯度消失与梯度爆炸问题。

2.1.3 CRF模块

CRF[18]是无向概率图模型,与有向概率图模型相比, CRF通过使用全局归一代替局部归一,使其可以获得全局最优的结果,避免了序列标注任务中的独立性假设以及可能出现的标记偏执问题。

对于给定输入的标记概率可形式化表示如式(1)所示。

(1)

其中,Z为归一化因子。

这种对输入序列先通过门控RNN单元提取特征,随后用CRF进行解码的模型框架已经在基于序列标注的词性标注、命名实体识别等任务中取得了优异的结果[9]。

2.2 BERT+微调模型

古文断句以字为分割。比如判断句式“……者……也” 中的“者”“也”后面就是明显的断句位置。对于自动化模型来说,如果可通过大量“阅读”古汉语文章,发现文字和文字序列的蕴含特征,就可以通过有指导的训练过程实现自动断句,以及在断句位置添加标点符号。因此通过预训练获得高质量的字向量挖掘古文字的隐含信息是优化古文断句任务的前提。在此基础上通过对目标文本设计训练集,添加并优化分类模型就可以解决特定目标任务。

本文所提出的模型框架共分为两部分: 预训练模块与微调模块。首先参考BERT架构在大量未标记文本上通过文字位置、上下文文字预测任务和上下句连贯性判断任务获得字向量。然后使用带有断句标记以及标点符号的文本进行训练,建构自己的断句和标点模型。

2.2.1 BERT模块

本文采用Google开源的BERT模型实现(2)https://github.com/google-research/bert构造古文字向量。BERT的设计基于Transformer网络结构。Transformer对当前的输入,分别计算出Key,Query和Value向量,并基于上述向量对每个输入使用注意力机制,以获得当前输入与周围语境的关系和自身所包含的信息。通过多层累加和多头注意力机制,不断获取当前输入更为合适的向量表示。由于在输入层加入了位置信息, Transformer可以做到并行高速计算。BERT基于Transformer引入了Input Mask和片段标记,将大量无标注文本转化为有指导的学习问题。Input Mask用于指导模型根据上下文判断当前词是否恰当,片段标记用于判断上下句是否连贯。例如,

CLS连贯性标记: IsNext

输入: 【CLS】北冥【MASK】鱼【SEP】不【MASK】其几千里也【SEP】

CLS连贯性标记: NotNext

2.2.2 微调优化模块

考虑到BERT模型训练的工作量巨大[13],本文先在约1千万字的小规模语料上进行实验,并与多种既有方法进行初步比对。我们尝试了BERT+直接分类输出,BERT+CRF以及BERT+BiLSTM+CRF三种架构,发现更复杂的模型并没有获得更好结果。三者的结果相差不到0.3%, BERT+BiLSTM+CRF与BERT+直接二分类的结果相差不足0.05%。我们遵循最简原则,选择BERT+直接二分类方案,断句模型如图1所示,标点模型如图2所示。

图1 BERT+直接分类输出

图2 BERT+标点输出

2.2.2 微调模块输出

王博立等[10]与张合等[19]选择了考虑文字在句中位置的六元标记作为断句标志。例如,句子“尧让天下于许由,曰: ‘日月出矣,而爝火不息;’”使用六元标记的结果为: [B] [M] [M] [M] [E3] [E2] [E] [S] [B] [E3] [E2] [E] [B] [M] [E3] [E2] [E]。本文对此也进行了相关实验,发现六元标记方法不能提升BERT整体模型的表现,其F1值与使用下文提到的二元标记的模型的F1值相差不到1%。

断句和标点任务重点在于对每个字进行分类。对于断句任务,我们通过上述实验,最终选择最简洁的二元标签组,T={[B],[I]},只对句子的开头和句子中的内容进行标注。上一段提到的句子将被标记为: [B] [I] [I] [I] [I] [I] [I] [B] [B] [I] [I] [I] [B] [I] [I] [I] [I]。

其二,定量与实证法较少,实验法更是罕见.因此,研究应重视定量与实证法,运用真实数据反映存在的问题,为理论发展提供材料.如追踪调查中小学生数据分析发展的进程,运用实验法研究影响统计认知差异的因素.

对于添加标点任务,我们选择的标点集为punc={(,),(。),(?),(!),(、),(:) ,(;)},其对应的分类标记为Tpunc={[B_,],[I_,],[B_。],[I_。],[B_?],[I_?],[B_!],[I_!],[B_、],[I_、],[B_:],[I_:],[B_;],[I_;]}。比如,句子“天之苍苍,其正色邪?”,其标点分类标记为: [B_,] [I_,] [I_,] [I_,] [B_?] [I_?] [I_?] [I_?]。

3 实验结果

3.1 语料介绍

因为无法获得现成语料,本文使用从网上获取的古文语料进行实验。文本类别包括史集、诗集、儒藏、集藏、子藏和道藏。根据实验目的不同,对语料按类和文本数量进行了归并。验证小规模语料情形的《史藏》训练集只包括单一文体类别;验证大规模语料情形的混合训练集使用《史藏》《诗藏》《儒藏》《集藏》和《子藏》五种类别,但将《道藏》排除在外。任何测试集中的文本都不包括在任何一种训练集中,也不会参与任何预训练任务。测试集类别与训练集对应。最后,我们以独立的《道藏》文本验证本文工作泛化能力。为获得更为可靠的结果,我们选用的语料规模,无论是训练还是测试均远大于包括王博立等[10]在内的前人使用的数量。例如,我们的测试集合在千万字量级,而之前的工作测试集合仅数十万字而已。详情如表1所示。

标点任务由于获取的带标点古文文本较为杂乱,多种文本类别并存,标点使用非常不一致,有只有逗号、句号的,也有使用了所有现代标点符号的。我们最终仅使用相对标点质量较高的《道藏》文本进行标点任务的训练和测试。《道藏》标点语料的训练集与测试集规模如表2所示。

表1 断句训练与测试集规模

表2 标点训练与测试集规模

我们从多个互联网来源获取古文语料,包括殆知阁(3)http://www.daizhige.org/等。虽然语料规模大,但绝大部分都是繁简体混合的。古文繁简体转换非常困难,目前尚无法高准确率自动化进行。相较于纯粹的繁体或简体文本,繁简混合实际上给工作带来了更大的难度,所以我们保留文本原始形态,未作任何处理。

对于断句任务,基于不同的训练集划分与标签集我们总计训练测试了6个模型: ①使用混合训练集的BERT+微调模型(以下简称BERT_A); ②使用混合训练集的基线模型(以下简称R-CRF_A); ③使用混合训练集和六元标记的基线模型(R-CRF_A6); ④仅使用《史藏》训练集的BERT+微调模型(以下简称BERT_H); ⑤仅使用《史藏》的基线模型(以下简称R-CRF_H); ⑥仅使用《史藏》数据和六元标记的基线模型(R-CRF_H6)。

对于标点任务,我们只对比了BERT+微调模型与BiLSTM+CRF模型。

3.2 测评标准

对于模型的表现,我们使用根据准确率(以下简称P)和召回率(以下简称R)计算的F1值作为评价标准:即

其中,TP为预测正确的断句标志数量,FP为预测错误的断句标志数量,FN为未预测出的断句标志数量。

断句任务中的BERT_A模型只采用B、I两种标签。上述公式中TP统计的是句子开始标记,即B标签。使用六元标记的各基线模型TP统计的是[B]和[S](单字成句标记)。

标点任务中使用微平均作为衡量指标,计算公式如式(5)~式(7)所示。

因为对每种标点使用二元标注集合,所以上述公式中TP统计的是各种标点的开始符号,比如逗号的开始符号[B_,]。

3.3 实验结果与分析

3.3.1 自动断句任务

真正的古文正文由长串文字序列组成,无法直接用来测试断句。测试数据的构造方法文献[10]并未提及。考虑到门控RNN虽在一定程度上解决了长距离依赖问题,但如果序列长度过长,计算依然是不可能的。为不失一般性,我们将连续的几句或十几句合并为不超过64个字的小段落作为测试对象(参数选择理由参见本文第4节)。不同模型的具体结果如表3~表5所示。

在断句任务的任何一种测试方法中,BERT_A是所有模型中表现最优者,无论准确率、召回率还是F1值均有更好的表现。文本类别对结果几乎没有影响。随着不同类别的文本加入训练,实验难度增加,模型能力是否随之增强需要实验予以证明。我们分别设置了小规模单一类型文本测试集与大规模复合类别文本测试集分别进行实验。与BERT_H相比,可以看出,随着训练语料类别的增多、语料规模的增加,训练得到的模型效果也越好。在从未参与任何训练的《道藏》测试集上,BERT模型依然显示了较好的泛化能力。

表3 单一文本类别小规模语料《史藏》测试结果

表4 复合文本类别大规模语料混合测试结果

表5 模型泛化能力《道藏》测试集结果

与二元标注的BiLSTM+CRF基线模型相比,在大规模复合类别文本测试集上,使用小规模语料的《史藏》训练集的BERT_H比R-CRF_H提升近10%,即使R-CRF_A训练使用混合训练集,也依然与之无法比较。由此可见,本文提出的方法在断句任务上可以获得更优结果。即使训练语料较小也可以学到更强的泛化能力。

实验表明,在六元标记模式下,分类任务由二分类变为难度更大的多分类任务,然而对基线模型的正确率提升有限。特别是混合训练集情形,由于文体丰富、词汇量较大,六元标记模式效果还更差一些。随着更多先验知识的引入,召回率却提升明显。但总体上依然与BERT+微调方案存在差距。

3.3.2 自动标点任务

如前所述,限于条件,只使用了标点质量相对较高的《道藏》进行了训练和测试。测试集同样由字符总数不超过64的若干连续句子组成。本文模型与基线模型的结果对比如表6所示。

表6 《道藏》标点测试集结果

本文模型结果较BiLSTM+CRF模型结果,F1值提升了12.15%。自动标点任务结果与断句任务相比还存在一定差距。一方面,训练语料规模过小,另一方面语料中标点质量较差,规则不统一、随意性也较强。

4 方法的实际应用

4.1 篇章断句

在最近的古文断句研究论文中,都将其作为序列标注问题进行处理。多数序列标注问题,如分词或命名实体识别等任务,输入句子的长度一般不会过长。由于古文既没有断句,亦没有段的概念。若自动断句技术投入使用,就需要处理古籍中动辄数千字的超长段落,而且输入长度很难固定。BERT模型随着序列长度的增长,所需要训练时长成二次方增长[13],硬件要求难以满足。

通过对大规模训练语料的统计,我们发现在这么大的古文训练集中,超过99%的句子长度不会超过21个字,具体分布详情见图3。基于此,我们最终决定将一个文本片段(并非真正意义上的段落)的最大长度限制在64个字以内。这就意味着一次处理长度为64的序列,最少也可以切分为2~3句。在此基础上,我们提出滑动窗口式古文断句方法。每次模型处理长度不超过64字的片段,但只取前一或两个断句标记前的部分输出,剩余的部分归并到后续语料中再切割出64个字组成处理片段,以保证最后一个或几个断句标记不受不完整输入的影响。反复执行这一动作,直到全文文本处理完毕。解码时不回溯尝试其他可能的选择,这样既可以保证断句质量,也确保了预测速度。

图3 不同句长所占比例

4.2 应用示例

以下示例段落选自《道藏—吕祖三尼医世说述管窥》,本文不包括在任何训练语料中。原文及输出结果如下(缺失和错误的标记以脚注的形式指出)。

【原文及标点】要知天地无心,非块然两大也,言其自然之道耳!作善而百祥随之,作不善而百殃随之,皆自然之道也。而致殃致祥之柄?乃自人操之而天随之,是可见人有转移造化之力矣。其故何哉?

【断句结果,断句位置显示句号】要知天地无心。非块然两大也。言其自然之道耳。作善而百祥随之。作不善而百殃随之。皆自然之道也。而致殃致祥之柄。乃自人操之而天随之。是可见人有转移造化之力矣。其故何哉。

【标点结果】要知天地无心,非块然两大也,言其自然之道耳。(4)原为“!”,“。”应该也可以作善而百祥随之,作不善而百殃随之,皆自然之道也。而致殃致祥之柄,(5)原为“?”,但另一专家标注版本同“,”乃自人操之,(6)多加“,”,但似乎并不为错而天随之。(7)此处应为“,”,“。”不正确是可见人有转移造化之力矣。其故何哉?

5 结论

本文使用BERT+微调模型解决古文断句与标点问题,在三类测试集上与BiLSTM+CRF基线模型进行对比,文本模型均获得了更佳表现。主要结论如下:

(1) BERT+微调模型基本不受古文训练语料类别的影响。但更多类别、更大数量的训练集依然可以提升模型表现。

(2) BERT+微调模型在训练集受限的情况下依然有良好表现,而且泛化能力出色。只要保证基本的语料规模,模型就可以处理全新文本。

从这两点分析以及断句结果看,BERT模型应该是学到了中国古文句读的精髓。本文方法与基线模型对比,还进一步减少了人工特征设计工作。依靠滑动窗口式的长篇章段落处理方法,本文的工作已经可以正式投入古籍研究工作,正式成为古籍研究者的人工智能助手。

本文基于Tensorflow[20]的相关代码和模型已经开源发布在Github上(8)https://github.com/ToolsForAncientChineseText/Text-segmentation。从本文实验结果看,在多数情况下,直接使用我们提供的模型即可获得较好结果。

猜你喜欢

断句标点语料
基于归一化点向互信息的低资源平行语料过滤方法*
标点可有可无吗
《辽史》标点辨误四则
小小标点真厉害
“夏译汉籍”中的断句情况考察
濒危语言与汉语平行语料库动态构建技术研究
“断句” “密码”费人解(二则)
对外汉语教学领域可比语料库的构建及应用研究
——以“把”字句的句法语义标注及应用研究为例
妙用标点巧断句
有趣的标点