论文笔记 | Nugget Proposal Networks for Chinese Event Detection
原论文的著作权属于中科院,本文只针对原论文进行了学习及记录。
1. 前言
近几年,基于神经网络的方法在事件检测任务中占据了主导地位,通过神经网络对句子中的每一个单词进行分类,找出存在的触发词并进行分类,是英文事件检测的常见思路。但对于没有自然分割符的语言,比如中文,我们需要先进行分词,再利用上述的方法对分词后的句子进行分析和标注。这样做会导致两个问题:
1. 分词错误问题。错误的分词会在系统中产生错误传递,最终影响到系统的整体表现;
2. 触发词–单词匹配问题。这个问题又可以分成两个小问题,我们用下图加以解释:
(a) 虽然“并购”是一个词,分词没有发生错误,但“并”和“购”在此句中应该被识别为两个不同的触发词,这种问题叫做part-of-word trigger。
(b) “伤”是一个名词,无法作为trigger,但“受了伤”是中文的一种固有表达,三个单词共同组成了Injure 事件的触发词,这种问题叫做cross-words trigger。
ACE数据集以及本次试验中所使用的另一数据集Rich ERE中均存在上述问题,具体比例如下:
由于分词会导致上述两种问题的出现,一些研究人员提出不进行分词,而直接以字为单位,对句子中的每一个字进行标注。这一方法可以避免触发词–单词匹配的问题,但又会引入新的问题:字相对于词表达的信息不够完整,对句子中的所有字进行 word embedding 后再分析,往往不能充分表达句子的语义信息,使得对于同一模型,基于字的方法效果往往不如基于词的方法效果好。
2. 思路
本文提出了一个新的思路,名为Nugget Proposal Networks (NPNs) , 该模型有相较于之前的方法,做了两点创新:
第一、将单词嵌入和字嵌入得到的句子向量进行结合,得到一个包含更丰富信息的输入向量,此过程在本文中被称为 Hybrid Char-Word Representation Learning。本文对为何将单词信息和字信息结合做出了解释。首先,汉语中许多的触发词都具有内部的语言结构,例如”方法+动词”:砍杀,枪杀;或者”动词+助动词+名词”:吃了饭,睡了觉等等,这些语言结构适合从字级别的信息中学习;但同时,字级别的信息有时会导致信息不充分,比如在辨别”杀人”和“杀青”这两个触发词时,如果拥有词级别的信息,我们可以更好的对这两个词的不同进行分辨,从而避免触发词的误分类。
第二、将触发词识别和触发词分类两个功能分割开,形成两个不同的功能模块。进行触发词识别的模块被称为Trigger Nugget Generator,它通过输入的句子向量为句子选出合适的触发词;进行触发词分类的模块称为Event Type Classifier,这个模块相对来说更容易解释,它对输入的句子向量进行softmax分类,来对Trigger进行分类。整个模型的结构可以用下图表示:
3. 模型
3.1 Hybrid Representation Learning
之前我们说到,为了学习到trigger中的内部结构关系,同时充分利用词的语义信息,我们需要将词级别的特征信息和字级别的特征信息结合到一起。那么这部分的需要进行的操作就分为两步,一,特征信息抽取;二、信息融合
3.1.1 特征信息抽取
特征信息抽取使用了DMCNN这一模型(我之前写过一个DMCNN的介绍,会在之后上传),并且对于单词级别的信息抽取和字级别的信息抽取采用了相同的方法。以词级别的信息作为例子,特征信息抽取模型的结构如下:
给定一个句子中的n个token ,以及我们所关心的token ,的向量表示由的word embedding(WE)以及与的相对位置position embedding拼接而成。之后,通过卷积操作,我们可以得到一个个的卷积结果。卷积操作如下:
其中代表第i个卷积核,是到拼接形成的矩阵,是偏置项。随后,进行Dynamic Multi-Pooling操作,及以进行分割,将卷积结果池化为两个部分。
将所有DMP的结果拼接起来,得到Compositional Feature。将 及,组合成的向量作为Lexical Feature, 并将Lexical Feature 以及Compositional Feature相结合,得到最终的Token Level Feature。词级别的Token Level Feature 称为,字级别的Token Level Feature 称为
3.1.2 字、词级别信息融合
在得到以及后,我们首先要做的是将二者的维度统一。通过两个全连接层,我们将和变换为维的向量和。之后,利用三种不同的方法,可以得到三种不同的Hybrid Representation:
1. Concat Hybrid
直接将和拼接起来:
2. General Hybrid
将和成比例相加,得到Hybrid Representation :
其中,为权重矩阵,为偏置项,为sigmoid函数,得到的为一维的向量。
3. Task-specific Hybrid
上面两种方法最终输出一个向量,看似简单,但是实际上并不具有针对性,要知道,Representation Learning的结果最终会输入到两个不同的模块(Trigger Nugget Generator, Event Type Classifier)之中,直观上,我们认为Trigger Nugget Generator 需要学习触发词内部的结构信息,所以字级别的特征更为重要;而Event Type Classifier 会更需要词级别的信息,所以,在本论文中,为了应对两种不同的任务,我们产生两个不同的向量作为对应的输入;
总体思路与General Hybrid 相同,最终产生的对应Nugget Generator,对应Type Classifier。
3.2 Trigger Nugget Generator
该模块的功能为,给定一个输入向量,能够返回包含输入向量中心词的触发词,其实质是一个分类器。以下图为例,该向量的中心词为”伤”,结果返回包含”伤“的最大长度不超过3的触发词结果。最终返回Offset =3, length =3 的类概率最高,为0.75,则触发词为 “受了伤”。由于实验设定触发词长度最大不超过3,则共有6个触发词可能,加上一个NIL类代表不存在触发词,该模型是一个7分类问题。
模型结构简单:输入->全连接层->softmax
3.3 Event Type Classifier
一旦被标记为非NIL型,即被利用起来,输入到Event Type Classifier之中,为触发词进行类别分类。该归类模型直接将分成35个事件小类,并不包含None类。注意,Trigger Nugget Generator的结果仅控制Event Type Classifier是否被使用,举例说明,”受了伤”这一触发词被识别出来,仅仅决定将被利用,并不会对结果产生其他影响。Event Type Classifier部分模型也十分简单:
输入->全连接层->softmax
3.4 模型训练
根据上面的描述,我们可以看出,Trigger Nugget Generator 和 Event Type Classifier之间没有特别明确的关系,二者连输入数据都不相同,那么”受了伤”这一触发词的识别是如何对”Injure”这一事件分类产生影响的?这就需要模型自身的学习,我们通过将两个功能模块进行联合学习,来使模型内部的参数进行变化,使得当中容易判断出“受了伤”的同时,也倾向于判断时间类型为。假设我们在Trigger Nugget Generator 中共有 个样本,样本集合为 , Event Type Classifier中有个样本,,则有损失函数如下: