《Rethinking Boundaries: End-To-End Recognition of Discontinous Mentions with Pointer Networks》读后感
@苹果树科技有限公司-AI部
论文链接:
https://www.aaai.org/AAAI21Papers/AAAI-566.FeiH.pdf
1. 导论
整个论文的目的是解决不连续的NER实体解析。
亮点在于: 1、使用了带memory的点网络(可以加强实体边界以及使用先验的实体) 2、模型做决定的时候能使用全局信息
2. 模型架构
2.1 方法概述
整个非连续的NER任务可以使用下面式子来进行描述: 输入: s = {w1, w2, …, wn},n表示句子中字符的个数。 输出:Y = {y1, y2, …, ym},yk=[a, …, b]表示一个实体按顺序排列的索引。(1<=a<=b<=n,论文中表示a<b,感觉这里有问题,因为如果单个字符就表示一个实体呢)
2.2 模型整体架构
加入了两个哨兵字符:<EOM>和<NEXT> 解码的过程:
2.2.1 Input Representation和Transformer Representation
包含了三个部分: 向量xtw是单个词wt的表示,来自于与训练好了的词向量。 向量xtp是第t个位置的绝对位置表示。 向量xtc是将一个词汇转化成一个个的字母,然后使用卷积网络进行提取。 总的向量表示为: 将[x1, [x2, …, [xn]通过transformer结构,可以更好地对文本进行特征提取。
2.2.2 原始的Pointer机制
当前的decoding表示为si,计算si和每个hj的关联分数 如何获得decoding的第i个输出: Pi表示解码器解码出当前位置的输出。
2.2.3 memory-augmented的Pointer机制
使用先验的实体
- 实体表示
对于实体yk=[a, …, b] (1<=a<=b<=n),构建yk的表示rk: Att(*)的实现如下: v、W是待训练的参数。按照上面的方法可以求到一个完整实体的表示,那么如何表示实体的一部分呢?对于实体的一部分yk=[a, …, i] (1<=a<=i<b),开始于a结束于i,此时yi的表示为r’k, i。 - 通过Memory更新表示
先验的实体M=[r1, r2, …, rk-1],使用下面的公式可以通过Memory更新表示(原文写错了,纠正下): W:权重矩阵 um: Memory中的第m个注意力分数 βm: Memory中的第m个概率 r+i: 对于部分实体yk=[a, …, i]的更新表示的实体 使用r+i来替换si,球的分数vi,j - Memory-augmented的Pointer机制的用途
3. Teacher Forcing and Dynamic Sampling
在生成任务中,通常的做法是: 在训练的过程中,先使用编码器对文本进行编码,然后解码的过程中,解码器的输入使用的是标准答案; 在推理的过程中,先使用编码器对文本进行编码,然后在解码的过程中,解码器的输入是上一个解码结果。 所以这样会导致训练和推理过程的不一致。 本文的做法是: 设置一个阈值γ~[0, 1],在训练的过程中,让它的值不断减少;在解码的每一步中,随机生成一个值τ;如果τ<γ,输入时标准答案,反之输入时前一个预测的结果。 这样在训练的过程中,逐渐由gold-biased转向predicted-biased。
|