程序员

自然语言处理技术在证券行业的应用

2020-07-01  本文已影响0人  雷课

近年来自然语言处理技术在金融领域得到了广泛的应用,包括粗粒度的资讯舆情分析,中粒度的表格提取与识别和细粒度的勾稽关系检查。自然语义处理的核心技术包含文档结构识别、文本内容理解、表格理解以及跨期和跨区的文本块理解。目前在金融领域的应用主要是在投行和风控领域。投行领域主要是针对招股募集书的完整性和业务规范性进行审查,针对债券发行的内容和主要财务信息进行勾稽关系检查,对发行主体的新闻舆情进行实时跟踪。之前的研究关注重点一般是对现成的文档进行勾稽关系检查,暂时未看到在文档编辑过程中进行辅助的工具。本论文主要按照系统功能模块进行总结。

   一、背景及意义

文本信息提取与勾稽关系核查,自动对金融文档表格等关键信息进行抽取,按照会计准则等规则进行勾稽关系检查,上下文描述可能存在不一致的问题进行上下文一致性检查,利用往年年度报告进行跨年度关键指标对比,找出表格中潜在可能出错的单元格。

语义检查,语义检查主要用来识别金融文档中由于人工误写或者在复制粘贴过程中可能产生的错别字问题。能够支持通用同音异字、类形异字、标点符号等常规问题,还搜集维护了金融行业领域语料以对金融文档进行专门处理训练,同时针对长江证券公司内部的特有产品名称、机构名称、人名等提供专门的数据管理,以优化金融与公司特有词汇可能导致误报率高的问题。

情感识别,情感识别模型主要对访谈、新闻、公告、研报等资讯的态度进行判定。风险管理部门和投资部门需要对个股、行业、大盘的实时舆情态度进行跟踪,传统的方法只能盯住有限的个股和行业。针对不同的行业、不同的资讯类型训练单独的情感识别模型,提高识别的准确度。

底稿校对,文档合稿过程中只有部分发生修改但是合稿过程中经常发生遗漏合并的问题,采用一种基于章节、段落、表格、句子等多层级并行快速的文本相似性匹配算法,实现对年报等大型文档差异进行快速定位并提供友好交互,实现成稿每句话溯源到原始稿,能够快速发现异常文本。

图 1 金融文档解析引擎架构图

金融文档解析引擎内部包含数据处理、算子选择、模型构建、应用模型四个模块,在支撑层还有金融词库、构建关系知识库、命名实体识别、词频分析、依存语法与权重度量等六大模块。应用层目前已经发布有语义检查、一致性检查、表格趋势检查、多文档联动等四大功能。年报文档通过数据处理中的文档解析模块统一转化为机器可以读取的富文本格式,表格抽取模块负责将文档里面的所有表格进行格式化存储,中文分词模块将文档正文中的段落进行分词处理,为后续表格相似度和段落相似度做准备。特征提取实现表格和正文段落的特征提取,表格信息主要包含行头、列头、标题以及上下文信息,正文主要包含段落、上下文、和本段落的主要分词信息。根据筛选的特征选择合适的算法进行模型训练,语义识别主要使用N-Gram与Bert,词向量采用word2vec 算法。选择合适的模型进行训练,然后进行模型评估与自学习,最后发布为应用模型。本文站在应用的角度按照业务功能勾稽关系检查、语义检查、底稿校对、智能写稿与挖掘等几个模块分别进行介绍。

   二、文本信息提取与勾稽关系核查

文档在编辑过程中间涉及到数十次的合稿,由于人为的疏忽在编辑与合稿过程当中表格难免会出现错误,即可能是表格内部的勾稽关系错误,也有可能是在正文中数据发生变更但是文档中没有发生变更。报表在生成的过程中又会遇到财务报表模版缺失、变更、财务报表生成后资产负债表不平、财务报表之间数据勾稽关系不正确、费用金额出错等问题。在编辑过程中也经常采用在往年的基础上进行编辑,一般公司的财务数据每年的变化都不会太大,需要进行跨期对比将每年发生变化超过阈值或者未发生变化的数值进行提醒。

报表勾稽关系检查包含通用勾稽关系如合计、合并、累计以及父项与子项之间的关系。根据表格内部标识和文字描述等特征首先匹配通用模型,提取通用勾稽关系检查的必要元素并进行勾稽关系检查。在进行勾稽关系检查的时候有些无边框表格根据传统的表格识别出表格内部的关联关系,如下面各个表格交易性金融资产包含:债券、股票、基金和其它,根据传统的行列信息无法提取出包含关系。必须根据表格的语义、表格样式进行勾稽关系挖掘。

图 2非典型勾稽关系

审计报告中最关键的表格是利润表、现金流量表以及资产负债表三大报表,按照特定规则(会计准则)进行勾稽关系检查,一般情况下,资产负债表和利润表的勾稽关系为 :资产负债表的未分配利润期末数-未分配利润期初数 = 利润表上利润总额的本年累计数。资产负债表和现金流量表的勾稽关系为:资产负债表货币资金期末数 = 现金流量表期末现金及现金等价物余额的本月数。民间非营利组织企业的资产负债表和业务活动表的勾稽关系为:资产负债表净资产计的期末数 - 净资产合计的年初数 = 业务活动表净资产变动额的本年累计数合计。出现错误时,应检查三张表之间的勾稽关系是否正确。

进行勾稽关系检查的基础是报表的识别,其中的基准又是三大报表。所以问题的研究主要分为关键信息提取、表格相似度匹配、跨期对比与上下文一致性检查等4个模块。

2.1 关键信息提取

金融文档中最关键的信息就是文档中包含的各种样式的表格数据,一份文档中涉及的表格达到数百张,在年报编辑的过程中的勾稽关系检查、上下文一致性检查很大一部分基础工作是表格的数据的比对。但是各个部门和审计机构给出各种格式的文档(word、PDF),而且各种表格定义风格各异,进行勾稽关系检查的前提是对里面的表格进行提取。

复杂表格的处理

表头作为描述表格的主要属性依据,在表格中占有重要的地位。对于结构简单的表格,表头往往是线性的。而对于复杂的表格,表头可能存在多层次的信息嵌套,表现在表头结构上呈现包含关系。典型的复杂表格如图所示:

图 3 典型复杂表格

对于此类复杂结构的表头,一般采用树形结构或图形结构进行描述。通常意义的复杂表头结构是上层包含下层的关系,即上层与下层是一对多的关系,这符合树的定义。因此此类结构的表格适合使用树形结构进行表示。

此类表格由于没有框线约束,同时表格没有固定的结构约束,虽然肉眼可见表格行列情况,但是机器识别的准确率往往受到限制。对于此类表格的处理往往采用基于文字流的表格识别方式。其主要思想是利用文字的位置信息对表格进行栅格化处理。

2.2 表格相似度匹配模型

表格提取完成了将表格转换为格式化数据进行存储,在进行勾稽关系检查和跨期对比时需要对表格进行搜索匹配,需要找到表格的唯一约束条件。传统的通过行头与列头并不能唯一标识,在同一期的年报文档中可能存在相同行头与表头但是实际含义并不相同的表格,在跨期文档比对的过程中,由于会计准则发生变更可能导致同一份表格如《归母净利润表》在不同年份的行列表现并不完全一样。所以我们采用基于表头、表格上下文以及模板的表格一致性判定方法。其中表格的上下文信息是其中的关键。

表格上下文信息与表格相似性计算模型融合的方法有两种,一种是将上下文信息作为特征直接输入到表格匹配算法中,另外有一种用于直接改造表格匹配模型结构。第一种方法多为基于特征工程的方法,一般将词距和词特征信息作为特征空间中的一维,并用通用算法进行文本匹配。第二种方法利用上下文信息改造相似度计算模型的方法,通常直接利用位置信息替换传统概率模型中的某些元素如词频。我们目前采用的是第一种方法,将表格的上下文作为特征进行匹配算法的输入,同时也根据金融文档的特点设置了权重。

表格唯一标识为{行头、列头、标题、上下文信息},匹配步骤为:

步骤一、 利用行头、列头信息对全文档表格进行精准匹配。

步骤二、 如果匹配到唯一结果,算法结束。如果匹配结果集为空,则转到步骤三。如果匹配结果超过1个,则进入步骤四。

步骤三、 利用行头、列头信息计算各个表格之间的相似度,包含表格样式相似度与行头、列头文字之间的语义相似度。如果大于阈值的匹配结果有多个,则转为步骤四。如果结果匹配结果集为空,则采用自定义量化规则进行匹配。

步骤四、将唯一标识中的标题、上下文信息加入到匹配算法的输入特征中,进行语义相似度计算。如果有多个结果则直接返回最优3个,供董秘室进行判定,并根据结果进行反馈到相似判定的算法中。

2.3 跨期比对模型

金融文档编辑过程中经常由于工作疏忽导致单位、小数点错误,或者有些数据直接是从去年的报告中直接拷贝过来的没有进行修改,在当期的检查中很难发现这些问题。应对数据进行同比或环比分析,如发现数据出现重大(偏差在 30% 以上)差异,有可能出现经济业务不完整,应检查折旧计提、其他应收款摊销、无形资产摊销、限定性净资产的结转、非限定性净资产的结转、成本的结转、税金的结转等业务是否完整。在实际进行同比和环比分析过程中我们发现发现单纯比较一年并不能核查出全部问题,有的时候需要对近5年的数据进行比对,当年的数据是否在统计意义上符合最近的分布。跨期对比采用以表格列为基础,在使用上的形式为点击文档中的一张表格中的任何一列,自动将该表格最近5年的数据展示出来,同时与去年、最近5年的平均值进行比对,超过给定的阈值进行告警提示,数值未发生变化同样要进行提示。选择该列的任何一行,可以将详细的走势展示出来。

图 4 跨期对比效果图

2.4 上下文一致性检查

上下文一致性检查主要是解决当期报告编辑不一致的问题。金融文档编辑过程中由于表格内的数据经常发生变更,而文档的其它地方又对该数据进行了引用,在表格数据发生更改的时候引用部分不一定发生更改。同时同一名词在不同上下文中的含义并不一样,例如主营业务收入可能会是合并报表口径、母公司、子公司等。首先要根据营业收入出现的语境来判断他可能指代是哪一个口径下的,然后根据表格里面的数据进行校验。表格里面的数据来源一般是三大报表或者其它业务系统,在进行上下文一致性检查之前我们首先已经进行了表格勾稽关系键检查与表格跨期对比,假设表格里面的数据准是可信的。

首先是将所有表格进行格式化提取,按照目录结构与唯一性约束进行存储。在章节内和章节外采用不同的匹配模式,章节内部采用先匹配描述文字,再匹配数值,章节直接匹配数值。以章节和段落为顺序,对每个段落里面出现的文字进行统一格式转换(单位转换、文字到数字转换),根据数值出现的上下文语义,首先去本章节的表格中搜索是否包含对应的描述,实际测试结果90%以上的描述是对本章节的信息进行描述,然后对数值进行精准匹配,如果未找到则进行全文档表格搜索,按照数值进行比对,如果找到则将单元格描述信息与数值的上下文进行比对,检查描述是否一致。将描述不一致的地方根据错位的类型按照不通的样式进行渲染。

图 5 上下文一致性检查

   三、语义检查

语义检查主要用来识别文档中由于人工误写或者在复制粘贴过程中可能产生的错别字问题。该模块除了能够支持通用同音异字、类形异字、标点符号等常规问题,还搜集维护了金融行业领域语料以对金融文档进行专门处理训练,同时针对长江证券公司内部的特有产品名称,机构名称,人名等提供专门的数据管理,以优化金融与公司特有词汇可能导致误报率高的问题。

分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。现有的分词算法可分为三大类:基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法。我们采用得是Jieba分词模型中得精准模式,基于标注语料,使用动态规划的方法可以找出最大概率路径,并将其作为最终的分词结果。对未记录的词,Jieba使用了基于汉字成词的HMM模型,采用了Viterbi算法进行推导。影响Jieba分词的关键因素为自定义词典和与停词库。自定义词典定义了词的频率和词性,可以减少分词发生的错误并将关键的信息提取出来。我们首先根据历年年报编辑过程中参考材料出现名词、公司部门名称、子公司、领导姓名、合作单位、股东、发行产品以及表格中出现的名字等数千个单词根据出现的频率构建长证私有词库。根据监管机构相关文件和历年其它公司的年报,构建证券行业共用词库。停词库,对文档分词后,需要去除高频词、无义词等与文档信息相关性不大的噪声词汇。由于文档中句子存在一类高频词汇,如“的”、“他们”、“终于”或者“好”等,这类词汇都具有在文档中出现频率高、与文档的主要信息不相关等特点。停用词我们以百度的停用词库为基础,并加上专有的敏感词库。

语义检查模块主要包含如下子模块:数据管理模块,模型训练模块,模型服务封装展示与反馈模块。

数据管理模块负责模型用到的数据维护,主要一方面包含公司产品、机构、人名等特有词汇,分词词库等基础词库数据,另一方面维护了训练模型所需的数据集。对于词库的维护,系统采用flink流式处理方式对公司相关系统中各类产品、机构、人名数据进行同步,同时提供管理界面供管理员人工干预,实现在线离线同步管理。而数据集的维护,系统对接公司统一大数据管理平台,可根据不同需要拉取不同的数据源采集到的数据,同样基于flink流式处理平台开发不同的数据处理代码逻辑,实现对数据按使用要求进行相应的转换与预处理,最后将结果数据落入数据库中供模型使用。

模型训练模块承载于公司自有的算法平台之上,平台具有多个高性能GPU支持深度学习模型的训练与研究,同时基于SPARK大数据流式计算架构,可支持大量数据的并行高效处理,模型训练模块主要负责语义识别模型的训练与优化。所设计的模型主要包含两部分主要功能:一,掩码语言模型(MLM,Masked Language Model)产生候选字符;二,多条件模型判断进行候选字符判定。预训练掩码语言模型这里采用google近来开源并在业界公认具有较好效果的中文BERT模型,BERT是基于Transformer的深度双向语言表征模型,基本结构如图所示,其本质上是利用Transformer结构构造了一个多层双向的Encoder网络。Transformer是Google在2017年提出的基于自注意力机制(Self-attention)的深层模型,在包括机器翻译在内的多项NLP任务上效果显著,超过RNN且训练速度更快,Transformer已经取代RNN成为神经网络机器翻译的State-Of-The-Art(SOTA)模型。但是,经过测试发现,直接使用BERT模型会存在一个问题。由于BERT预训练模型采用随机掩盖一些词,然后预测这些被遮盖的词来训练双向语言模型,并且使每个词的表征参考上下文信息的方式进行预训练,这样就存在着随机mask的位置和实际的拼写错误位置有一定不同的问题,因此在此需要使用自定义准备的训练集对模型进行微调。考虑我们的应用场景主要为年报、投行招股说明书等文档相关应用,因此我们在通用中文语料基础上搜集并加入了3万多的财报数据与若干金融语料对模型进行微调训练,完成领域迁移,通过给予财报数据更高的权重,提高对文档的识别效果。系统微调完成之后的掩码语言模型就可以针对输入句子的每个位置计算出其置信度较高的topN候选集合来判断是否存在拼写错误,再将这些候选集合送到判定模型中确定对应修改的候选字。字符判定模型先是将其按照字音相似和字形相似匹配分别进行判断,同时在判断模块中我们基于前面搜集到的同一训练集预训练了一个n-gram词模型——一种基于概率的判别语言模型,它的输入是一句话(单词的顺序序列),输出是这句话的概率,即这些单词的联合概率。通过进一步对字符所在句子进行逐一替换与分词后,并将该词根据n-gram困惑度计算结果做二次判断来进一步进行结果判定。而对于公司特有词汇处理,模型主要采用了DFA算法(Deterministic Finite automation,确定性的有穷状态自动机)匹配,通过自定义算子基于数据管理模块中的自定义词库构造对应树形结构体,再对包含可能错字的词汇与其进行对应匹配来判断是否为公司特有词汇,并对应过滤。在以上所有判断逻辑执行完后模型,最后根据整体判断结果输出最终结果。

图 6 语义模型训练

   四、情感识别

风险管理部门和投资部门需要对市场类各种层级的资讯数据进行实时跟踪,需要对关注的投资标的舆情进行正负面判定。风险管理部门侧重的是对个股负面资讯的跟踪,发现自营持仓标的中可能存在风险,以及对大盘的实时舆情进行跟踪,给出大类资产配置建议。投资部门除了对投资标的风险进行跟踪之外,也需要利用资讯进行投资机会的挖掘,从负面资讯中挖掘可能被错杀的投资标的,这就需要对舆情做出更加准确的判定。传统的通用舆情判定模型并不能对市场上种类繁多的资讯进行准确的情感判断,业务部门更多的是采用传统人工的方法对各类资讯进行跟踪和校对。在与风控等业务部门进行反复沟通后,确定了个股新闻、研报、论坛以及大盘舆情等四种不同的情感判定模型。

我们的情感分类模型采用的是基于百度ERNIE语言模型结合多层双向LSTM的有监督学习分类模型,如图所示,模型输入为一段中文文本,到ernie语言模型构成的输入层,然后经过多个双向lstm组成的多层网络结构中,最后对应的输出是这段文本是在不同分类结果下的概率分布。

图 7 LSTM模型

ERNIE是百度提出的基于知识增强的语义表示模型,其在语言推断、语义相似度、命名实体识别、情感分析、问答匹配等自然语言处理各类中文任务上的验证显示都具有十分领先性的效果。ERNIE 模型通过利用百度的海量数据中的实体概念等先验语义知识,能够学习到实际人们使用过程中真实的语义关系。具体来说,其通过对不同词、不同实体等语义单元进行对应掩码操作,使得模型学习完整概念的语义表示。相较于BERT等模型学习原始语言信号,ERNIE直接对先验语义知识单元进行建模,增强了模型语义表示能力,在基于上下文知识推理能力上表现的更加出色。

Bi-LSTM即双向LSTM,双向循环神经网络的网络组成方法是在每一个训练序列向前和向后分别加上两个循环神经网络,而且这两个网络都对应连接着一个输出层。这个结构能够提供给输出层输入序列中每一个点的完整的过去和未来的上下文信息,因此对比于传统的单向LSTM只能从单一方面数据进行学习,双向LSTM可以参考前后问信息,因而能更好地捕获句子中上下文的信息。

   五、底稿校对模型

金融文档在成稿之前需要经过数百次的编辑与合稿,一般情况下是每天合成一个基础稿然后下发给各业务部门,各业务部门在此稿的基础上进行修改。当天各内业务部门要与董秘室进行多次合稿,每次合稿都是在原来的基础上进行部分修改,由于人为的失误容易将修改的地方合并丢失了。利用文档相似性比对技术快速检验原始文件和待校验比对,判断文档相似程度,快速找出文件之间的差异,选择差异部分进行合稿。一般金融文档很容易达到达到数百页,而且文件的内容可能在多个地方交叉引用,主要设计一种基于模板的快速比对方法,响应时间控制在5秒以内。

由于公司财报等文档大部分章节与样式是固定的,在金融文档编辑过程中,每个部门一般只负责1个章节的编辑,所以合稿发生遗漏的情况大部分发生在章节内部。我们采用基于章节的相似度估值文本相似性检测方法,基于相似度估值的文本相似度检测方法可以有效地降低相似度检测的时间复杂度。首先对章节指纹进行对比,当异常值大于阈值的时候,对章节里面所有的内容进行全文本匹配。由于文档内容较大,所以对于所有的章节我们采用并行计算相似度的方法。

文章颗粒度划分方式主要有:段落粒度的划分、章节粒度的划分、表格粒度、句子粒度的划分等。文档指纹信息,哈希估计算法主要用于大规模数据环境下文档的相似度检查,主要通过海量数据环境下的随机分布,将两个文档之间的相似度转换成发生某事件的概率,从而估计两篇文档之间的相似度。首先对文档进行分词处理得到集合S,对集合中的元素进行rabin哈希映射。从总的集和中随机进行K次组合,计算S集合K次组合中的映射,得到集合F={K1(S),K2(S)......Kn(S)}作为S的指纹信息,两个章节或文档之间的距离可以标记为F1F2。

文档相似校验的总体流程按章节进行并行逐级比对,在每层比对时首先比对该层级的指纹信息,当指纹信息阈值超过指定值时再展开下一层进行比对。按照年报文档的章节划分,每个章节启动一个进行比对,再分别按照子标题、段落、表格和句子进行逐级比对。具体流程如下:

图 8 底稿校对流程

比对之后,记录差异的位置,根据指纹之间的距离和差异类型(表格、标题、段落、数值等)分别采用不同的样式进行渲染,按照Tree的方式存储在内存中,待全部比对结束之后一次性写入到本地文件中,目前一份300页的文档比对耗时在5秒以内。

图 9 底稿校对功能

   六、智能写稿与异常数据挖掘

招股说明书等文档在编辑过程中,很多表格及描述是有一定规范。比如财务部门中各个业务的营业收入,这些数据已经存储在财务系统中,财务人员主要工作是各个系统中查询数据并进行汇总到表格。为了从根本上减少人工编辑产生的错误,最有效的方法是用机器写稿,根据模板自动生成报表内容以及描述信息。我们联合董秘室和财务部门,对财务部分的报表和描述生成做了相关定义,同时对会计表格中的数据进行挖掘。

财务报表数据挖掘是指应用人工智能的手段分析财务报表,融合了统计分析、汇总算法、人工智能等方法,通过挖掘财务报表中的数据特征、规律、联系,进而了解问题、分析问题、做出解决策略。财务报表数据挖掘是从海量的財务报表数据信息汇总,找出存在潜在的有意义的数据,通过分析数据中包含的隐藏的知识,进而获得相关的信息从而增加利益。目前很多上市券商已经实行集团化改革,集团财务报表自动生成模式就是采用企业集团管控理论和会计模式理论为基础,在会计环境的变化、企业集团公司的快速发展的前提条件下,増强集团公司管控能力、提升集团公司运营效率和效益。

在原有的财务指标计算公式对应的勾稽关系上,我们还开发了异常数据诊断模块,对数据进行特征处理并进一步采用机器学习与统计学方法等技术对可能的数据异常进行分析。首先我们在异常发现模块中提供了tsfresh,feature tools等一系列特征工程工具对财务指标数据进行对应的特征工程完成相应的数据转换,然后尝使用不同方法对数据可能异常进行识别,其中我们提供了孤立森林和DBSCAN等机器学习去发现数据异常点的方式,同时还对数据进行了统计学分析,如是否符合本福特定律,数据与其变化率的出现概率是否偏离分布标准差过多等。而且对于年报数据,我们还考虑了其季报数据的情况根据历史判断季报对应变化数据情况对年报数据进行校对比较发现可能的问题。通过提供这些多维度的异常数据发现工具,对财务数据之间可能出现的问题进行全方位的检查。

   七、总结

金融档解析引擎首先在董秘年报辅助编辑系统得到应用,辅助董秘的年报、季报、月度经营状况和其它对外发布的文档的编辑工作,在我们的使用过程发现其实趋势对比和底稿校对是使用较多的模块。内控合规以及投行部门已经集成文字勾稽关系检查和跨期对比的功能。内部办公目前已经将语义检查模块封装为通用服务,供全公司使用,目前已经有数千次调用记录。在内控合规及投行业务的应用主要针对募集说明书、审计报告、评级报告、法律意见书等进行基础的辅助性审查工作如格式检查、标点检查和数值错误,同时也进行勾稽关系、上下文一致性、多文档关联以及多渠道的溯源等与业务关联更加紧密的工作。目前在债券发行领域已经完成200多条人工规则的积累,辅助完成多次债券发行。后续将会针对不通的应用场景训练不同的审核与校对模型,逐步对自动写稿功能进行扩充,尽可能的减少工作人员的工作量,实现自动写稿。

上一篇下一篇

猜你喜欢

热点阅读