导读:目前百度事件图谱已构建了千万级规模的事件图谱,在收录时效上达到分钟级。事件图谱技术已应用到搜索、信息流等百度内部的产品中,相关能力也对外输出到媒体等多个行业。另外,事件图谱的前沿推理技术在金融领域的探索也初步取得成果,并已形成一个金融事件归因和预测的推理平台。本文将为大家详细介绍百度的事件图谱技术与应用,主要内容包括:
知识图谱构建的目的,其实是为了把世界上纷繁复杂的、各种各样的客观事实通过图谱的方式组织起来,让机器能够通过这个图谱更好地实现理解、抽取、推理等任务,从而提升我们处理信息的效率。最基础的知识图谱包含实体、关系、属性等图谱最核心的知识,而更广义的知识图谱则包含更多的知识,如概念、标签、评论等。事件也是一种知识,一种比较复杂的知识。事件知识的复杂性在于事件并不会对应到现实世界中的某一个具体的实体,它是一系列实体,以不同的角色在一段时间内参与活动的一个抽象。
百度于2017年底就开始了事件图谱方向的研究。经过了三年的发展,目前已经在多个不同的方向和领域落地。
事件图谱是什么?事件图谱是包含事件、事件属性、事件间关联关系的以事件为基本单位的知识网络。上图是以宋仲基、宋慧乔从相恋到结婚、再到离婚这么一系列事件及其相关内容所组成的事件图谱的示意图。每个事件都有自己的事件类型,不同的事件类型拥有着不同的角色。如双宋结婚事件,它在事件图谱中的内容就是,一个结婚类型的事件,这个类型的事件有两个角色,其中,丈夫角色的值是宋仲基,而妻子角色的值是宋慧乔。事件之间的关系也在事件图谱的构建范围内,包括时序、因果、从属等。除了事件图谱的内容外,在上图中,我们还可以看到事件图谱与实体图谱是有对应关系的,事件的发生是可能会触发实体与实体间关系或属性的变化的,例如,上面的例子中,结婚事件的发生导致了双宋的关系从男女朋友关系变成丈夫与妻子的关系。
为什么要做事件图谱?有两个方面原因:
第一方面,事件其实更符合人类对客观世界的理解。例如,以桃园三结义这幅图为例。在没有知识或弱知识的时候,我们可以知道这幅图里有三个人,有酒和树。在有实体知识的时候,我们可以知道这三个人的姓名是刘备、关羽和张飞,树是桃树。直到拥有事件知识的时候,我们才可以知道具体时间在东汉末年,刘备、关羽和张飞三个人在桃园做了结义这一个事情。我们可以看到,只有到事件这个层次上,才能说真正对这幅画有一个比较完整的把握。
另一方面,事件图谱可以对动态的客观世界进行建模。实体图谱会记录了实体的属性和关系,当实体的属性或关系更新时,图谱只会保留它最新的状态。但通过事件图谱,我们能够对属性或关系的整个变化过程进行建模,并且可以将这些事件与变化的进行一一对应。
我们目前正处在一个信息爆炸的时代,无论是个人消费者看新闻,还是专业从业者跟进行业事件消息,我们都不可避免地受到信息过载的影响。一方面存在太多无意义的信息分散了我们的注意力,另一方面当我们关注某个事件时,却又无法快速、全面地获得信息。怎么样去智能化地对事件进行处理,帮助我们更高效的获取和处理事件信息呢?关键就是事件图谱。智能地对事件进行处理的三个方面:事件理解、资源组织、分析决策都需要事件图谱。
刚刚介绍了事件图谱的概述,包括是什么是事件图谱,为什么要做事件图谱。接下来将进一步介绍事件图谱的关键技术:
这是百度事件图谱的技术概览图,主要分成四个层次:数据层、构建层、认知层和应用层。本次分享的重点是事件图谱的构建层技术。
我先分享一下事件图谱跟传统的知识图谱在构建上的区别:
当前百度的事件图谱构建方案如下:
这个过程和传统知识图谱的构建不一样的地方在于:传统知识图谱会先将构建的schema定义出来,然后进行抽取与归一,最后再进行入库。而事件图谱由于缺少可参考的结构化来源,需要先进行事件检测,在检测出大量事件的基础上,才能进行后续的相关操作 ( 构建表示体系、抽取等 )。这是两者非常不同的一个地方。
事件检测的目标是快、准、全地进行客观事件的收录,其主要挑战有三点:
我们的整体方案是一套基于多任务学习进行事件检测的流程。该流程主要分成三个部分:
通过这个检测过程,只要一篇文档中有一部分提到了某个事件就可以进行事件收录,结合百度的高时效新闻流,上面这种流程可以实现分钟级事件收录,并且整体的准确率与覆盖率都可以到90+%。此外,由于上述流程中涉及多个策略模型,我们还尝试了多任务学习框架,上述所提及的多个策略模型在经过多任务学习后,能得到相互增强,在资源消耗降低的同时,每个模型的效果都能得到进一步的提升。
事件表示构建的目标是构建一个高准确、高覆盖的事件知识表示体系,以支持后面事件抽取任务。在这一个任务上,它跟实体的Schema挖掘也是有明显差异的。实体的Schema挖掘绝大部分来源于百科或是网页中的结构化字段,只有少部分可能会涉及Open-P挖掘。以电影为例,这类实体很容易可以找到其对应实体的网页,如豆瓣。从网页上我们就可以清晰地知道一个电影类型的实体会有哪些字段,例如,导演、编剧、主演等。事件的表示就跟实体的Schema完全不同。绝大部分的事件类型其实并不存在一个这样的垂类站点去做这件事情。
因此,我们必须从正文中去挖掘事件类型的属性。比如,“破产”这个事件类型。从类型名可以知道该事件可能会有一个“破产人”属性,但是“债权人”这个属性就必须从该类型相关的正文中才能找到。目前的解决方案是开放挖掘+人工校验。具体来说分成下面几个部分。首先是开放类型挖掘,基于事件检测得到的事件库、日志等数据,我们挖掘出事件对应的类型并进行层次构建。在得到这样一个事件类型体系之后,我们会针对事件类型进行相关资讯召回,再进行每个类型的角色挖掘。最后再进行人工校验。通过这种方式,我们在几十个领域中得到几千个事件类型,以及一万多的事件角色。
第三步是事件抽取的任务。事件抽取的目标是对事件的相关要素进行结构化的抽取。还是以宋仲基、宋慧乔结婚为例,抽取的目标是,将这个事件抽取出来,并且能够识别它是一个结婚的事件类型,并且根据结婚类型的角色,包括时间、地点、男方、女方等,单独抽取出每个角色的具体的值。事件抽取的技术特点是:
事件抽取是当前学术界的热点之一。近年来有很多优秀的事件抽取论文在自然语言处理顶会、顶刊上发表。然而,事件抽取的技术难度依然是较大的,学术上效果还没有达到直接可用的水平,目前在公开权威数据集ACE2005上论元分类任务只有60%左右的F1。
目前百度通过类型角色设计、前后处理、模型优化方面的努力,在特定场景下效果能达到业务需求。但除了效果,事件抽取还有其他方面的挑战。
我们整体的解决方案如右图。针对不同的关注点和文本形态,我们均挖掘出核心的事件句。然后,基于这些事件句,针对不同场景使用不同的抽取技术进行抽取。目前我们已具备的抽取技术包括通用属性抽取、语义角色抽取和自定义的论元抽取。
通用属性抽取的目的是抽取触发词、时间,地点、参与者等通用的事件角色。由于技术是比较通用的,我们采取的是一个多属性联合抽取的模型。这里的ERNIE是百度提出的一个预训练语言模型,在这基础上再加上Bi-LSTM+CRF,同时抽取多个属性。如图所示,该流程是先进行一次事件句的识别,找到关于某个事件的句子。然后,再对这个句子进行多属性联合抽取,并对抽取的结果进行归一。地点归一到国家、省市区县等,时间进行规范化、参与者实体化等等。
自定义论元抽取要解决的问题就是如何根据用户定义的角色少样本甚至零样本地进行事件抽取。我们的方案是基于阅读理解问答的事件抽取模型。
我们把整个事件抽取的流程分成三轮问答:
这个方案中,角色、事件类型这些本来跟模型耦合的东西都解耦了,新的角色和事件类型只需要把它们放到问题中就可以抽取,从而实现少样本、甚至零样本的抽取。相关研究成果已被EMNLP Findings,2020收录。
刚才讲到了两种事件抽取的方式,一种是通用属性抽取,一种是基于问答的论元抽取。通用属性抽取的问题是无法灵活的泛化。阅读理解方案的问题则是效率,因为我们需要对每一个角色都进行单独提问抽取。有没有一种方法可以既具灵活性又具备高效率?我们对这个问题提出了多种不同的方案,其中一种方案是:语义角色抽取。
从左边中间这幅图我们可以看到常见的事件类型跟它的角色是存在一定的关联关系的,但实际上也可以把它们解耦成一个类型和一系列的语义角色的。例如,“收购”类型和角色“收购价格”、“被收购方”和“收购方”是耦合的。如果把所有如“收购价格”、“被收购方”、“收购方”这样的类型角色转化为如“数值”、“受事主体”、“实施主体”这样的与类型解耦的语义角色,我们整体的角色数量就可以就可以从n*类型数这一数量级,降低到只有十几个语义角色的量级。
在这个基础之上我们还可以通过多层指针结构对不同的语义角色同时进行抽取。如右图所示,整个句子只需要一次进入预训练语言模型后,再进入多层指针网络就可以同时抽取所有的角色。
这样既保持了整体的灵活性也保持了抽取的高效率。
事件之间存在多种关系。我们目前定义了4种关系,包括从属关系、共指关系、时序关系和因果关系。由于时间的关系,我本次只分享因果关系。
因果关系的挖掘存在诸多挑战:
下面是一些我们解决这些问题的具体思路:
具体而言,我们的方案如右图所示。通过因果事件的挖掘,我们可以从不同的篇章当中挖掘出大量的因果关系。比如,“生猪存栏环比回升”导致了“猪肉价格明显回落”是一个因果。然后,再对这些抽取出来的因果Pair中的每个事件节点再进行归一,将不同篇章中描述的相同事件归一在一起。归一结束后,我们就可以得到一个能支持多步因果的因果图谱。我们目前已经形成一个节点正确率90+%,节点数、关系数达到百万量级的因果图谱。
此基础上我们就可以进行因果推理了。比如,想知道某个事情是由什么原因导致的?它可能会有什么后果?我们只需要在因果图谱中先定位到这个节点,然后就可以在图谱上面进行基于拓扑的推理。
问题来了,如果说我们需要进行推理的事件在因果语料中不存在,那我们应该怎么样进行推理和挖掘呢?目前我们正在尝试的3个思路如下:
上面我已经讲了事件图谱的检测、表示、抽取以及因果关系,下面我将介绍事件图谱在百度以及行业中的具体应用:
目前百度事件图谱的相关应用主要有这四块。第一块是热点发现,第二块是事件脉络,第三块是资源关联,第四块是因果推理。
在热点发现这一块,我们能够做到分钟级的热点发现。对于行业热点、地域热点等中长尾事件也可以做到分钟级的发现,因此我们可以支持很多对中长尾、小事件敏感的应用场景。目前我们的事件检测已能够支持二十多个行业、三百多个省市的分钟级的热点发现,并在人民网,齐鲁网等数十家媒介机构中落地。
其次是事件脉络。通过事件图谱的整个事件的关联关系,我们在搜索上上线了热点事件脉络,可以将热点事件的前因后果进行关联,并以脉络的形式呈现给用户,大大提升了用户了解热点前因后果的效率。在疫情中,我们也通过事件脉络支持了疫情相关的事件脉络的查询。目前脉络相关的产品也支持了百度智能创作平台、事件脉络视频等众多应用。
第三块是资源关联。事件图谱围绕事件将相关的资源,如资讯、图片、视频等进行关联。目前我们通过这样的技术在“百家号的创作大脑”上面进行了应用,通过事件中心资源组织,辅助作者的内容生产分发效率大幅提升。
最后一块是因果推理。目前,我们在金融领域做了一些因果推理的尝试。我们将5年历史数据的相关因果进行挖掘和提取,构成了一个因果图谱。该图谱目前的规模接近两百万节点与关系。我们能够进行在线、实时的溯因推理。支持推理的证据呈现,也支持多步推理。同时还可以融合企业与供应链图谱,进行上下游事件推理。以 “非洲猪瘟爆发”为例,该事件爆发会导致 “生猪存栏处于低位”,同时也会导致下游“玉米需求”下降,最终影响到与“玉米”行业相关的公司。目前在这个方向上,我们还处于探索阶段,非常欢迎金融圈感兴趣的朋友们跟我们一起合作&探讨。
在推动学界、业界事件相关技术发展方面,我们在2020语言与智能技术竞赛中发布了目前最大的中文事件抽取数据集——DuEE,并吸引了一千多支团队报名。该数据集目前已经对外开源,在千言项目当中可以进行公开下载,同时我们也提供了一个公开的测评榜单,欢迎大家打榜参与,共同推动技术的发展。
在本次分享中,我首先对事件图谱的价值进行了分享,包括认知方面的价值以及应用方面的价值。然后介绍了事件图谱的构建技术,包括检测、表示、抽取以及因果关系。同时也介绍了我们在事理图谱上的一些想法。最后分享了事件图谱的相关应用示例,包括热点发现、事件脉络、资源聚合以及因果推理等。
在未来,百度事件图谱的发展方向主要包括三个方面: