基于文档结构与深度学习的金融公告信息抽取

2020-02-08 04:10王博博
计算机工程与设计 2020年1期
关键词:字段公告关联

黄 胜,王博博,朱 菁

(1.重庆邮电大学 通信与信息工程学院,重庆 400065;2.重庆邮电大学 光通信与网络重点实验室,重庆 400065;3.深圳证券信息有限公司 数据中心,广东 深圳 518000)

0 引 言

在投资研究过程中,上市公司金融类公告是投资者的重要参考材料,挖掘公告中的重要信息是决定性的步骤。但是,海量公告信息让人脑难以负荷,如果机器能够根据需求,自动分析、过滤、抽取有价值的结构化数据,就能帮助研究员快速获取投资线索,从而做出最及时、准确的决策。

信息抽取(information extraction)是指从自然语言形式的文档中抽取人们所感兴趣的信息,并将其转变为结构化信息的过程,以便用户查询和使用[1]。本文的结构化字段信息抽取任务可以看作是NLP中的序列标注(sequence labeling)任务。目前的主要方法分为:基于规则和词典的方法、基于机器学习的方法及基于深度学习的方法。He等[2]提出了一种基于规则和条件随机场(conditional random field,CRF)的地理命名实体识别方法,需要依赖于人工定制的特征抽取模板,代价很大。为了避免这一缺点,近年来多数研究者将深度学习应用于NLP领域。例如Chiu等[3]结合长短期记忆神经网络(long short term memory,LSTM)与卷积神经网络(convolutional neural network,CNN)进行命名实体识别;Hovy等[4]在Chiu的基础上引入CRF层;Emma与Patric等[5]在CNN的基础上构建迭代卷积神经网络模型用于序列标注问题。在此基础之上,本文提出一种基于LSTM与CRF的网络模型用于提取信息句中的字段信息。

本文针对于巨潮网信息披露板块中上市公司各类信息披露公告,提出一个通用、完整的金融类公告的信息抽取方法。结合深度学习相关模型,解决了传统人工提取的代价大,泛化能力弱的缺点,快速高效抽取所需结构化信息。

1 信息抽取整体框架

考虑到公告文本形式多样、内容复杂、长度较长,直接提取难度较大且代价很高。如何剔除冗余信息,精确定位到关键的信息位置是关键性步骤。因此本文设计了如图1所示的信息抽取方法,共有3部分组成:公告文本预处理模块、信息句抽取模块和结构化信息抽取模块。

图1 信息抽取整体框架

首先通过公告预处理模块,利用自定义文档结构树算法将公告文本转化为层级分明树形结构。在信息句抽取模块中,利用规则提取树的节点信息,进而从大范围的节点信息中定位到所含字段信息的信息句,这样就将目标缩小至句子级别。在句子级别的信息提取上,应用深度学习的序列标注模型能够不依赖人工特征,快速高效提取字段信息。

1.1 公告文本预处理模块

本文处理的公告文本来自巨潮网信息披露板块中上市公司各类信息披露公告。文本本身属于自由长文本,语言表达较为规范,由自然语言语句组成。文本内容较多,表达方式较为复杂,因此提取难度较大。但是公告通常具有目录,各个章节标题表述较为规范,内容分类明确。

因此本文基于公告文本本身的特点,结合自定义标题规则,生成一棵各章节内容表述完整的文档结构树(CatalogTree),便于后续提取句子信息。公告文本的标题一般含有中文数字或者阿拉伯数字,表述形式较为统一。正则表达式使用单个字符串可以描述一系列满足某个句法规则的字符串集合,逐渐成为深度检测中规则描述和匹配的首选方法[6]。因此,考虑到标题的表达形式,利用正则表达式制定标题规则用来识别文本中所有标题。

表1中chineseNumber=((一|二|三|四|五|六|七|八|九|十)|(十(一|二|三|四|五|六|七|八|九))|((二|三|四|五|六|七|八|九)十)|((一|二|三|四|五|六|七|八|九)十(一|二|三|四|五|六|七|八|九)))。具体的标题规则集见表1。

文档结构树算法具体步骤如下:

输入:公告文本。

输出:深度序列表示的树结构。每个节点node的表示形式为(节点标题title、节点深度d、节点内容text)。d

表1 标题规则集

越大表示层级越高,nodenm表示第n个节点的第m个子节点。

步骤1 若目录存在,提取公告文本自带的目录,记录各个标题的深度d(d=1,2,…,n),添加至树结构;若不存在目录,记正文第一条符合表1节点规则为rule1,继续遍历正文找到所有符合rule1规则的段落,视为一级节点,添加至树结构;生成初步树,记为tree0;

步骤2 按序遍历tree0,取相邻节点noden、noden+1,其中dn≤dn+1。 记录两节点在表1中对应的规则rule及深度d,生成已有节点(规则-深度)集{rule-d}0;

步骤3 遍历noden与noden+1之间的文本内容。若某段落符合表1的节点规则rulex且不在 {rule-d}0中,记为noden的子节点nodenm,深度dm=dn+1,追加至以noden为根节点的子树tree1中,rulex和dm加入新的节点集 {rule-d}1中,执行步骤4;若在 {rule-d}0中,重复步骤2;

步骤4 继续遍历,若某段落符合表1的节点规则rulex,若在{rule-d}0中,重复步骤2;rulex不在 {rule-d}0且不在 {rule-d}1中,记nodemk,加入tree1,深度dk=max(d∶{rule-d}1)+1,rulex和dk加入 {rule-d}1中;rulex不在 {rule-d}0且在 {rule-d}1中,记nodenm+1,深度dm+1=d∶{rulex-d},加入tree1;

步骤5 将步骤2、步骤3得到的各节点子树tree1按顺序及深度加入tree0中,并将正文目录之前的“声明”、“重大提示”等章节补充至tree0中,将各个节点的节点内容补充到树中,生成一棵完整的CatalogTree。

公告文本自带的目录一般只含有二级或者三级标题,对于更深层次的标题则没有包含,有些文本的目录不规范导致无法识别。CatalogTree本质是一个深度序列,利用深度d来表示节点标题的层级,节点标题下是节点内容。

CatalogTree还原了整个文本的结构,利用规则补充了目录没有的标题。

1.2 句子抽取模块

公告文本各个标题所含内容指代明确,各部分披露信息都有准确的标题。根据公告这一特点,利用CatalogTree的树状结构便于抽取节点信息的特性,自定义抽取节点信息方法,结合标题规则与句子触发词集进行特定标题下的句子抽取。

根据业务需求,已知所需抽取字段。观察公告,确定所需字段在哪些特定标题之下,从而制定标题的抽取规则。图2为《日常关联交易预计公告》示例。

图2 《关联交易公告》示例

字段在公告中所处位置的段落标题一般为“关联交易主要内容”等,总结出标题规则的正则表达式为“关联交易(内容|情况|概要|介绍)”,调用CatalogTree封装好的方法,根据标题规则即可得到所有符合规则的标题节点,从而进一步提取包含字段信息的节点内容。如图3所示。

图3 节点内容提取

在CatalogTree的基础上,本文提供了一些便捷地查找节点信息的方法,如:查找符合规则节点及节点内容、查找特定节点所有子节点、按深度(广度)查找下一节点等等,这些方法可作为后续提取节点句子的工具来使用。具体方法见表2。

表2 查找节点信息方法

对于已抽取到的节点内容,本文根据所抽取字段,定义句子触发词集,在句子触发词集的基础上,拓展包含触发词集的局部句子结构规则,从而抽取符合规则句子。以上述《关联交易公告》信息抽取为例,具体步骤如下:

步骤1 定义句子触发词集。要抽取字段为关联方、关联交易类别、关联交易金额等。基于公告中的表述对关联方进行同义表述的拓展,关联方:关联(方、人、公司、机构),即为句子触发词集T_words;

步骤2 基于触发词的句子局部结构规则。分析抽取到的节点内容,根据触发词在句子中的表述,分析语法结构,定义局部结构规则S_rule。根据图2,S_rule=“与T_words发生(0,5)关联交易”;

步骤3 抽取符合规则的句子。将节点内容按句分割,S_rule与之匹配,得到符合规则的句子即为包含结构化信息句子。

由此,抽取到的包含字段信息句为:“公司拟2018年度与关联方华洋公司发生货物采购、提供劳务等日常关联交易,交易总金额不超过人民币2000万元”。

1.3 基于Bi-LSTM-CRF网络的结构化信息抽取模块

由1.2节抽取到包含结构化信息的句子,成功的将抽取目标由长文本缩小至句子级别。信息句中包含符合业务需求的各个字段信息,见表3。

表3 《关联交易公告》抽取字段

从提取到的句子中抽取结构化信息,可以看作序列标注任务。基于深度学习方法构建序列标注模型,可以不依赖规则人工制定特征模板。因此本文在基于LSTM的基础上构建Bi-LSTM-CRF网络模型,用于结构化信息抽取。

1.3.1 LSTM

循环神经网络(recurrent neural networks,RNN)无法很好地处理长距离依赖问题,并且训练算法存在梯度消失或爆炸问题。LSTM是一种的特殊的RNN类型,利用记忆单元门限机制对历史信息进行过滤,可以学习长期依赖信息[8]。

给定输入xt,LSTM的隐藏层的输出表示ht的具体计算过程如式(1)~式(5)所示

it=σ(wxixt+whiht-1+wcict-1+bi)

(1)

ft=σ(wxfxt+whfht-1+wcfct-1+bf)

(2)

ct=ftct-1+ittanh(wxcxt+whcht-1+wcict-1+bc)

(3)

ot=σ(wxoxt+whoht-1+wcoct-1+bo)

(4)

ht=ottanh(ct)

(5)

其中,σ是逻辑Sigmoid函数,i,f,o,c分别表示输入门、遗忘门、输出门和记忆单元向量,这些向量的维度都与隐藏层向量h的维度是一致。w表示连接两层的权重矩阵,如wi,j表示输入层到隐藏层的输入门的权重矩阵。

1.3.2 模型构建

在序列标注中的任务中,如果可以同时获取给定状态过去和将来的特征,对于最终预测结果将有非常大的提高。因此可以利用双向LSTM网络(Bi-LSTM)[7],有效利用过去的特征(通过正向的状态)和未来的特征(通过反向的状态)进行标注结果的预测。模型构建中,本文还引入了CRF层,最终模型如图4所示。

图4 Bi-LSTM-CRF序列标注模型

模型的第一层是利用Word2Vec预训练的词向量[9]。预训练词向量能够解决有监督标注语料不足的问题。本文的模型进行字段的识别和上下文关系非常密切,并且训练词向量时Skip-gram模型在生僻词和小规模语料上优势明显[10],因此本文使用Skip-gram语言模型[11]在无标注语料上进行词向量的训练。为了提高在某重大事件公告事件中字段的识别率,本文还将特定金融事件的领域知识词典作为先验知识加入分词中,确保金融公告中的特殊词汇、新词能够被正确分词,得到的词向量结构和语义信息的表示更加准确,对于后续的标签预测结果有很大提高。

模型的第三层是CRF层。CRF层的参数是一个矩阵A,Ai,j表示的是从第i个标签到第j个标签的转移得分,因此在为一个位置进行标注的时候可以利用此前已经标注过的标签。

给定输入序列x,想得到标签预测y,定义式(6)为得分函数

(6)

由式(6)可以看出,输出序列的得分式为各个位置的得分总和,包括两部分:Bi-LSTM的输出Pi,CRF的转移矩阵A。从而利用Softmax得出归一化的概率,如式(7)所示

(7)

模型训练时,要最大化对数似然函数,如式(8)所示

log(P(y|x))=s(x,y)-log(∑y′exp(s(x,y′)))

(8)

模型在解码预测时,使用Viterbi算法求解最优路径,如式(9)所示

(9)

2 实验与分析

2.1 数据及语料

上市公司信息披露的内容有多种类型,本文以《关联交易公告》、《股东股份质押公告》为例进行实验。

本文从中国证监会指定信息披露网站巨潮网(http://www.cninfo.com.cn)信息披露板块中,选取2000篇《关联交易公告》与2000篇《股东股份质押公告》。经过对标题的筛选,剔除无关公告和格式不正确的公告,保证公告文本一定包含所需字段信息,将每一类公告随机分为DataSet1(200)、DataSet2(1800)。其中DatSet1作为制定标题规则、局部句子规则的经验模板,利用DataSet1制定的规则抽取信息句,根据DataSet2的抽取结果进行优化。训练词向量的语料来自于巨潮网后台语料库,领域知识词典来源于深圳证券信息有限公司数据中心数据。每一类公告提取到的句子作为Bi-LSTM-CRF的数据集,设置合适的字段标签,利用B、I、E、O作为标签的末尾转移序列进行标注。将标注好的语料分为训练集、开发集、测试集进行训练。

2.2 模型训练参数设置

训练词向量的维度为50;Bi-LSTM模型中LSTM隐藏层单元数量为100;学习率设置为0.001;batch_size为20;optimizer(优化器)选择“adam”;dropout指网络中每个单元在每次有数据流入时以一定的概率正常工作,否则输出0值。这是一种有效的正则化方法,使用dropout防止过拟合[12]。

2.3 评价指标

针对业务需求的各个字段的信息抽取,本文以采用精确率(Precision,P)、召回率(Recall,R)、以及F1测度值(F1-score,F1)作为评价指标,分别对信息句和各字段抽取结果进行统计测评。

2.4 实验设置及结果分析

实验1:信息句抽取。首先制定提取内容所在的标题规则,结合目录生成树提取所需段落信息;再制定基于触发词的句子局部结构规则,提取含有字段信息的句子。

本实验的规则是基于正则表达式的形式,最终统计结果见表4。

表4 信息句抽取结果

根据表4结果进行分析,发现两种类型的公告DataSet1的信息句抽取效果都要好于DataSet2。主要原因是DataSet2出现了DataSet1没有见过的内容表述形式,导致人为制定的规则并不能适用于所有文本,但是F1值已达到要求的93%以上。经后续的规则丰富,可以进一步提高抽取效果。

实验2:结构化字段信息抽取。构建基于Bi-LSTM-CRF网络模型进行训练,并加入先验知识领域知识词典,最终结果见表5。

最终两类公告的信息句和字段抽取的结果见表6。

对于表5中字段抽取结果的具体分析如下:

(1)表述形式较为固定的字段,根据上下文信息能够做到较好的识别,如“关联交易时间”、“关联交易金额”、“持公司股份数”等。这些字段通常以阿拉伯数字来表述,并且后缀有明显标识,如“元、万元、%”等,表达较为固定,故准确率最高。还有用汉字数字来表述,标注语料过少,因此造成少量抽取结果有误;

(2)“关联方”、“股东”、“质押对象”字段在公告文本中一般表述为公司(人名),以“公司”为后缀,因此本字段抽取准确率较高。但是公司名也可能为简称,并无明显标志,导致模型识别不准,抽取结果有待进一步优化;

表5 字段抽取结果

表6 抽取结果对比

(3)“关联交易类别”字段的表述形式多种多样、长短不一,界限难以根据模型去界定。但是模型特点能够根据上下文信息进行识别,因此仍得到可观的F1值。

由表5、表6可以看出,本文提出的文档结构结合Bi-LSTM-CRF的信息抽取方法,对于表中两类公告的结构化信息抽取都取得了令人满意的效果,平均F1值在91%以上。具体的抽取结果根据公告文本类型、形式、文本的长度、信息句的表述形式等会有所不同。在相关其它类型公告,例如《并购重组类公告》、《企业年报》等也取得了相似的结果,可以很好满足项目业务上的需求。

实验3:为了方便对照,本文还设置基于传统的规则、CRF及Bi-LSTM模型进行各个字段的抽取,利用F1值进行各个模型间的比较,以《关联交易公告》为例,最终结果见表7。

实验结果表明,Bi-LSTM-CRF模型对于字段的识别率要高于其它方法,其中加入领域知识词典的Bi-LSTM-CRF(D)F1值比一般的Bi-LSTM-CRF模型各字段的抽取结果要高2%~3%。该模型解决了传统规则及机器学习方法进行信息抽取的局限性。在分词时加入领域知识词典,得到的词向量对于语义结构的描述更加准确,同时在Bi-LSTM的基础上引入了CRF层,加强了标签之间的约束和依赖。在“关联交易时间”和“关联交易金额”两个字段中,规则与Bi-LSTM-CRF(D)模型的F1值较为相近,这是由于字段表述形式较为固定,因此抽取结果都较好。但是在最难识别的“关联交易类别”字段,Bi-LSTM-CRF(D)的识别结果要大幅领先于其它方法,验证了该模型对于本实验的适用性。

表7 各模型实验结果对比

3 结束语

本文针对金融类公告的文本特点,提出了一种完整的金融类公告的信息抽取方法。该方法自定义文档结构树生成算法能够将文本转化为层级分明的树结构;自定义的查找节点信息方法及触发词集的局部句子结构规则能够快速便捷提取到信息句;在训练Bi-LSTM-CRF网络模型的基础上加入领域知识词典,获得了准确充分的语义上下文表示,解决了传统人工提取和机器学习方法代价大、泛化能力差的缺点。最终多组对比实验结果表明,该信息抽取方法在多类公告文本的信息抽取任务上具有通用性和高效性,进一步提升了结构化信息识别效果,抽取结果更加合理、准确。由于信息句的抽取是基于规则的方法,该方法的局限性和差异性导致抽取效果不够稳定。接下来可以尝试结合统计的方法对于抽取系统进行改善;利用更快速的深度学模型,以获取更高的抽取性能。

猜你喜欢
字段公告关联
图书馆中文图书编目外包数据质量控制分析
不惧于新,不困于形——一道函数“关联”题的剖析与拓展
“一带一路”递进,关联民生更紧
沪深一周重要公告
沪深一周重要公告
沪深一周重要公告
沪深一周重要公告
奇趣搭配
智趣
CNMARC304字段和314字段责任附注方式解析