论文笔记 – A Convolution BiLSTM Neural Network Model for Chinese Event Extraction

Ying Zeng, Honghui Yang, Yansong Feng, Zheng Wang, Dongyan Zhao, “A Convolution BiLSTM Neural Network Model for Chinese Event Extraction”, NLPCC 2016

1 简介

这篇文章是用 CNN + BiLSTM 做事件抽取。CNN 能提取 local feature,也就是事件抽取任务中的 lexical features,LSTM 可以记住很久之前的特征,在这里就用来提取 sentence-level features

这篇文章的算法分成 trigger 和 argument 两个部分,两部分的模型结构差不多。

2 trigger 识别

首先,对于中文的 trigger 识别,有以下几个特殊的地方:

  1. 需要分词,分词的粒度对于最后的预测也有很大影响。
  2. 会有 cross-word triggers,即多个 token 组成一个 trigger,比如“落入法网”。
  3. 会有 inside-word triggers,即 trigger 可能是 token 里面的一部分,比如“击毙”这一个 token 就含有两个 trigger。

这三个问题是怎么解决的呢?第一个问题,利用 CNN 不同 width 的 kernel 解决;后两个问题,就把输入改成字向量,而非词向量。当然,由于 LSTM 每个单元代表的是子了,就没法把 trigger 识别当做分类问题来做。于是就将其视作 BIO 序列标注的问题,去标出 trigger 的 Begin 和 Inside。

当然,为了对比词向量和字向量的输入,这篇文章都得做,所以词向量输入的,也是解决 BIO 标注问题。下面是词向量输入的 ConvBiLSTM 结构:

左边是整体,右边是 CNN 的局部。输入词向量,通过 BiLSTM 得到表示 $h_t = [\overrightarrow{h_t};\overleftarrow{h_t}]$,再拼合 CNN 对词语 $w_t$ 的特征提取结果 $c_{w_t}$,即是 $w_t$ 既有 lexical 又有 sentence-level 的特征表示,最后过一层 softmax,得到这个词是 B 或 I 或 O 的概率。

CNN 是很普通的 textCNN,略。

基于词向量的模型,可能找不出 inside-word triggers,作者就建立了一个 global errata table,把没找到的手动记下来,然后在测试的时候,就直接用表项做替换。。。

字向量输入的模型,只是改个输入,其他不变。

3 argument 识别

argument 识别是只能输入词向量了(我认为,这是因为之前得到的 trigger 只能以词向量的形式使用)。那与 trigger 识别模型的不同就在于,输入的 embedding 除了纯粹的 word-embedding,还拼上了下列部分:

  1. 当前词是不是 trigger
  2. 当前词的 trigger type
  3. 这个词是不是 entity
  4. 这个词的 entity type( 3 和 4 都是 ACE 数据集中自带的)

argument 识别就不是 BIO 标注了,就还是分类。具体在模型上,在 CNN 中,把整句话作为邻居来卷积(这里我不明白,卷积不就是为了得到 localize 特征吗?为什么要整句卷?那不就是全连接网络了吗??)

4 实验

作者对比了 CNN + word embedding、Bi-LSTM + word embedding、CNN + Bi-LSTM + word embedding、CNN + Bi-LSTM + character embedding,以及两个 baseline,得到以下结论:

在 trigger 识别问题上:

  1. 词向量的准确率更好,字向量的召回率更好。作者分析,有如下原因:
    1. 词向量的存在之前说的 cross-word 和 inside-word 问题,字向量的在这些时候更好,召回率就高。
    2. 字向量的需要额外学习分词、会让 RNN 更长,词向量能表示更多的语义信息,因此词向量的准确度好。
  2. errata table 非常有用,准确率召回率都有提升。
  3. CNN + Bi-LSTM 要比单纯用 CNN 或者单纯用 Bi-LSTM 都好。

在 argument 识别问题上:

  1. 对于词向量和字向量两种方法得到的 trigger,后者的 trigger 更精确,所以在 argument 识别时,准确率召回率都是字向量的更好。
  2. errata table 没那么有用了,甚至准确率还会下降。

5 总结

中文没有分词是真的烦。这篇文章用的字向量,那能不能同时用呢?即不同范围的特征,我都用上呢?

[mathjax]

发表评论