🔗原文链接:https://ivenwang.com/2020/06/16/eesurvey/
p.s. 这个北大学长的博客真的做得好好啊,向他学习,他的研究方向也是信息抽取,他读了真的好多好多的论文,太厉害了。
1 事件抽取的任务
事件抽取(EE)是从文本中提取事件的关键元素,比如“5W1H”这种。EE 分成 closed-domain 和 open-domain,closed-domain 是给定要抽取的 event type 和 argument role,抽取关键词做分类问题;open-domain 是没有设计好的结构,主要任务就是检验文本里有没有事件,以及对事件聚类,并给每一类一个 event type。
2 事件抽取的数据集
ACE、TAC-KBP、TDT 略
3 基于模式匹配的事件抽取
3.1 手动模式匹配
AutoSlog([1])第一次引入了 Part of Speech (POS)的标注,按照词性的模板动手去匹配,每次新找到一个匹配到词性的模板的,比如“
PALKA [2] 提出一个事件可以有多个 argument,且如果一句话有多件事,就切成多句话。
手动模式匹配的方法只能针对固定的领域(比如生物、金融等),且需要操作者有专业知识,且花费大量时间精力,且无法标很大的规模。当然,这使得事件抽取的准确率非常高。
3.2 半自动模式匹配
AutoSlog-TS [3] 是 [1] 自己改的。以前不是新发现的加到 trigger dict 里面嘛,现在就直接把新发现的 event pattern 记录下来,以后匹配 event pattern。这样就可以用 event pattern 自动匹配了。
4 基于机器学习的事件抽取
都是有监督学习,都是先 trigger 再 argument。
4.1 机器学习用到的文本特征
文本特征分成三类,即词汇特征、句法特征、语义特征。
词汇特征包括:原单词、全改成小写的单词、词性还原之后的单词、词性标签(POS tag)。
句法特征来自句法依存树,即找到各部分的句法关系。句法特征包括:在 dependency path 上的标签(主谓宾等)、dependency word 及其词汇特征、词在句法树的深度。
语义特征包括:同义词及其词汇特征、event type、entity type。
以上特征一开始是基于词袋模型的独热码。机器学习的目标,就是提取一句话最关键的特征,并且把这些特征整合成一个高维特征,来进行后续的分类。
4.2 Pipeline 方法
4.2.1 句子级的事件提取
[4] 是 trigger 和 argument 任务各自一个分类器。前一个叫做 TiMBL,用最近邻学习 trigger 识别模型,输入的包括了 lexical features, WordNet features, context features, dependency features and related entity features;后一个叫做 MegaM,用最大熵学习 argument 识别,输入包括 the features of trigger word, event type, entity mention, entity type, and dependency path between trigger word and entity。(这些 feature 都可以参考!)
还有方法结合了模式匹配和机器学习。[5] 先用模式匹配,找出几个潜在的 event type,再把这些潜在的 event type 和其他特征编码输入机器学习模型,帮助 trigger 识别。[6] 构建了一个 trigger-argument 的关系库,帮助 argument type 识别。
中文需要先分词得到 token,但是可能存在 trigger 被分成 多个 token,或者只是 token 的一部分。为了解决这个问题,[7] 先在句子里去找各种 event type 的同义词,作为 trigger;[8] 同时使用 word 和 character 特征输入,其中 character-level 特征包括这个字符和它的邻居;[9] 就暴力了:如果一个字符是 trigger,那么所有包含这个字符的词也都是 trigger,trigger 里面的每一个字符,都将和它的前后字符组合,成为可能的 trigger。
4.2.2 文章级的事件提取
如果我们是在一个大的语境(比如一篇文章,或多篇文章)的一句话做事件提取,那我们可以利用文章级的特征,来增加准确率。文章级的特征有两类用法。一类是用全局的(文章级)特征构造辅助模型,辅助之前的局部的(句子级)模型;另一类是把文章级特征加入到句子级模型的输入里。下面分别介绍。
辅助模型: [10] 认为,同一文章、不同句子之间的 argument 会有一致性,包括词义的一致性和 argument role 的一致性。为了用上这种一致性,他们把相似主题的 document 分类,每类都建立 trigger sense 和 argument role 的推断规则。[11] 把这种方法推广到了不同文章之间。[12] 提出了两种全局信息,即事件与事件的关系,和主题与事件的关系,用逻辑软概率模型 + 全局信息,处理 local 的事件提取结果。
特征输入: [13] 认为,相似的 entity,会在相似的事件里扮演相似的角色。因此,他们定义了包括 entity subtype、entity subtype 之间的共现概率、entity subtype 的 argument 等特征,来训练句子级别的 SVM 分类器。[14] 利用主题模型,将文章的主题作为特征输入分类器。
4.3 Joint 方法
上述的 pipeline 方法 ① 会有误差积累 ② 后一个分类器结果无法微调前一个分类器 ③ 两个子任务之间的关系没有用上。Joint 方法也分成两类:一类是引入子任务之间的关系,让各部分模型可以共同优化;另一类是真正的 joint 方法,一口气提取 trigger 和 argument。
子任务关系:[15] 通过整数线性规划,联系了基于 CRF 和基于最大熵的两个分类器,使之联合优化。
真正的 joint:[16] 把事件抽取当做 structured learning 问题,用 structured perceptron model 解决。具体来讲,the outcome of the entire sentence can be considered as a graph in which trigger or argument is represented as node, and the argument role is represented as a typed edge from a trigger to its argument. They applied the beam-search to perform inexact decoding on the graph to capture the dependencies between triggers and arguments. (没看懂,TODO)
5 基于深度学习的事件抽取
上面的机器学习方法,最重要的环节还是特征工程,这还是有领域限制、专业人员才能标特征等等。另外,特征大多是独热码,稀疏数据对模型训练有很大影响。深度神经网络就在隐层中,把底层的输入转换成了更抽象的特征表示,就能解决上述问题。一般过程是构建一个神经网络,将词嵌入作为输入并输出每个词的分类结果,即,对一个词是否是 trigger 进行分类,如果是,则对其 argument role 分类。
5.1 基于卷积神经网络
[17] 是很朴素的想法,即输入词及其邻居的 embedding,卷积、池化,得到特征表示,直接分类。但是一句话不一定只有一件事呀![18] 就采用了动态多池化,把句子用 trigger 分成多个部分,分别最大池化(这个我有写读后感,详见 DMCNN)。上面俩都是做 localize 的卷积,[19] 是把句子里任意不连续的 k 个词,都卷积-池化,然后挑选最重要的。
CNN 的方法也有一些改进: [20] 设计了一种语义增强的深度学习模型,称为 Dual-CNN,该模型在典型的 CNN 中添加了语义层,以捕获上下文信息。[21] 提出了一个并行多池化卷积神经网络(PMCNN),它可以捕获句子的组合语义特征,以进行医学事件提取。PMCNN 还利用基于依存关系的 embedding 来进行单词的语义和句法表示,并采用整流线性单元作为非线性函数。[22] 用 bootstrapping 方法建立了全局上下文的表示,并将表示集成到 CNN 中进行事件提取。
5.2 基于循环神经网络
CNN ① 多是 pipeline 方法,会误差积累 ② 输入的是词向量的拼接,并不能找到距离比较远的词之间的关系,从而用上整句话的信息
[23] 使用 Bi-GRU,分成编码阶段和预测阶段,利用了 trigger subtype 之间、argument roles 之间、trigger subtype 和 argument roles 之间的依存关系(这个我也有写读后感,详见 JRNN)。
[24] 使用了句法结构,来增强 RNN,即把一些有关系词对应的 RNN 单元连上。[25] 就更直接了,直接用 dependency tree 作为 Bi-LSTM 的结构。[26] 更进一步,对于每一个词,都有一个以它为根的 dependency tree 的 LSTM 结构(叫做 Tree-LSTM),而且还是中文的事件抽取。[27] 把外部的实体知识引入 Tree-LSTM,做医学的实体抽取。
RNN 还能做文章级的事件抽取。[28] 是在 Bi-LSTM 的基础上,输入里加入了一个“概率向量”,表示当前文档。
上面的 RNN 都是 LSTM 或 GRU,有门控单元结构,但是这非常耗时。[29] 的 SRU 避免了当前单元和上一单元的乘法,让计算量大大减小。[30] 就构建了 Bi-SRU,一个用来学习词汇级的表示,另一个用来学习字符级的表示。
5.3 基于图神经网络
GNN 是图结构的神经元组织到一起的,是非欧空间的结构。用 GNN 做事件抽取,核心问题是要先给文本中的词构建出图结构。
[31] 采用了一种语义分析技术,称为抽象意义表示(AMR),可以规范文本中的许多词汇和句法变体,并输出有向无环图,以捕获文本“谁对谁做了什么”的概念。另外,他们认为事件结构是 AMR 图的子图,并将事件提取任务转换为子图识别问题。他们训练了图 LSTM 模型,以识别用于生物医学事件提取的事件子图。
另外的方法是把 dependency tree 变做图。[32] 把 dependency tree 变成双向的,再加上每个词到自己的边,用这个图去进行 localized 卷积操作,就能不仅提取上下文特征,还能有长距离的、基于依存关系的词语特征。
5.4 多种神经网络混合
建立这种混合模型的常用方法,是使用不同的神经网络来学习不同类型的单词表示。 例如,[33] 和 [34] 都首先在图卷积运算之前,用 Bi-LSTM 来获取初始单词表示。
也有把 CNN 和 RNN 融合的。比如 [35] 就直接把 CNN 和 Bi-LSTM 的结果拼一起,再分类(这个我也有写读后感,详见 这里)。[36] 也是 CNN 和 Bi-LSTM,只不过这里的 Bi-LSTM 的序列输出结果被直接拼接,作为文章的特征,再把 CNN 得到的词的特征拼到一起,再分类。
另一种就是 GAN,即两个神经网络互相对抗,一个生成,一个判别真假。下面几个都是用 RNN 作为生成和对抗网络。在训练过程中,[37] 提出用双通道自我调节学习策略来调节学习过程。在自我调节过程中,对生成网络进行训练以产生最虚假的特征。而带有记忆抑制器的判别网络,经过训练可以消除虚假特征。[38] 提出了一种对抗模仿策略,将知识提炼模块纳入特征编码过程。在他们的混合模型中,使用了分别为 Bi-GRU 的教师编码器和学生编码器。教师编码器通过 gold annotations(我也不知道是啥)进行训练,而学生编码器则通过对抗式模仿学习,通过使其输出与教师编码器的输出之间的距离最小化来进行训练。[39] 使用强化学习(RL)策略在训练过程中更新了 Q 表,其中 Q 表记录了根据系统状态和动作计算出的奖励值。(这段我都不懂,翻译的)
5.5 Attention 机制
Attention 机制是一种区分机制,可根据其对给定任务的重要性,引导神经模型对输入的每个成分进行不平等的对待,且这些权重从模型训练过程中自学而来。
应该给谁更多注意力呢?[40] 认为,trigger 的 argument 应比其他词受到更多关注。为此,他们首先构造了 gold attention vectors,表示 argument 及其上下文的编码。此外,他们为每个单词设计了两个上下文关注向量:一个是前后单词;另一个是前后 entity,两个拼一起,最小化事件检测和注意差异的加权损失。
在词级注意力机制中,来自句法结构里面的 entity 关系也可以用来训练注意力 [41,42]。他的想法就是,句法依存关系可以让两个很远的词之产生关系。[43] 是中文的,字符级注意机制。
还有人把词级和句子级的注意力融合,以增强在有多个句子的文档里的事件提取。[44] 认为,在文章里,每句话即使是不同的 event type,也都和文章主题相关。他们提出一种基于 hierarchical and supervised attention mechanism 的 DEEB-RNN(以后看),用词汇级的注意力提取 trigger,句子级注意力 找 event(?)。这样就得到两个 gold attention vectors,一个是基于 trigger 的词汇级 attention,另一个是如果有 trigger,那就是句子级的 attention?[45] 提出了 HBT-NGMA 模型,是一个 gated 多层注意力机制,抽取句子之间的和句子里面的信息。
除了利用单词和句子之外,还有人整合了额外的知识,例如使用多语言知识 [46] 或先验 trigger 语料库 [47]。[46] 检查了 ACE 数据集里标注的数据,发现 57% 的 trigger 都是模糊的,就认为多语言可以解决这个模糊。他们提出了 gated multilingual attention,包括 mono-lingual context attention 和 gated cross-lingual attention(这都什么玩意?哭了)后者就是用先用机器翻译,然后再咋咋的。[47] 就把先验 trigger 和 attention 整合。(attention 这一大块,每个文章都得看啊!)