本文主要是介绍统一的NER识别模型-Unified NER,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
论文:Unified Named Entity Recognition as Word-Word Relation Classification
地址:https://arxiv.org/abs/2112.10070
截止到20220308为止的sota
1. 提出两个概念
提出了两个新的概念,将连续、嵌套、不连续实体的识别进行了统一,可用一个模型更好的完成以上三种实体的识别:
NNW:下一个相邻词/字,表示两个字之间的关系
实体中的相邻词
THW-*:头尾token,头尾产生联系,表示出不连续实体的头尾关系,并且和类型*关联。
边界及类型指示作用。
2. 模型架构
1. Encoder Layer: 使用BERT和LSTM提供上下文表示;
2. Encoder Layer之后有两个分支:
- 一个是虚线部分的Biaffine网络,即双仿射注意力机制(可以参看文章1),其是为了解决嵌套实体、多头选择的问题
- 二就是实线所示的部分,也即本文提出的方法:其首先经过一个conditional layer normalization层得到Word Embedding,与另外两个Distance Embedding和Region Embedding进行concatenation操作后,过MLP层,然后进行卷积操作。三个Embedding矩阵作者是类比BERT的三种Embedding输入,其中region Embedding 的构建就是基于本文提出的两个概念出发,distance embedding表示句子字词之间的相对距离。
3. 将双仿射网络的输出和卷积的输出进行element-wise 相加,也即对应位置相加,输出后做交叉熵计算loss
整个网络代码也非常清晰:
self.bert = AutoModel.from_pretrained(config.bert_name, cache_dir="./cache/", output_hidden_states=True)
self.dis_embs = nn.Embedding(20, config.dist_emb_size)
self.reg_embs = nn.Embedding(3, config.type_emb_size)
self.encoder = nn.LSTM(lstm_input_size, config.lstm_hid_size // 2, num_layers=1, batch_first=True, bidirectional=True)
self.convLayer = ConvolutionLayer(conv_input_size, config.conv_hid_size, config.dilation, config.conv_dropout)
self.dropout = nn.Dropout(config.emb_dropout)
self.predictor = CoPredictor(config.label_num, config.lstm_hid_size, config.biaffine_size, config.conv_hid_size * len(config.dilation), config.ffnn_hid_size,config.out_dropout)
3. 实验结果
英文sota:
中文sota:
代码:
https://github.com/ljynlp/W2NER
1. 实体识别之Biaffine双仿射注意力机制 - 知乎
这篇关于统一的NER识别模型-Unified NER的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!