一、金融事件分析的主要任务
金融事件分析的主要任务可以分为三块:
① 第一块为非结构化数据智能解析。金融领域的信息与互联网信息相比有着其独特之处。金融领域的信息经常是以非结构化的形式存在,并且有一些比较特殊的文件格式,比如 PDF,这对于从文件或数据中抽取干净准确的数据提出了比较大的挑战。PDF 格式是一种排版打印的格式,并不像其他文件类型那样段落分明。PDF 更多是为了服务排版,所以文件里只存在一些位置信息。要从非结构化数据中解析出准确的格式语义清晰的文本是比较有挑战的。而且当文档中格式语义不清楚时,对事件分析就会带来噪音,而这些脏数据会对模型的训练和推理造成很多干扰。所以为了提高模型准确度,应该先做好非结构化数据的解析。
② 第二块是事件语义的理解,这是技术上比较重要的一部分。这里主要涉及到事件的检测,事件要素的抽取和事件关系的抽取。
③ 在对事件的理解的基础之上,就引入了任务中比较重要的第三块模块,事件的图谱分析,它包括事件链的分析和事件预测。
为了完成上述任务,引入两个比较重要的体系。首先是金融事件体系,一个金融事件体系包含了金融领域的相关主体,这些主体也有不太一样的应用场景。为了更好地支持这些主体和场景,需要建立相应的事件体系,这里面涉及到很多领域知识,需要领域专家提供相应的知识作为输入。从而帮助我们把这个体系构建的更完善更科学,能够覆盖相应场景。当然除了专家知识外,也会需要技术进行归纳学习,这样也能够提供完整的场景化的可扩展的事件体系。
因为引入专家知识主要是针对场景中比较重要的事件。对于一些中长尾的事件,主要还是基于学习的一些技术来解决。有了金融事件图谱,我们把事件提取技术结合在一起,经过事件抽取,事件关系的分类,学习事件的表示后,就可以构造图来进行分析和预测。
通过明确任务和技术的加持,我们就可以对新闻或文档进行处理并归纳回答很多问题。比如,哪个公司发生了什么类型的事件,事件中涉及了哪些要素,例如通用要素时间、地点、人物,或者与事件类型相关的要素,比如,事件“公司股票发行”,就包含要素发行价格、发行量等等。除此之外我们还可以关注这些信息,比如民众对这个事件的评价(情感分析)。以及发生了某类事件后,对企业未来会发生什么的预测。如果可以回答上述问题,那么对很多场景都是很有价值的。
下面我们来看一个具体例子。
上图将金融事件体系分为两级,第一级有五类,主要按照具体对象作区分,比如企业类事件,股票类事件,行业和宏观类事件,债权类事件和基金类事件。针对不同的事件对象定义了不同的事件类型。这些都是金融领域中最常见的对象。第二级里我们是将每种对象进一步细分。比如一个企业里面常见的事件类型,比如股东减持等(可参考上图)。以股东减持这类事件为例,它所包含的事件元素有减持的时间,减持的股东,减持时的交易价格等信息。定义一个完整,对场景有针对性的事件体系是事件分析能达成目标的重要前提,事件体系定义的细致程度将决定最终事件分析能达到的事件信息细粒度的程度。
下面介绍事件图谱。
事件图谱属于图,包含节点和边。在事件图谱中,事件节点可以是事件,也可以是事件中的实体,比如公司。边就是事件和事件的关系,也可以是事件和实体间的关系或实体和实体之间的关系。
我们来看一个例子。上图是一篇介绍亚马逊公司收购 iRobot 公司的新闻。这篇新闻报道中一共描述了四个事件,其中两个是收购事件,分别发生在不同的时间。另两个分别为创立公司的事件和合作的事件。这些事件是由其发生的时间顺序连接起来的。除了事件,这篇新闻也包含其他实体和时间,这些实体和时间之间也由相应的关系相连。
这样看来一个非结构化的网页信息,通过解析出文档中的文本和段落、对段落进行语义分析,抽取事件实体和关系,我们就可以构造事件图谱。也就是将非结构化数据转化成结构化的信息。有了结构化的信息,就更容易进行对信息的理解和处理。这样的信息可以应用于搜索、问答等信息获取场景,或者是金融领域的风险监控、量化投资等业务场景中。
事件链是一种特殊的事件图谱,是事件图谱的简化模式。它主要关注的是一个参与者发生的一系列事件和事件之间的关系。从上图可以看出左侧的事件图谱可以简化成右边的两个事件链。事件链中只包含简化节点,其他元素都可看作事件链的属性信息。这种简化对事件图谱的落地应用是有帮助的。事件图谱的关系和节点简化后,模型对图谱的学习和处理都只针对一种节点,和事件间的一种关系,降低了这种问题的复杂度。虽然有所简化,但事件中的主要信息还是会保留下来,比如事件类型,事件主体等信息。
下面来看一个事件链是如何进行预测。
上图是一个事件链的预测模型。它主要由三部分组成,第一部分是事件表示,这里有当前事件,历史事件和最终我们想预测的文本中的事件。历史事件和要预测的事件,它们表示的触发词和事件元素拼接起来之后可以更好的捕捉历史信息。将事件的上下文表示和历史表示结合起来就进入到第二部分,事件的序列表示,这里用到了一个 LSTM 的网络结构,它可以捕捉事件和事件之间的时序关系,将事件先后顺序信息融入到事件表示中来。最后包含时间顺序关系的事件表示会被输入给动态网络中,这个网路可以用来对候选事件和给定的新闻中的事件进行预测。比如候选事件类型有几十种,那么我们就根据当前新闻中已经见到的事件类型来预测哪一个事件可能是这个主体未来会发生的比较大的事件类型。结果是给出事件类型的分布。
这里需要强调的一点是,这个模型的预测结果并不是预测这个公司未来一定会发生的事件,而是给出这样一些辅助信息来为分析、预测、研判提供依据。
上面所讲到的事件链和事件预测,是对还没发生的情况进行预测和判断。事件预测其实也能够对已经发生的事件提供一些有用的帮助。
下面我们看另一个例子。这个例子是根据已经发生的事件提供一些有用的帮助。
这种基于事件库的事件问答,可以支持自然语言对事件的搜索。我们首先在语料库进行抽取,建立结构化事件库,每种类型事件会建立一个表,表中的各个字段表示不同的事件元素,结合 NL2SQL 的技术可以把查询语句转化成数据库的查询语句。这样我们就可以在刚刚建立好的表格中查找到准确的事件类型。这和我们目前市面上通用的搜索引擎来搜索事件的体验是不一样的。搜索引擎返回的结果是这个事件类型的很多种新闻,即使找到相关新闻,看到的结果也是一篇完整报道而不是具体事件的具体信息。通过基于事件库的事件问答,我们可以更精准的针对事件进行问答搜索。
通过上图的例子可以看到事件分析在具体场景下可以如何进行分析。企业的股价波动是市场关注的重点。基于事件的股价波动也是事件分析中 NLP 和金融领域结合的一个场景,它可以实现市场信息和股价波动变模。上图是模型中给出两个特征,一类是表征具体企业的,另一类是表征企业与企业之间关系。我们引入事件分析可以抽取事件类型以及参与事件的不同公司。抽取出的事件类型和公司可以提供的两类信息,一个是事件的表示,它可以成为一个特征,与企业特征融合。企业与事件的关系可以构造企业间的关联关系模块。再加入既有的特征,比如针对企业的技术指标或企业关系图谱。将两者结合我们可以构造出具有企业信息和关系信息的图谱。根据这个图谱我们运用 Graph Attention Network 捕捉企业之间的关系对企业股价波动表现的影响。将股价波动作为模型学习的目标来训练模型,我们得到的模型网络结构可以达到对公司从新闻产业类图谱、企业关系图谱这样的特征得到企业未来特征的一个判断,同时通过 Attention 模型的分析,也可以知道波动主要来自于哪些模块,是事件类型的模块还是事件关系的模块。并且企业之间关系的建模也可以分析这种影响在相关企业之间是如何进行传播的。这在金融领域中也可以叫做动量溢出的效用。
综合前面我们介绍的各种事件分析的技术和场景。我们总结出了完整的事件分析框架。(如下图)
它提供了几大能力:
① 首先,它可以搜索某个事件或某主体的各类事件。
② 其次,它可以提供通过产业链搜索某公司同行业的相关各类事件,可以是产业链或公司链。
③ 这个框架还可以根据某公司的搜索结果预测未来可能发生的事件。
这个框架的优势是,它基于预训练模型,有迁移学习的能力,可以支持 zero-shot/few-shot 训练,冷启动快。并且这种体系化的方法能力比较全面,能支持丰富的场景。
不是所有的场景都需要框架中的所有模块,可以根据需求将模块拆分出来单独使用。
二、金融事件分析技术
金融事件分析技术中比较重要的两块内容分别为事件检测和事件抽取。
事件检测任务的目标是从文本中抽取出事件并进行分类。通常是抽取触发词进行事件检测,但也有些办法是无触发词抽取的事件检测。这类问题的挑战是触发词的标注,或者发生语义迁移、事件拆分、事件定义变化等问题时需要我们重新标注数据。这类问题在实际场景中经常会出现。我们虽然有一套自己的事件检测方案,但是应用到不同领域或面对不同客户需求时,它们的事件体系都有很大差别,如何结合已有的模型和数据更好的去支持事件体系的变化是我们目前面对的最大挑战。目前采用的方法是基于提示词和预训练模型的事件检测。根据事件类型的 Prompt 我们可以更好的去做数据迁移或 few-shot 场景的模型训练。
上图展示了基于触发词的模型和方法。根据事件类型的 Prompt,模型的输入可以进行 token 级别的标注,这样可以抽取相应事件的触发词。如果根据当前的 Prompt 进行触发词变换的话,对应的事件类型和触发词可以进行相应的变化。通过在公开数据集上的数据对比,可以看出在全量数据中,我们的模型的表现比以往方法有比较大的提升,即使在 few-shot 情况下,我们的模型表现也要优于其他模型。
事件抽取任务是事件检测任务功能的扩展。它不仅识别出事件类型和触发词,还可以提取出事件中的相应元素。这对事件分析要求信息比较完整的场景有着较大的作用。上图中的例子,可以抽取出更细粒度的信息。事件抽取的挑战包括定义完整的事件体系中,事件元素会比较多,数据的标注需要领域专家来完成,成本比较高,难以扩展到很多的事件类型。我们目前的解决方案是利用预训练模型和 Prompt,基于生成式的方法在标注数据更少的场景下也能有不错的模型性能,具有更高的数据利用率和灵活性,更容易扩展到新的事件类型。
事件抽取任务是事件检测任务功能的扩展。它不仅识别出事件类型和触发词,还可以提取出事件中的相应元素。这对事件分析要求信息比较完整的场景有着较大的作用。上图中的例子,可以抽取出更细粒度的信息。事件抽取的挑战包括定义完整的事件体系中,事件元素会比较多,数据的标注需要领域专家来完成,成本比较高,难以扩展到很多的事件类型。我们目前的解决方案是利用预训练模型和 Prompt,基于生成式的方法在标注数据更少的场景下也能有不错的模型性能,具有更高的数据利用率和灵活性,更容易扩展到新的事件类型。
上图中是一个基于模板的生成式事件抽取方法。这个抽取方法定义了几个重要的概念。首先在抽取前我们要预先定义模板,有了模板后,可以在训练时提供给模型,在定义新事件时有些元素与之前事件有关联,这些信息也可以预先提供给模型。通过这种方法,模型可以在少量数据下学习新的事件类型。
虽然上面方法可以在一定程度上解决事件抽取问题,但是也还有很多改进的空间。比如目前方法触发词和事件元素的联系较弱;推理时需要轮询所有事件类型,计算量大推理时间长;事件检测和事件要素抽取模块采用 Pipeline 组织,存在错误传播。
我们根据上面提出的问题,改进了模型,提出了另一个基于触发词检测增强的生成式事件抽取方法 TDE-GTEE。
(Ge Shi, Yunyue Su, Yongliang Ma and Ming Zhou (2023). A Hybrid Detection and Generation Framework with Separate Encoders for Event Extraction. In Proceedings of the 17th Conference of the European Chapter of the Association for Computational Linguistics: Main Volume. Association for Computational Linguistics.)
在这个方法中,事件检测模块提供了事件触发词的信息。在输入中我们会标注触发词,并且根据事件类型信息选择相应的模板。这种输入和事件模板后面组合在一起后,就可以构成事件检测模块的表示。这种表示会给入话题模型,最终得到填充后的模板。这个模型和上一个模型的不同是这个模型多了一个触发词的表示,同时也会将上下文信息结合起来。这样解决刚才说的第一种问题,触发词和触发词抽取元素之间的联系不多的问题。这个模型就可以构造两者之间的显示关系。同时通过触发词输入,我们可以得知触发词的相关事件类型。这样我们可以将不相关的事件类型过滤掉。事件检测模块只会针对相关的事件类型进行事件抽取。最后事件检测模块和事件抽取模块可以构成一个端到端的联合训练。这种模型就可以解决前文提到的另外两个问题。
TDE-GTEE 模型在公开数据集 ACE 和 ERE 上都达到了 SOTA 水平。在实验中我们用了全量数据。为了验证此模型在少量样本下的表现,我们也通过对事件检测模块做了一些调整比如使用基于 Prompt 的方式替换原先的多分类方式。在 zero-shot/few-shot 上模型也可以达到很好的效果。我们相信这个模型可以在实际场景上得到广泛的应用。
三、总结和展望
事件分析技术在金融领域应用广泛,场景也很多。一个完善涵盖事件分析体系框架将为金融领域的信息理解提供强有力的技术支持。
澜舟科技在金融事件分析领域中提出的 TDE-GTEE 等方法可以达到 SOTA 水平,在少样本和零样本场景下也有很好的表现。我们将在金融事件分析领域持续推进技术进步和落地产品化。
四、问答环节
Q1:是否有专门针对事件图谱的数据库,传统的图数据库如 Neo4j 是否适合存储和管理事件图谱?
A1:是有专门针对事件图谱的数据库,有些数据的提供商有提供这类数据库。比如澜舟科技,蚂蚁集团等公司,也会在其公司内部构建自己的数据库。Neo4j 是可以用来进行事件图谱的存储和管理。根据使用场景不同,在复杂场景下,Neo4j 更适合来进行存储和管理。如果简化成事件链,事件的表示可以更灵活,我们做的是将数据从文本中抽取出来生成事件链作为模型的训练数据进行训练。训练中不涉及图谱的运算。
Q2:股票波动分析的效果该如何评估?
A2:主要有两种方式。我们在具体模型的构造和评估的过程中,更多是依赖于股票市场的信息。可以理解为量化交易中的回测,我们运用历史数据进行训练和评估。另外一种就是在真实场景中,我们会用人工来判断,比如根据企业的新闻和股票量价交易的技术指标预测未来一个月的股价波动。我们会具体去看这一个月是否真的会发生股价波动。如果波动发生,会去分析对应的事件类型,对应的股价的量价信息等元素来判断是否存在强因果关系。