王 娟,李 宁,姜雨彤,田英爱
(北京信息科技大学网络文化与数字文化传播重点实验室,北京 100101)
文档结构识别基于对文档中单元角色的判断,实现流式文档的智能化理解,这在文档自动排版和优化、信息检索、智能问答系统等领域均有重要作用。中外已存在许多关于流式文档结构识别的研究,在这些已有的研究中,根据研究方法的不同可以分为基于规则、语法、机器学习以及深度学习的方法。Han等[1]结合文档格式特征及内容特征,定义模板规则,进而确定文档单元的语义角色。Geng等[2]使用基于规则的方法识别文档中参考文献的著录项,之后使用基于决策树的方法判断参考文献的类型标志。Lei等[3]分析流式文档的特点,基于条件随机场构建文档结构识别模型,实验结果表明该算法能够较好地识别论文类型的文档,识别的单元角色种类较丰富,但其依赖手工特征,局限性较强。张真等[4]将文档结构识别任务看成序列标注任务,提出基于神经网络构建文档结构识别模型,该算法提高了论文类型文档结构识别准确率,但对其他类型文档结构识别效果不理想。近年来,在自然语言处理(natural language processing, NLP)研究领域,序列标注任务有大量成熟的研究成果。为能够同时利用不同算法的优势,很多学者提出神经网络与机器学习算法结合的混合算法思想,从而得到最优的序列标注模型。Kadari等[5]首先将神经网络和条件随机场结合起来,构建双向长短时记忆-条件随机场(bi-directional long short-term memory-conditional random field,Bi-LSTM-CRF)的模型,这种混合的序列标注模型在NLP领域的语义角色标注、命名识别等诸多任务上取得显著成绩,因而逐渐取代单一的基于深度学习的模型成为主流的序列标注模型。由于Bi-LSTM自身存在缺陷,Che等[6]提出基于双向门控循环单元和条件随机场(bidirectional gated recurrent unit-conditional random field,BiGRU-CRF)结合的混合序列标注模型解决中文分词序列标记任务,实验证明该混合模型比LSTM神经网络更容易训练,效果最佳。与此同时,由于深度学习中的卷积神经网络能够获得局部特征,Guillaume等[7]将双向长短期记忆单元、条件随机场和卷积神经网络三者结合,构建混合序列标注模型,在命名实体识别领域取得很好的效果,但该模型不足之处在于,输入长度的增加会导致性能下降。注意力机制的引入有助于克服这一缺点,同时注意力机制能避免神经网络模型中输入顺序不合理,计算效率较低等问题[8]。在智能问答领域,Nie等[9]构建答案选择模型,加入注意力机制,使其能够重点关注答案的某些部分,并取得较好的效果。
目前,特殊设计的文档结构识别模型可以识别特定的文档类型,但是对多种类型文档结构识别效果不好。为解决多类型文档结构识别问题,现借鉴相互独立、完全穷尽(mutually exclusive collectively exhaustive,MECE)原则[10]和Rebsamen等[11]提出的方法,将不同类型或等级的数据分割视为单独的任务,即把多类型文档结构识别任务通过文档分类的方式将其分解成若干个单类型文档结构识别的子问题,每一个子问题都是一个小规模的局部模型。因此,多类型文档分治模型的核心思想是构建文档分类器实现文档的自动分类,进而将该问题分解成单类型文档结构识别。对于文档分类,分为有监督学习的分类和无监督学习的聚类[12]。Twinandilla等[13]使用K-means方法预先定义聚类中心和聚类个数,通过调整损失函数,将文档对象基于文档语义信息划分成多个互不相交的簇,目标是正确地根据主题对文档进行聚类,K-means算法思想简单且效果较好,但聚类个数需要预先确定。Zendrato等[14]使用改进的X-means算法,用户只需指定聚类个数所属的范围,算法会自动选择最优的K值。文档聚类方法的输入特征大部分是文档的文本信息,往往忽略文档结构信息。冯健等[15]采用划分聚类方法,基于文档对象模型结构进行文档聚类,分析钓鱼网页文档,实验表明该方法准确率较高,效果较好。
现拟使用语义信息和结构信息来计算相似度,但为了尽可能减少主观干预,未采用具有噪声的基于密度的聚类方法(density-based spatial clustering of applications with noise,DBSCAN),而采用X-means算法进行文档分类,实现了将大规模文档集合分解成若干个小规模文档集合的目标后,尝试将双向门循环单元和条件随机场结合的混合深度学习模型应用到文档结构识别领域,并引入注意力机制,构建各个小规模文档集合的单类型文档结构识别模型,实现多类型文档的结构识别的目标。
聚类算法将文档聚类成簇后,针对每个簇,分析其语义,总结出对应的段落角色集合,由于不同簇之间文档类型差异较大,分析而得的文档段落角色集合各不相同。随后根据聚类得到的簇,分别构建文档结构识别模型。
每类的输出层,由统计文档类别中存在的段落角色种类定义。当前语料库中段落角色集合为PC={份号、发文机关标志、发文字号、标题、发文机关、发文日期、正文标题、一级标题、二级标题、抄送机关、印发机关与日期、表格、表题、题目、作者、三级标题、班级、图题、图片、文本段落、导师姓名、落款日期、作者单位、邮箱、中文摘要、中文关键词、英文摘要、英文关键词、公式、程序代码、封面题目、副题目、四级标题、引言内容、日期内容、机构、目录内容、说明}。初始K值为1~8,最终模型书目为K=4。文档结构识别模型各参数设置及输出层定义如表1所示。
表1 簇类-模型参数设置及输出层定义
划分聚类算法是最基础的聚类算法,该算法通过数据间简单的相似度计算即可将数据对象分组。该算法流程如图1所示。主要包括三部分内容,首先对输入数据进行特征提取和特征选择,其次是数据对象相似度计算,最后是根据相似度结果将数据对象进行分组。该方法最终将数据对象划分到不同的类别或簇中,同一个簇中数据对象集合具有较高的相似度,而不同的簇中数据对象差别较大。
图1 聚类算法基本流程
传统的K-means 聚类算法是划分聚类中较为基础的算法,对于大规模的数据集有较好的聚类效果,其算法复杂度为O(mnkR)。其中,m为数据特征维数,n为数据规模,k为指定的聚类簇个数,R为总体迭代次数。虽然K-means 聚类算法高效简单,但也存在一定的局限性:算法中聚簇个数需要预先指定,同时每一轮迭代计算开销较大且很容易陷入局部最优解,鉴于此,文本选择使用传统K-means 的改进算法即X-means 聚类算法。
X-means算法的主要思路是先对文档集合实现聚类,针对每一个文档聚类簇继续进行K=2的聚类。具体步骤如下。
(1)选择特征集。选取的特征不同于其他文档聚类方法,选取格式结合语义的特征集合完成文档聚类,以实现对文档按照领域及书写格式划分的目标。
(2)文档完成初始聚类。语料中的每行特征集合数据均代表一篇文档,从下限值Kmin开始,从N个数据对象中随机选择Kmin个数据对象作为初始聚类中心,计算其余数据对象与聚类中心的欧式距离,根据欧氏距离的值,将数据对象分配到与其距离最短的聚类簇中,计算每一个聚类簇的数据对象的均值,作为新的聚类中心,然后计算误差平方和(the sum of squares due to error,SSE)评价当前聚类结果,若SSE发生了变化,则迭代计算欧式距离重新归类并计算新的聚类中心,若SSE未发生变化保持稳定,则当前的聚类算法结束,输出聚类结果。
(3)初始聚类完成后,针对每一个分类结果,完成二分聚类,得到最优的聚类结果。本着各文档聚类簇之间尽可能分开,各文档聚类簇本身尽可能紧凑的原则,从范围[Kmin=1,Kmax=10]内找到最优的聚类数K,即:针对每一个聚类簇,完成二分聚类,计算贝叶斯信息准则(Bayesian information criterion,BIC)得分,决定是否进行二分聚类,如果K值比指定的Kmax大或者不存在可分裂的聚类中心点,那么算法停止,否则迭代继续分裂聚类。最终,得到最优聚类数K和最优的聚类结果。在得到的聚类结果中,文本会自动给数据维度后增加一个新列Cluster{Cluster1, Cluster2,…},用来标注聚类类别,以支持后续的处理。
欧式距离计算公式如(1)所示。
(1)
式(1)中:data为数据对象;j为第i个聚类中心;m为数据特征维度;dataj、Ctij为data数据对象和Cti聚类中心的第j个属性值。
此外,聚类结果由SSE评价,公式为
(2)
该评价方法计算的是data数据对象和Cti聚类中心对应点误差的平方和,SSE值越趋近零,越说明模型拟合得更好,数据预测结果越好。
选择X-means 算法完成文档聚类有如下优点。
(1)在算法初始时不预先给出聚簇个数K, 只指定聚簇个数K的大概范围[K1,K2],该算法会在指定的[K1,K2]范围内通过BIC 值的评价方法不断调整聚类簇的个数,进而找到一个最优的聚簇个数K以实现聚类分组。
(2)针对局部最优解问题,X-means 每一轮迭代均使用2-means 方法,2-means 对局部最优解不敏感。
(3)该算法使用K-D树分区,加速了K-means 的每一轮迭代。
流式文档的每个段落可以看成一个基本单元,流式文档可以看作基于这些单元之上的序列,段落与段落间存在前后依赖关系,进而文档结构识别可以看成是序列标注问题。针对文档结构识别问题,提出BiGRU-CRF模型。BiGRU-CRF模型将神经网络与统计学习相结合,解决了文档结构识别针对小规模语料训练性能较差、识别准确率较低等问题。循环神经网络可以很好地完成短序列任务,但针对长序列问题,RNN存在较大缺陷,它在训练中会频繁出现梯度消失和爆炸等问题,导致训练中断,使RNN无法记忆长距离信息。为避免RNN的缺点,相关研究人员提出了长短期记忆网络LSTM,可以有效地利用长距离序列信息,有效弥补RNN的不足,较好地求解长序列任务。但是由于LSTM网络参数较多,网络训练开销较大,导致LSTM在是使用中有一定的局限性,因此,相关研究者提出了GRU模型,该模型对LSTM进行简化,减少了网络参数,在解决长时序列任务时,既保持了LSTM的效果,同时又使结构更加简单,有效地缩短模型训练的时间,同时模型训练更易于收敛,需要的数据更少,模型效果更好。BiGRU模型获取自上而下和自下而上的长短距离信息,由于文档段落较多,数据信息较复杂,所以在BiGRU模型中引入自注意力机制。BiGRU加入自注意力机制会更好地获得段落特征序列中长距离相互依赖的特征,自注意力能够将序列中任意两个段落的特征矩阵通过一个计算步骤直接联系到一起,而不是按照序列依次计算,有效地缩短依赖特征之间的关系。因为条件随机场有突出的序列标注能力,所以将BiGRU层结合自注意力机制得到的文档特征信息结果作为特征向量的最终表示,使用CRF模型联合建模进行标注决策,可以获得全局最优的序列标注。这时构建的文档结构识别模型,不仅会更好地捕获输入的段落特征序列中长距离的相互依赖的特征,而且该模型经过CRF层的两个特征函数处理,能够更好地完成上下文预测。
语料主要来源于北京信息科技大学文档资源库,包括各个类型文档资源共计约50 000篇,其中经过标注工具标注的文档约5 000篇。
基于Office Word Add-in 开发标注工具辅助人工操作,采用半自动化标注模式通过插入文档批注对语料进行标注;通过扩展样式表语言转换(extensible stylesheet language transformations,XSLT)模板定义结构,将带有批注序列的流式文档转换成符合定义的XML文档,便于机器读取;最后基于Word对象模型,自动提取文档特征,并填充到XML文档中。文档语料构建过程如图2所示。
图2 文档语料构建过程
在构建多类型文档分治模型前,需要先提取特征。对于文档结构识别来说,除语义特征外的大部分特征均需要从文档的底层抽取,而深度学习算法无法有效地自动提取这些特征,因此需要采用人工提炼特征。通过分析写作习惯及文档的排版规则,从文档中挖掘出多种特征。通过卡方检验,最后选择出18种特征,表2为特征选择结果。
表2 特征选择结果
提出的BiGRU-CRF模型分为4个部分:采用Embedding降维进行向量编码作为输入层、使用BiGRU结合CRF训练结构识别模型、训练层加入自注意力模型,辅助调整模型参数。文档结构识别模型分为训练和测试两部分,在训练阶段,从第2节聚类结果中,选择多篇文档语料数据,其中在3.1节中论述的特征预处理后的文本格式即为当前的输入语料格式,并采用BiGRU-CRF模型进行训练;最后,在测试阶段,选择多篇该类文档的语料数据,使用上一步骤中训练好的文档结构识别模型进行这些文档单元角色的测试,得到最终的测试结果,并与预先标注的结果对比,为分模型析和评价提供数据支撑。总体框架如图3所示。
图3 文档结构识别模型总体框架
文档结构识别模型的输入层即将3.2节中经特征选择提取的特征输入到Embedding层进行降维,完成向量编码,若输入的是不等长样本,对其进行padding补零之后输入到Embedding层,形成文档特征的初始表示,传递给下一层的BiGRU神经网络训练。BiGRU层自主学习输入的文档特征信息,同时记忆上下文依赖信息,得到其权重关系分布,输出新的特征向量。在此基础上,引入自注意力机制层,该层对上一层输出的特征向量计算注意力概率分布,通过该分布对特征向量进行点积运算,最后累加,其结果作为特征向量的最终表示。这时深度学习网络会更好地捕获输入的段落特征序列中长距离的相互依赖的特征,然后将特征向量输出到CRF层。该层将特征向量的最终表示使用CRF模型联合建模进行标注决策,以获得全局最优的序列标注。
以开题报告类型文档为例,构建BiGRU-CRF文档结构识别模型,表3为实验后确定的模型参数配置信息。
表3 模型参数配置信息
模型的具体算法流程如BiGRU-CRF混合神经网络算法迭代过程所示。
输入:经初始化的开题报告文档特征矢量Dataset_a。
输出:模型结构和权重分布。
Function BiGRU_CRF_Train(Dataset_a):
Initialization特征变量设为零矩阵,初始化分类数num_class设置为13
For所有文档特征集合Dataset_a do:
For每一篇文档单元特征集合do:
以字典形式保存每一个离散型特征和所有连续型特征拼接成的一个连续型特征
以字典的形式保存档单元角色标签
End For
End For
获取初始化的特征矩阵,对每一个特征降维
连接所有特征变量得到变量input_all
对input_all进行变长序列处理,长序列切割,短序列填充零值,得到变量input_middle
将input_middle输入到GRU 模型中
设置GRU 模型参数:
正则化dropout值设为0.2,输出维度设为128,return_sequences设为True,得到变量x_gru
将x_gru输入到GRU 模型中,设置相同的参数,得到变量x_bigru
将x_bigru输入到自注意力机制模型中
设置自注意力模型参数:
注意力类型为multiplicative,注意力偏置设为false,得到变量x_atten,将x_atten输到CRF 模型中
设置CRF 参数:
分类参数设num_class,得到变量crf_output
模型编译,选择Nadam 优化算法
打印模型结构,返回模型
防止过拟合,采用EarlyStopping 法
设置早停法参数:
监测验证集的损失值,设置为min 模式,10 轮训练验证集损失值
停止减少后模型训练中止,加入tensorboard 可视化
模型训练
设置模型训练参数:
迭代25 次,训练集验证集分布设置为0.2,一次训练选取样本量为8
保存模型结构和模型权重到指定目录,其中将save_best_only 设为true,保存验证集损失最小的模型权重
End Function
选取语料库3 000篇未标注类型的文档,其中混合了公文在内的许多类型文档。该部分数据集因保密性要求,仅在GitHub(https://github.com/COSLab)上公布了68篇数据。
4.1.1 评价指标
文档结构识别模型的评估指标分为两部分:段落单元的评估指标和总体的评估指标。
针对段落单元的评估指标采用查准率(Precision,P)、查全率(Recall,R)和F1值(F1-score),通过这3项评估指标对作者、题目、文本段落、图片以及表格等各个段落单元进行测评和分析。
查准率是相对于预测结果而言的,其含义是在被所有预测为标签N的样本中,实际为标签N的概率,计算公式为
(3)
式(3)中:TP为模型预测结果为N的集合中,实际为标签N的样本数量;Ptotal代表模型预测结果为标签N的总样本数量。
查全率是相对于样本而言的,其含义是实际为标签N的样本中,被预测为标签N的概率,计算公式为
(4)
式(4)中:Rtotal代表实际为标签N的总样本数量。
F1值的计算公式为
(5)
针对总体的评估指标,由于流式文档中不同角色单元的数量差异较大,不同段落角色数量不平衡,正文的比重很大,远超过其他角色标签,因此不能简单采用上述3项指标。采用上述3项指标对应的宏平均和微平均作为总体评价指标。宏平均是指先对每一个标签统计上述3个指标值,再对所有的标签求算术平均值。微平均指不区分标签进行统计,将所有标签一次性全考虑进来。在实验过程中,对各个深度学习模型的使用上述评估指标,从而评价各个模型对文档结构识别的效果。这样带来的好处是可以更好地评价算法、模型在整个数据集上的性能。
4.1.2 实验结果及分析
文档集合经过聚类算法后,得到的聚类结果如图4和图5所示。
图4 聚类模型实验结果1
图5 聚类模型实验结果2
通过聚类算法发现,如果聚成4类,聚类的结果基本符合人工对文档类型划分的预期,大致分为论文类型、标准文本类型、公文类型和开题报告类型。其中论文类型文档共1 512篇、标准类型文档共575篇、公文类型文档共586篇、开题报告类型文档共488篇。因此可以实现分而治之的设想。
聚类算法得到的4类文档的实验结果如表4、表5所示。
基于多个分类模型识别文档,每一个识别模型均有其对应的段落角色集合,同时每一个识别模型的准确率均达到了92%以上,各个分类模型的识别结果如表4、表5所示,单模型和分治模型的结果总体比较如图6所示,综合4个模型得总体的算术平均值约为95%。
表4 模型1和模型2的实验结果
表5 模型3和模型4实验结果
图6 单一模型与分治模型的实验结果对比
(2)用单模型去识别所有文档,段落角色集合为第1节中论述的PC。得到的总体识别结果只有75%左右,效果较差,很明显,例如中文摘要、引言这样的段落角色很容易识别成文本段落。
由此可以得出,所提出的分治模型能够有效地解决多类型文档结构识别问题。
根据4.1中文档聚类算法得到的论文、开题报告、公文、标准这4类文档集合,构建最优的文档结构识别模型。每种类型的文档语料分为训练集和测试集。
使用相同的语料库,在相同环境配置的条件下,对不同模型分别进行实验对比,实验采用4.1节中论述的查准率、查全率和F1值,以及对应的宏平均和微平均进行评估。
以聚类结果中数据规模最小的开题报告类型为例,对模型进行评估和分析。近年来,已有几个性能较好的模型。张真等[4]使用LSTM模型对文档段落进行预测,现同样选择LSTM进行对比实验。
表6展示了本文模型与文献[4]提出的模型实验对比结果。
从表6中可以看出,同样是处理序列标注任务的模型,本文模型能够更有效地完成文档结构识别的任务。此外,开题报告类型的数据规模较小是一个难点,本文模型的整体识别效果较语料丰富的论文类型差距不大,但是,针对分级标题,级别越低,写作自由度越高,导致识别效果较差,三级标题的识别效果只能达到0.65左右。从最终预测结果中得出,标题识别错误的情况为,大部分被识别成二级标题或一级标题,少量被识别成正文,说明各个标题之间的特征差异较小。
表6 不同文档结构识别模型效果对比
表7是不同模型的参数对照表。从表7中可以看出,本文的模型参数较少,迭代25次即趋于稳定,而文献[4]模型参数较多,迭代次数到40次才趋于稳定,但仍上下波动。在数据规模较少的开题报告类的文档训练中,尤为明显。
表7 模型参数对照
综上,无论是识别效果上还是性能上,本文模型在文档结构识别上效果均好于文献[4]模型。
方正飞翔是目前市面上书籍、科技排版效率最高的交互式排版软件,word超强的兼容性,可以在导入时保留原版式。将本文模型识别结果与方正飞翔软件进行对比,结果如表8所示。在12类段落角色标签中,文本模型的识别结果除表题、表格以外,均高于方正软件,其中作者、一级标题、二级标题、三级标题均高出约0.2。而方正飞翔软件在图题、图片、表格、表题等段落标签上的识别结果较好,本文模型与其结果持平,而图题仅低0.05。
表8 与方正飞翔软件的识别效果对比
针对多类型文档结构识别问题,提出多类型文档分治模型,把多类型文档结构识别分为三个步骤。第一步,基于改进的X-means 聚类算法构建文档分类器。第二步,为每个分类训练文档结构识别模型,充分利用段落角色的序列化特点,将序列标注方法结合到文档结构识别模型中去,结合双向门控单元模型、条件随机场模型并加入自注意力机制,构建文档结构识别模型。第三步,对新文档分类并调用相应的文档结构识别模型。分治模型使得机器学习从大规模寻优目标转化为小规模寻优目标,降低了文档结构识别模型的训练复杂度,实验结果表明,该方法能够有效识别多类型文档结构,提高了模型的准确性及方法的通用性,更符合实际应用场景。
本文模型虽然取得良好的效果,但仍有问题值得进一步改进。
(1)数据集的拓展。使用的语料只是其中较少的一部分且涉及的种类较少,不够全面,虽然提出的多类型文档分治模型可以解决多类型文档结构的识别问题,但是如果能够扩充语料集,在获得更丰富的语料的条件下,可以进一步调整聚类的簇数、特征的维度,对文档进行更精细的分类识别,以获得更好的整体识别效果。
(1)段落角色的细粒度识别。目前作为研究目的,对于流式文档的段落角色划分还比较粗,一些段落角色未作识别,例如:页眉、页脚、脚注等,在实际应用中,可以考虑增加更多的段落角色识别能力。