Shiyao Cui, et al., “Label Enhanced Event Detection with Heterogeneous Graph Attention Networks”, arXiv 2020
目录
展开
1 简介
- 姓名:L-HGAT
- 机构:信工所 崔诗尧 柳厅文
- 任务:中文 ED
- 动机:① 传统的 lattice 方法不能很好地结合 char & word info ② label 的表示也可以用来 guide 分类
- 方法:基于序列标注,只不过在 BERT 和 CRF 之间,又加个图优化 char 的 embedding;以及加上 match proto 的辅助任务
- 建图:字和词作为节点,BERT + BiLSTM 初始化;相邻字之间、词与其包含的字之间连边
- HGAT:作者将 attention 的操作解耦了。同类边的先做 attn agg,再把三类边的 agg 结果再来一次 attn agg
- matcher:序列标注嘛,除了 O 标签,其它每个标签都用训练集的所有样本平均,得到标签的 prototype,loss 里面加个 match loss
- 性能:作者说“和 SOTA models 对比”,结果也是比他们都高,但是一直没说自己是 SOTA,这是太谦虚了?还是没和真正的 SOTA 比?
- 短评:这两个出发点感觉都还挺容易想到的,感觉是看了图和小样本的工作,自然而然就迁移到自己的任务上来了?不过具体的实现上,还是挺让我惊喜的,HGAT 很有创新(就是搞不动它的 motivation
2 方法
略
3 实验
- 中文 ① 纯基于 word ② 纯基于 char ③ 基于 w+c 总体性能 ③ > ① > ②,所以中文里面,word 比 char 更重要?
- HGAT promotes more adequate information propagation between words and characters through our constructed heterogeneous graph, thus more potential event triggers are detected, leading to higher Recall; trigger-prototype-based embeddings of event labels provide semantic clues to guide classification, and margin loss enhances our model to discriminate confusing labels, leading to higher Precision.
4 思考
- node embedding 初始化的时候,字使用 BERT + Bi-LSTM,词却是直接用 BERT。感觉是根据实验结果选出来的?不过,具体为什么 BERT 和 BERT + Bi-LSTM 做序列标注会各有输赢,感觉不还好解释诶?
- 关于构图的设计:
- 本文中为啥不连接相邻的词和词之间的边呢?
- 这种“refine token embedding graph”连边的时候,感觉所有边都是无向的,会比较有道理。而且必连 adj 边。
- 本文的图其实都是无向边,只不过是作者把 c-w 的双向的边拆成两种单向的了,如果用 RGCN,这两种肯定也是不同的 weight。为什么要拆成两类?不是很理解,后面对这两种也没有任何区分。
- 那种“inference graph”里面设计连边的时候,才是要用有向的边,会比较有 reasoning 的感觉?(这里的有向,可能就是 attention matrix 归一化的时候使用行 or 列归一化的不同?还没有仔细想怎么实现)
- 原先 GAT 的 attention aggregation 是拼接 + linear + LeakyReLU 得到分数。本文中,前面的 attn agg 是用的 GAT 的这种计算 attn score 的方法,后面的 type attention 这个我没搞懂:$W_{i,\tau} = \frac{1}{|C_i|} q\cdot \text{tanh}(W\cdot z_i^\tau + b$。为什么用 tanh?(换句话说,为什么要有负的分数?)q 是什么?(原文:q is the semantic level attention vector 没懂,前面也没提到)这样分成两步聚合,又有什么好处呢?另外,HGAT 没加自环?即使文章只用了两层,那不也很容易过平滑吗?没加自环是忘啦?如果要是加自环,自然的想法肯定是后面这步加自环,那可不可以两步都加自环呢?
- 文中的 label embedding 是通过对所有样本求平均得到的 prototype,似乎是来自 FSL。这就给了我一个启发:k-means 分类也就可以作为分类的一个辅助任务?感觉这个是可以推广到所有分类任务的。另外,一开始文中说 label embedding,我还以为直接就是标签文本对应的 embedding 呢,那就又是来自 0-shot 的做法了。如果都用呢?比如 label embedding = 样本的平均 + $\lambda$ 标签文本的 embedding(?)
- 计算完一个词和 prototype 的 matching 分数之后,作者设计的 loss 是这样:$\max(m + s_i – s_t, 0)$,就是让这个词和正确标签的分数比和其他所有标签的分数都高一个 margin m。作者优化用 SGD 是不是和这里的 max 函数有关?感觉很少在 NLP 里见到 SGD 哇?