一种基于循环神经网络的古文断句方法

您所在的位置:网站首页 九头鸟古文断句 一种基于循环神经网络的古文断句方法

一种基于循环神经网络的古文断句方法

2023-10-21 21:50| 来源: 网络整理| 查看: 265

数千年的中华文明留下浩如烟海的古籍, 这些古籍对现代人了解古代历史、社会和文化发展具有重要的价值。但是, 古汉语中没有标点符号。古人著书时, 通常不对句子停顿进行标记, 而是由读者阅读时自行标记, 即“ 句读” , 这给现代人阅读和研究古籍带来很大的困难。利用最新的自然语言处理技术, 对大量未断句的古文进行自动断句, 不仅能帮助人们克服阅读障碍, 也是进一步对古籍文本进行处理(如古文分词等)所必要的前期工作, 对于古汉语研究、古籍整理与文史知识挖掘具有重要的 意义。

1 相关工作

黄建年等[1]采用计算机辅助的方法, 从已断句的古文中提取句子切分的特征模式, 利用这些特征模式构造断句规则, 采用正则表达式替换的方法, 进行古文断句。实验结果表明, 上下文特征对古文断句具有重要的作用, 但这种基于规则的方法并不适用于大规模古籍处理。

陈天莹等[2]最早采用统计方法进行古文断句, 他们将古文断句看成一个分类问题, 提出一种基于上下文N-gram模型的古文断句方法。该方法利用训练语料上的频率统计信息, 计算文本中各处需要断句的概率, 并提出一种数据平滑算法。

近年来的研究多将古文断句视为与中文分词类似的序列标注问题, 采用条件随机场(conditional random field, CRF)[3]对古文断句问题进行建模, 利用手工设计的特征模板, 在规模较小的语料上训练断句模型。张合等[4]采用手工设计的基于上下文汉字的特征模板, 张开旭等[5]引入互信息(mutual infor- mation)和t-测试差(t-test difference)两个统计量作为特征, Huang 等[6]引入汉字音韵信息(现代汉语拼音、反切、广韵)作为特征。

这些研究表明, 采用序列标注模型, 并以上下文信息作为特征, 能有效地进行古文断句, 但存在明显不足: 1) 实验使用的数据集规模均较小, 未在大规模古籍语料上开展实验; 2) 受限于固定的特征模板, 特征数量少, 仅能利用一个固定的较小窗口内局部上下文信息, 并且一些额外的信息(如广韵)难以涵盖古籍中出现的所有汉字; 3) 特征模板的设计完全依赖于人的先验知识, 若想进一步提高模型的断句准确率, 需要通过特征工程进行大量的实验, 选择新的特征。

Wang 等[7]提出一种基于神经网络语言模型的古文断句方法, 但该方法未达到传统条件随机场模型的断句效果, 并且由于在解码过程中需要反复调用神经网络语言模型计算概率得分, 因此断句速率较慢, 难以达到实际应用的要求。

本文提出一种基于循环神经网络(recurrent neural network, RNN)[8]的古文断句方法。该方法通过神经网络自动学习上下文的特征表示, 无需人为选择特征。我们在大规模古籍语料上开展实验, 结果表明本文方法能取得比传统方法更高的F1值。

2 基于循环神经网络的古文断句方法

本文将古文断句视为一个典型的序列标注问题, 采用“ 端到端” (end-to-end)的思想, 根据输入的汉字序列, 直接利用神经网络计算标注的条件概率, 并进一步引入状态转移概率和长度惩罚, 通过beam search算法进行解码。

2.1 标注集

古文断句可以视为一个基于字的序列标注问题: 为给定的未断句的古文文本中的每个汉字标注标签。本文将训练集和测试集中的 6 种标点(。?!, ; :)视为断句的标记, 而忽略文本中的其余标点。

本文采用与文献[4]相同的六元标注集 T ={B, M, E3, E2, E, S}。若句子长度为 1, 即仅由一个汉字构成, 则该汉字标记为 S; 若句子长度大于 1, 则将句子开头标记为 B, 将句子结尾标记为 E; 若句子长度大于 2, 则将句子结尾的倒数第 2 个汉字标记为 E2; 若句子长度大于 3, 则将句子结尾的倒数第 3 个汉字标记为 E3; 若句子长度大于 4, 则将句子中其余汉字标记为M。例如, “ 曰: ‘ 朕此衣已三浣矣。’ ” 一句对应的汉字序列为“ 曰 朕 此 衣 已 三 浣 矣” , 正确的标签序列为“ S B M M M E3 E2 E” 。

我们采用这种六元标注集, 而非传统中文分词任务所采用的四元标注集{B, M, E, S}, 主要考虑句子长度比词语长度更长, 而古汉语句子末尾的几个字常常有助于判别句子的边界(如“ 乎” “ 也” )。

测试时, 我们在标注为E和S的汉字后添加断句标记。

2.2 模型

RNN 是一种常见的深度神经网络模型, 由于能有效地利用上下文信息, 广泛应用于序列标注任务中。传统的 RNN 只能沿迭代方向利用单侧的历史信息, Schuster等[9]提出双向循环神经网络(bi-directional recurrent neural network), 能同时利用正向和反向的上下文信息。

本文提出的断句模型采用基于 GRU 的双向循环神经网络, 结构如图1所示。

图1Fig. 1Figure OptionViewDownloadNew Window 图1 基于GRU的双向循环神经网络断句模型结构Fig. 1 Architecture of bi-directional GRU-RNN model for ancient Chinese sentence segmentation

模型的输入为汉字序列(即未断句的古文段落)x1, x2, …, xN, 输出为标签的概率:

$o_{t}^{[i]}=P({{y}_{t}}=i|{{x}_{1}}{{x}_{2}}\ldots {{x}_{N}})$, (1)

其中, i为标注集T中的标签。

1) 在输入层, 汉字序列中的每个汉字xt首先被映射为对应的字向量et, 作为各个时刻循环神经网络的输入。

2) 在隐层, 双向循环神经网络根据当前时刻的输入 et 以及前一时刻的正向隐状态${{\vec{h}}_{t-1}}$和后一时刻的反向隐状态${{\overset{\scriptscriptstyle\leftarrow}{h}}_{t+1}}, $. 分别计算当前时刻的正向隐状态${{\vec{h}}_{t}}$和反向隐状态${{\overset{\scriptscriptstyle\leftarrow}{h}}_{t}}$:

${{\vec{h}}_{t}}=f({{e}_{t}}, \ {{\vec{h}}_{t-1}})$, (2)

${{\overset{\scriptscriptstyle\leftarrow}{h}}_{t}}=f({{e}_{t}}, \ {{\overset{\scriptscriptstyle\leftarrow}{h}}_{t+1}})$, (3)

其中, f是一个非线性函数, 根据给定的et和ht-1计算ht。我们采用 Cho 等[10]提出的 GRU 单元来表示f。GRU采用以下方式计算ht:

${{r}_{t}}=\text{sigmoid}({{W}_{\text{r}}}{{e}_{t}}+{{U}_{r}}{{h}_{t-1}}+{{b}_{\text{r}}})$, (4)

${{\tilde{h}}_{t}}=\text{tanh}({{W}_{\text{h}}}{{e}_{t}}+{{U}_{\text{h}}}({{r}_{t}}\odot {{h}_{t-1}})+{{b}_{\text{h}}})$, (5)

${{z}_{t}}=\text{sigmoid}({{W}_{\text{z}}}{{e}_{t}}+{{U}_{\text{z}}}{{h}_{t-1}}+{{b}_{\text{z}}})$, (6)

${{h}_{t}}={{z}_{t}}\odot {{h}_{t-1}}+(1-{{z}_{t}})\odot {{\tilde{h}}_{t}}$, (7)

其中, Wr, Wh, Wz, Ur, Uh和Uz为权重矩阵, br, bh和bz为偏置, rt和zt分别为“ 重置门” 和“ 更新门” , ⊙表示逐元素(element-wise)相乘。算法实现时, 采用hard_sigmoid函数, 近似拟合上述sigmoid函数, 以降低模型的计算复杂度:

$\text{hard}\_\text{sigmoid}(x)=\left\{ \begin{array}{* {35}{l}} 0, & x< -2.5, \\ 0.2x+0.5, & -2.5\le x< 2.5, \\ 1, & x\ge 2.5\ \\\end{array} \right.$ (8)

3) 在输出层, 正向隐状态${{\vec{h}}_{t}}$和反向隐状态${{\overset{\scriptscriptstyle\leftarrow}{h}}_{t}}$以softmax函数的形式得到输出概率:

$o_{t}^{[i]}=\frac{\text{exp}(W_{\text{\vec{h}o}}^{[i]}{{{\vec{h}}}_{t}}+W_{\text{\overset{\scriptscriptstyle\leftarrow}{h}o}}^{[i]}{{{\overset{\scriptscriptstyle\leftarrow}{h}}}_{t}}+{{b}_{\text{o}}})}{\mathop{\sum }_{j\in T}\text{exp}(W_{\text{\vec{h}o}}^{[j]}{{{\vec{h}}}_{t}}+W_{\text{\overset{\scriptscriptstyle\leftarrow}{h}o}}^{[j]}{{{\overset{\scriptscriptstyle\leftarrow}{h}}}_{t}}+{{b}_{\text{o}}})}$, (9)

其中, ${{W}_{\text{\vec{h}o}}}$和${{W}_{\text{\overset{\scriptscriptstyle\leftarrow}{h}o}}}$为权重矩阵, $W_{\text{\vec{h}o}}^{[i]}$表示${{W}_{\text{\vec{h}o}}}$的第i行, $W_{\text{\overset{\scriptscriptstyle\leftarrow}{h}o}}^{[i]}$表示${{W}_{\text{\overset{\scriptscriptstyle\leftarrow}{h}o}}}$的第i行, bo为偏置。

2.3 训练

模型的训练目标是最大化对数似然, 即对于给定的一组训练样本(x, y), 模型的训练目标是最小化如下损失函数:

$\text{Loss}(\theta )=-\underset{i}{\mathop \sum }\, \text{log}(\text{P}({{y}_{i}}\text{ }\!\!|\!\!\text{ }{{x}_{i}}, \ \theta ))$。 (10)

本文采用循环神经网络语言模型的形式(即仅用正向的GRU循环神经网络, 并将输出层替换为预测输入序列中的下一个字, 利用原始的训练语料(带标点的古文), 对字向量和GRU单元的参数进行预训练。

模型的训练过程中采用GPU进行并行化加速, 并利用 mini-batch 梯度下降法, 采用 RMSProp 算法[11]平滑梯度, 并引入两种学习率动态调整策略。

1) Gradient renormalize[12]: 对梯度的模进行约束, 若梯度的模大于一定的阈值(实验中取 5), 则将其限制到该阈值。引入此机制的目的在于避免模型训练初期步长过大, 下降过快, 从而过早收敛。

2) Early stopping[13]: 在训练过程中, 若一轮迭代中, 模型在验证集上的准确率没有提高, 则按一定的衰减因子(实验中取0.7)动态减小学习率。

2.4 解码

对于一个给定的序列, 循环神经网络输出层输出的是各个时刻标注的条件概率(即标注集上的概率分布)。在测试时, 模型需要根据各个时刻的条件概率进一步输出最终的标签序列。本文采用两种方法得到最终的标签序列, 并对这两种方法的性能进行比较。

1) 贪婪法。在每一时刻均直接输出当前时刻条件概率最大的标签:

${{\hat{y}}_{t}}=\underset{j\in T}{\mathop{\text{argmax}}}\, o_{t}^{[j]}$, (11)

其中, T 为标注集。这种方法假定输出序列中的各个标签之间是相互独立的, 由于不考虑标签间的依赖关系, 因此可能会输出非法的标签序列。

2) 解码法。构造一个关于汉字序列x1:N和标签序列y1:N的目标函数s(x1:N, y1:N)。对于给定的输入序列x1:N, 解码的过程即搜索得分最高的标签序列y1:N, 即

${{\hat{y}}_{1:N}}=\text{arg}\underset{{{y}_{1:N}}}{\mathop{\text{max}}}\, \text{s}({{x}_{1:N}}, {{y}_{1:N}})$。 (12)

若目标函数中仅考虑神经网络输出概率, 即

$s({{x}_{1:N}}, \ {{y}_{1:N}})=\underset{i=1}{\overset{N}{\mathop \sum }}\, o_{i}^{[{{y}_{i}}]}$, (13)

则搜索过程退化为前述贪婪法。为了克服贪婪法的不足, 可以在目标函数中加入标签间的状态转移概率, 即

$s({{x}_{1:N}}, {{y}_{1:N}})=\underset{i=1}{\overset{N}{\mathop \sum }}\, (o_{i}^{[{{y}_{i}}]}+\alpha \cdot {{A}_{{{y}_{i-1}}{{y}_{i}}}})$, (14)

其中, Ajk表示从标签j到标签k的状态转移概率, a为状态转移概率得分项的权重。

实验中发现, 引入状态转移概率后, 召回率较低。我们进一步采取与文献[7]相似的做法, 在目标函数中引入句长惩罚(鼓励更精细的断句), 即

$s({{x}_{1:N}}, \ {{y}_{1:N}})=\underset{i=1}{\overset{N}{\mathop \sum }}\, (o_{i}^{[{{y}_{i}}]}+\alpha \cdot {{A}_{{{y}_{i-1}}{{y}_{i}}}}+\beta \cdot C({{y}_{1:N}}))$, (15)

其中, β 为句长惩罚项的权重, C(y1:N)表示按y1:N断句得到的句子的数量, 即

$C({{y}_{1:N}})=\underset{i}{\mathop \sum }\, l({{y}_{i}})$, (16)

$l({{y}_{i}})=\left\{ \begin{array}{* {35}{l}} 1, \ \ \ \ \ {{y}_{i}}=E\ \ {{y}_{i}}=S, \\ 0, \ \ \ \\ \end{array} \right.$ (17)

解码过程采用 beam search 算法, 解码过程中每一步保留 N-best 结果。与文献[7]不同, 本文方法在解码过程中循环神经网络仅需在输入序列上迭代一次, 因此计算复杂度大大降低。

3 实验3.1 实验设置

为进行对比, 本文采用与文献[7]相同的训练集、开发集和测试集。语料主要来自至善繁体汉语语料库①(① http://cloudtranslation.cc/corpus_tc.html)、汉籍电子文献资料库②(② http://hanchi.ihp.sinica.edu.tw/ihp/hanji.htm)(简称汉籍)和“ 是何年” 网站③(③ http://www.4hn.org/)。各数据集的基本情况如表1所示。

表1Table 1表1(Table 1) 表1 古文断句实验数据集规模及来源 Table 1 Details of datasets for ancient Chinese sentence segmentation数据集规模字表大小内容来源训练集2.37亿字23905“ 至善语料库” 中的繁体古籍部分至善语料库开发集1万字1890《阅微草堂笔记》(卷一)汉籍测试集132万字6188《宾退录》、《朝野佥载》、《南部新书》、《楚辞补注》和《中吴纪闻》“ 是何年” 网站测试集236万字5755《阅微草堂笔记》(卷二至卷二十四)和《敬斋古今黈》汉籍, “ 是何年” 网站 表1 古文断句实验数据集规模及来源 Table 1 Details of datasets for ancient Chinese sentence segmentation

我们采用精确率(P)、召回率(R)、F1 值以及准确率(A)作为评价模型断句效果的指标:

$P=\frac{\text{TP}}{\text{TP}+\text{FP}}$, (18)

$R=\frac{\text{TP}}{\text{TP}+\text{FN}}$, (19)

F1$=\frac{2\cdot P\cdot R}{P+R}$, (20)

$A=\frac{\text{TP}+\text{TN}}{\text{TP}+\text{FP}+\text{TN}+\text{FN}}$, (21)

其中, TP为模型输出的正确的断句标记的数量, FP为错误的断句标记数量, FN为错误的不断句标记数量, TN为正确的不断句标记数量。TP+FP+ TN+FN等于语料中的总字数。

本文提出的断句模型采用的词表规模为 21383字, 字向量和循环神经网络隐层维度均设置为 256, 初始学习率设置为0.001, 每个batch大小为512个序列。

对比实验采用以下两个基线系统。

1) 文献[7]提出的基于神经网络语言模型的古文断句方法, 包括CLM6和CLM1两种语言模型。

2) 文献[4]提出的基于条件随机场模型和上下文字特征的古文断句方法。我们采用开源工具CRF++①(① http://taku910.github.io/crfpp/)重现该方法, 去除频率小于 3 的特征, 其余参数均采用工具的默认设置, 特征模板和训练方法与文献[4]一致。

3.2 参数选择

本文提出的断句模型在输出层进行解码时包含3 个参数: 状态转移概率权重a、长度惩罚权重β 和解码过程中beam的大小。我们通过3组实验确定3个参数的取值, 3组实验均在开发集上进行。

1) 固定beam的大小为 50, 引入状态转移概率, 不引入长度惩罚, 即固定β =0, 调整a, 以提高准确率。实验结果如图 2 所示, 随着a的增大, 召回率逐渐增大, 精确率、准确率和 F1 值先增大后减小。我们选择使得准确率最高的a=1.4作为后续实验的默认设置。

图2Fig. 2Figure OptionViewDownloadNew Window 图2 状态转移概率权重对断句效果的影响Fig. 2 Performances of proposed methods on different weights of transition score

2) 固定beam的大小为 50, 引入状态转移概率和长度惩罚, 固定α =1.4, 调整β , 以提高 F1 值。实验结果如图 3 所示, 随着 β 的增大, 精确率逐渐减小, 召回率逐渐增大, F1 先增大后减小。我们选择使得 F1 值最高的 β =0.3 作为后续实验的默认设置。

图3Fig. 3Figure OptionViewDownloadNew Window 图3 长度惩罚权重对断句效果的影响Fig. 3 Performances of proposed methods on different weights of length penalty

3) 固定状态转移概率权重a=1.4以及长度惩罚权重β =0.3, 测试 beam 的大小对断句速度和断 句效果的影响。实验结果如图 4 所示, 随着 beam 的增大, 断句的效果不断提高, 但时间复杂度也呈近似线性增大。当 beam 大于 50 时, 增大 beam 对模型断句效果的提升并不明显。因此, 综合考虑断句效果和断句速度, 在实际应用时设置 beam 的大小为50。

图4Fig. 4Figure OptionViewDownloadNew Window 图4 解码过程中beam的大小对断句速度和断句效果的影响Fig. 4 Speed and performances of proposed methods on different size of beam in decoding3.3 模型对比实验

本文分别在测试集 1 和测试集 2 上进行断句性能对比实验。基线系统包括文献[7]的 CLM6, CLM6+0.65LP和 CLM1+0.65LP, 以及对文献[4]工作的重现(CRF)。实验结果如表2所示。GRU-RNN为文提出的基于GRU的双向循环神经网络断句模型, 其中 GRU-RNN 为采用贪婪法的系统, GRU-RNN+1.4ST 为状态转移概率权重取 1.4, 但不进行长度惩罚的解码法系统, GRU-RNN+1.4ST+0.3LP为状态转移概率权重取 1.4、长度惩罚权重取 0.3的解码法系统。

表2Table 2表2(Table 2) 表2 断句效果对比实验结果 Table 2 Performances of different models on two test sets模型测试集1测试集2PRF1PRF1CLM60.78220.57670.66390.72830.63640.6793CLM6+0.65LP0.74920.67270.70890.68610.72050.7029CLM1+0.65LP0.72120.73250.72680.63930.76910.6982CRF0.81630.66170.73090.78560.71000.7459GRU-RNN0.75450.67730.71380.73420.63290.6798GRU-RNN+1.4ST (beam=50)0.78510.72020.75130.75980.71870.7387GRU-RNN+1.4ST+0.3LP (beam=50)0.76060.74580.75310.73500.75330.7440GRU-RNN+1.4ST+0.3LP (beam=200)0.76290.74750.75510.73810.75640.7472

说明: 加粗的数值为各指标中的最大值。

表2 断句效果对比实验结果 Table 2 Performances of different models on two test sets

从表 2 可以看出, 本文提出的基于 GRU 的双向循环神经网络模型能有效地进行古文断句, 引入状态转移概率和长度惩罚进行解码能有效地提高断句效果。

与已有的工作相比, 本文提出的断句模型性能明显优于文献[7]所采用的基于神经网络语言模型的方法以及以文献[4]为代表的基于条件随机场模型和手工设计特征模板的方法。这说明双向循环神经网络能更有效地利用上下文信息进行断句。

4 总结与展望

本文提出一种基于 GRU 的双向循环神经网络断句模型, 能有效地利用上下文信息进行古文自动断句。与传统 CRF 模型相比, 本文提出的断句方法利用深度神经网络自动学习特征表示, 无需人工设计特征模板。与采用神经网络语言模型的方法相比, 本文的断句模型更为简洁高效, 解码过程中神经网络仅需在输入序列上遍历一次, 且能有效地利用双向的上下文信息。实验结果表明, 本文的方法能有效地进行古文自动断句, 断句效果超过采用条件随机场模型的传统方法和采用神经网络语言模型的方法。

未来工作中, 我们将考虑从以下几方面进一步提高模型的断句效果。

1) 引入正则化措施或多模型融合, 提高模型的鲁棒性, 避免模型过度拟合。在训练目标的损失函数中引入L1和L2正则项, 或在输入层、隐层和输出层分别加入dropout机制[14, 15, 16, 17]。

2) 借鉴文献[18]和[19]中的方法, 在循环神经网络的训练目标中直接引入状态转移概率得分, 将CRF 模型与循环神经网络相结合, 从而更有效地利用标签间的依赖关系。

3) 借鉴文献[7]的方法, 训练朴素贝叶斯分类器对语料进行自动分类, 分别训练不同年代不同文体的断句子模型, 断句时采用自适应算法, 自动选择适当的子模型进行断句。

另外, 本文着眼于古文断句, 若要真正方便现代人阅读和理解古文, 还需要将断句标记进一步区分为不同的标点符号, 这也是下一步的研究内容。

The authors have declared that no competing interests exist.



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3