金融市场每时每刻都在发生新的事件,媒体不断的产生出新闻资讯,在互联网大数据时代,网络文章铺天盖地,如何从中发掘出有价值的信息一直是学术和工业界研究努力的方向。新闻资讯中隐藏着许多的投资机会,纷繁复杂的资讯文章中及时有效的提取出这些有价值的信息,将为投资者提供非常有价值的参考决策依据。
事件分析的难点,主要是在语义层面、事件的指向、事件跨句子描述等问题。由于新闻资讯类文本的描述形式与常见语法中主谓宾等形式界定不尽相同,且事件主体依赖于事件定义,事件在文本中的描述形式变化多样,不能简单的从词性和词集角度定义谓词论元。此外,金融领域的事件对时态状态也有要求。时态包括过去现在将来,状态包括否定转义成功失败暂缓延期等等,每一个元素都决定了事件是否成立。
本文所述算法建模的目标就是在文章中发现公司及其关联的事件类型,我们将这个问题分成多个步骤进行建模,包括了:命名实体识别(公司名)、指代消解、事件类型和事件主体识别。
一、怎么才算是一个“事件”?
一个事件通常有几个核心要素组成:事件类型、事件触发结构、事件论元和论元角色,
· 事件类型 (Event):业务场景决定了事件类型的划分方式,可以是多个层级股权类、经营类等,具体事件类型比如经营扩张、产能过剩、资金紧张等。
· 事件触发结构(Trigger):即代表事件内涵的核心表达词汇、短语、搭配方式等,多为动词或名词等具备具体含义的词汇组成。
· 论元(Argument):事件的参与者。在语言学中,论元就是指一个句子中带有名词性的词。比如,“证监会对康美药业责令整改,给予警告,并处60万元的罚款” 。这里含有两个论元,即证监会和康美药业。
· 论元角色(Role):事件参与者在事件中充当的角色,例如事件的施事者或受事者。即证监会是施事者,康美药业就是受事者。
二、把事件“抽”出来分几步?
事件抽取的任务主要是从非结构化信息中抽取出结构化信息。根据一个事件的组成要素,我们可以将事件抽取可分解为4个子任务:潜在事件监测、事件类型分类、论元识别、角色分类
潜在事件监测和事件类型分类可合并成事件识别任务。论元识别和角色分类可合并成论元角色分类任务。这两个任务相互依赖,论元角色分类依赖事件识别的输出。论元角色分类任务的输入是识别出的触发词和所有候选实体。
按照事件要素在文本涉及的范围,又可以将任务分为,
· 句子级别的事件抽取:只使用句子内部获取的特征;
· 篇章级别的事件抽取:使用跨句、跨文档抽取的特征信息。
在特征工程方面,可以从两个角度来提取语义信息,
· 词法特征:包括词性、实体信息以及形态学特征。目标是获取词语的语义以及词语背后的知识。例如当前词以及周边词的Uni/Bi-Gram、词性标签、同义词等;
· 上下文特征:结合上下文信息,目的在于理解事件在一个大的范围中是如何被联系到一起的。
三、事件抽取的常见方法
1. 基于模式匹配的事件抽取
模式匹配方法基于业务经营预定义抽取模板和规则化表达式,具备较强的业务逻辑性,其优点在于简单易上手,精确可解释。缺点在于人工构造规则工作量大,后期维护成本较高,而且模式的可移植性差,缺乏语义泛化能力,召回率普遍较低。
深度神经网络方法,可以自动学习有效特征。输入特征可以采用预训练的词向量,而且还融入了单词的语法和位置信息,不仅能够构建语义信息,还能自动组合构建更上层的特征。
除了基于CNN的特征学习模型外,还有采用RNN对文本中的序列信息进行建模,从而做事件抽取任务。通过基于联合模型的神经网络做事件抽取,简单理解为多个任务同时学习,部分参数共享学习。在事件抽取任务中,往往是将事件识别和论元角色分类任务同时联合学习。
适用于事件抽取的神经网络模型包括:
· LSTM, long short term memory,长短期记忆网络,是一种通过精心设计的RNN,能够学习长期的依赖关系,能较好解决梯度消失问题。
· BiLSTM,Bi-Direction LSTM, 双向LSTM,一个向前学习的LSTM和一个向后学习的LSTM,具有同时从上文和下文中提取信息的能力。
· BiLSTM-CRF模型,序列标注任务中很流行的深度学习模型。CRF(Conditional Random Field) ,条件随机场是给定一组输入随机变量条件下,另外一组输出随机变量的条件概率分布模型,其特点是假设输出变量构成马尔可夫随机场。将词向量输入BiLSTM后,学习到上下文特征信息,以及长距离依赖信息,然后输出到CRF,于是CRF能更好地构造字与字之间的特征对应关系。
经过实践验证,这里推荐一篇事件分析相关的经典论文: Event Extraction via Dynamic Multi-pooling Convolutional Neural Networks(2015)
· 该论文率先尝试神经网络方法应用于事件抽取任务,并相对传统方法取得较好效果。
· 采用预训练的词向量作为单词的初始表示,将事件类型特征用于角色分类任务。
· 在上层特征学习模型方面,研究中使用CNN来自动抽取有效特征进行事件抽取任务。
四、分步打造事件抽取系统
1. 事件主体识别
事件主体识别是从文本中找出在事件中充当的主体角色元素。经过多重经典模型的对比,我们采用了基于指针网络带注意力机制(PAN,Point Attention Network)的事件主体识别模型,模型结构设计为四层:
第一层是预训练语言模型层,用BERT来做动态词向量表示。自Google在2018年10月底发布BERT(Bidirectional Encoder Representation from Transformers)后,这是第一个真正意义上做到双向编码表示学习的深层预训练语言模型网络,并且在11项NLP任务上有很好表现,为整个NLP研究打开了全新的视角,彻底改变了预训练产生词向量和下游具体NLP任务的关系。正是BERT的优异表现,我们这里也尝试用BERT作为词汇特征表示。
第二层是编码层用双向LSTM。得到BERT向量特征表示序列后,融合事件类型,我们用BiLSTM做编码,前向和后向的LSTM能更好的学习到上下文序列特征。
第三层是注意力匹配层。我们利用Self-Attention机制,它的特点在于无视词之间的距离直接计算依赖关系,能够学习一个句子的内部结构,实现也较为简单,并且可以并行计算,使模型能更多的聚焦到事件对应的主体上。
第四层是序列抽取层。我们利用指针网络(Pointer Networks)做序列抽取,指针网络在计算整个序列之后,选择概率最大的状态元素作为输出。然后将抽取结果和NER识别的公司实体再做距离和字符串上的校验匹配,得到最终的事件主体。
最终在我们积累的数十万金融领域风险事件样本中,实际测试效果还是比较理想的,达到了业务可用水平。部分类型事件主体识别评测效果:
2. 事件类型识别模型
金融领域的事件类型是指文本所包含商业信息的事件,比如经营扩张、产能过剩,资金紧张等。事件类型根据业务场景定义,常用做法是使用正则表达式或关键词做初始积样本筛选,然后通过人工标注积累训练样本,之后利用分类算法训练分类模型。
金融事件的特征相对明显,业务术语等很大程度上决定了分类的效果,我们直接采用了简单有效的Fasttext分类模型,在句子级的事件识别任务中达到了95.7%的准确率。
3. 基础模型的优化
事件抽取任务的优化还涉及到很多具体的细节,抽取效果很大程度上依赖底层基础模型的效果,包括例如:
· 针对文本描述中事件跨句子段落难以匹配主体的问题,使用指代消解来还原文章中公司名的指代词,建立跨句子段落的事件与主体之间的联系。
· 对于事件的时态和状态,采用频繁模式挖掘以及句法分析,找到与事件和主体的修饰关系来解决。如“暴风集团股东拟减持不超0.67%股份”,“拟”表示将来时态,修饰的是“股东减持”这个事件类型。
· 句法分析依赖于分词和词性标注的效果。使用大规模的金融领域资讯语料单独进行分词器和NER模型的训练,一步步解决分词、词性和实体识别的问题。
· 针对公司名识别,采用bert-bilstm-crf算法进行命名实体识别,通过序列标记位滑动窗口模型(SW,sliding window),对预测不完整或不准确的部分进行自适应纠正,提升NER识别准确率,优化后F1值从88.2%提高到90.6%。
五、领域事件抽取道阻且长
目前就事件抽取任务的研究大多是基于ACE标准数据集展开,只针对某个特定领域或几个类型的事件进行研究,并不能够随着领域的变化进行快速的移植或扩展。
针对金融领域的专业事件,我们尝试过无监督、半监督、有监督的多种方法,也探索过经典机器学习和深度学习的模型,最终经过实际数据回测对比,我们综合采取了模式匹配和多种神经网络模型的联合学习方式,较为有效的兼顾了训练样本筛选、精确标注、模型冷启动以及泛化兼容性等问题。
事件抽取任务的研究中涉及了大量的算法模型及知识图谱等底层技术的积累和数据沉淀,距离真正做好,能够支撑事件驱动分析,影响性传播分析,最终指导投资和风控业务等目标应用场景,还有很长的路要走。
不过在探索过程中,我们发现不知不觉间积累的模型其实不光可以用在事件抽取任务,还可以被广泛用在金融文本分析的各种业务场景,包括资讯主题标签、资讯多空分析、问题意图理解、个股实体消歧、个性化资讯推荐等,都取得了显著的效果提升。