论文:Unified Named Entity Recognition as Word-Word Relation Classification
发表方:武汉大学,发表于AAAI2022
论文链接:https://arxiv.org/abs/2112.10070
开源代码:https://github.com/ljynlp/W2NER
这篇论文主要是针对“flat NER”(就是最普通的NER)、“重叠NER”和“不连续NER”三种NER的子任务,提出了一种统一的word-word pair的标注框架,并且提出了一个相对应的模型结构来进行学习,他们在三个tasks的多个数据集上取得了SOTA的成绩。
标注框架
标注框架
我们首先来看一个论文中举的NER样本:
{
'text': 'I am having aching in legs and shoulders',
'entity_list': [
{'entity_text': 'aching in legs', 'index': [3, 4, 5], 'entity_type': 'Symptom'},
{'entity_text': 'aching in shoulders', 'index': [3, 4, 7], 'entity_type': 'Symptom'}
]
}
上面的例子在这个标注框架中的示例如上图所示,对于一个句子,这个框架首先搞了一个word-word矩阵(如上图的右侧矩阵),在矩阵中定义了两种类型的标记:
-
NHW,Next-Neighboring-Word,这个类型的标记只会出现在上三角矩阵中(不包括对角线部分),上三角矩阵的元素取值只有0和1两种,(也就是图中矩阵中标注NHW的格子)表示,在某个实体中,第i个单词后面接着的是第j个单词,比如表示在某个实体中,第3个单词(从0开始数)aching后面跟着的单词是in。
-
THW-entity_type ,Tail-Head-Word-entity_type,这个类型的标记只会出现在下三角矩阵中(包括对角线部分),entity_type就是实体的类型,代码里面其实这个THW-entity_type直接就用entity_type的id就可以了,表示,第i个单词是某个实体类型ID为3的实体的结尾词(tail word),而第j个单词是这个实体的开始词(head word),比如表示单词shoulders是实体的结尾,这个实体的开头是aching,这个实体的类型是Symptom。
这个框架可以直接把三种NER的subtasks全部一勺烩了,借用论文中举的4个例子,大家感受一下:
解码方法
了解了标注框架后,我们来看看它的解码方法:
其实就是一个DFS,大致步骤这里描述一下:
-
首先在下三角矩阵中找THW-entity_type标签,假设第i行第j列是THW-entity_type,如果,说明是一个单字实体,直接加入结果集E和T,否则去第2步
-
如果,则说明第i个单词是实体的尾部,第j个单词是实体的起始,那么一定会有,然后我们第j行的第j+1列开始找NNW,假设在第j行第k列找到NNW,则去第k行的第k+1列接着向后找,直到到达第i列为止,找到第i列的话,把从j开始通过NNW迄今为止串起来的token作为是一个实体加入结果集。
(但弱弱的说一句,这种情况的话,如果开头和结尾完全重叠,但中间不重叠的俩实体,岂不是就分不出来,是不是得在NNW上面也加上实体类型,哈哈)
模型结构
其实这篇论文这个标注的框架比较重要,但还是要介绍一下模型。
从图中大致可以看出,模型分为三个模块:Encoder Layer、Convolution Layer和Co-Predictor Layer,接下来我们一一介绍。
Encoder Layer
这部分主要是获取文本中每个Token的表征,对于一个输入文本序列,Encoder Layer通过如下步骤获取每个Token的表征
-
过BERT,获得文本序列的word pieces的表征,这里可以是BERT的最后一层,也可以是最后四层的平均,但这里获取到的是word pieces的表征,并不是每个Token的表征;
-
在word pieces的表征上面用Max Pooling获取Token的表征;
-
过BiLSTM获取最终的Token的表征。
这里说一下word pieces到Token的max pooline操作怎么做:
# 数据构造阶段:比如句子token长度是N,word piece的长度是M,然后构造一个N*M的矩阵W,每一行只在有word piece的部分是1,其他地方是0
W = np.zeros((N, M), dtype=np.bool)
start = 0
for i, pieces in enumerate(tokens):
if len(pieces) == 0:
continue
pieces = list(range(start, start + len(pieces)))
W[i, pieces[0] + 1:pieces[-1] + 2] = 1
start += len(pieces)
# 模型里面:BERT的结果是[BS, M, dim](我们就叫他BE吧),扩展并且expand一下,到[BS, N, M, dim],就与矩阵W对上了,然后把矩阵W中为0的位置在BE中相对应的位置置为BE中的最小值,最后再M方向Max Pooling一下。
# W是[BS, N, M]
length = W.size(1)
min_value = torch.min(bert_embs).item()
_bert_embs = bert_embs.unsqueeze(1).expand(-1, length, -1, -1)
_bert_embs = torch.masked_fill(_bert_embs, pieces2word.eq(0).unsqueeze(-1), min_value)
word_reps, _ = torch.max(_bert_embs, dim=2)
Convolution Layer
这部分主要是通过「CLN」将Token的序列(不算batch维和特征dim维的话就是1D)表征变成word-word的网格表征(那它就是2D),并在网格表征上面添加「单词间相对位置表征」和「上下三角表征」,最后进一步通过3个「空洞卷积」对网格表征进行进一步编码。
1. CLN
构造Word-Word的网格表征,假设表示第i个单词对第j个单词的关系,进一步说就是在给定第i个单词的情况下单词j的特征,为了达到这种效果,他们引入了Conditional Layer Normalization(CLN),公式如下:
可以看到是对第j个单词的表征做normalization,但与传统LN相比不同的是,CLN的两个系数和是根据第i个单词的表征学习到的。关于这点,苏神在他的博客[^1]里面有过一张很清晰的图(图里的就是上面公式里的),这里我贴一下:
2. 构造BERT风格的网格表征
仿照BERT,除了CLN生成的网格表征以外,还生成了两个其他的表征:
-
CLN生成的网格表征
-
单词间相对位置表征,(代码中他们共给距离设置了19个区间,从而降低了位置表征的范围,具体可以看代码)
-
上下三角矩阵的表征
三个拼在一起过MLP,生成BERT风格的网格表征。
3. 多粒度空洞卷积
用膨胀系数分别为1,2,3的三个空洞卷积层+GELU,去捕获网格中不同位置的word pairs间的关系,进一步对网格表征进行编码,最后拼接得到网格最终编码。
Co-Predictor Layer
最后这部分就是预测层了,之前有研究证明双线性分类器可以增强MLP在关系预测上的效果,所以他们用了俩分类器,一个双线性分类器,一个MLP分类器,最后将两者的结果相加过softmax得到最终结果。
1. 双线性分类器
2. 最终结果
402 Payment Required
Loss Function
实验
在不同的subtasks的多个数据集上都取得了SOTA,并在仅有overlap和discontinuous的数据上的效果也好于之前的一些模型
消融实验
Region Emb:没有上下三角的emb
-
Distance Emb:没有相对位置的emb
-
All DConv:去掉所有膨胀卷积,下降很多
-
膨胀卷积l=2去掉之后,下降是三个膨胀卷积里面最大的
-
-
Biaffine:去掉双线性分类器,下降不多,说明Biaffine有一定辅助提升作用,但还是没有MLP的效果好,也侧面说明DConv那一层比双线性要好很多
-
MLP:去掉MLP后,下降了好多
-
NNW:去掉NNW,只有THW的话,不同数据集下降的不同,CADEC上面下降的比较多,因为这个数据集里面非连续NER比较多
最后
这个标注框架还挺好的,确实统一了三个subtasks,而且看下来也不难,值得大家尝试尝试。
ε≡٩(๑>₃<)۶ 一心向学
一起交流
想和你一起学习进步!『NewBeeNLP』目前已经建立了多个不同方向交流群(机器学习 / 深度学习 / 自然语言处理 / 搜索推荐 / 图网络 / 面试交流 / 等),名额有限,赶紧添加下方微信加入一起讨论交流吧!(注意一定o要备注信息才能通过)
今天的文章W2NER:统一NER模型SOTA分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/66448.html