统一NER模型【W2NER】的中文效果测试(含代码)

一、背景

之前自己写了个简单的开源训练框架Bo仔很忙:bert4torch(参考bert4keras的pytorch实现),张罗着给框架不断增加示例,看到了W2NER,于是参考源代码迁移到bert4torch上,并在中文数据集上做了测试。关于W2NER的解读有下面几篇。

NER任务最新SOTA模型W2NER_colourmind的博客-CSDN博客_ner任务

2022 统一NER SOTA模型【W2NER】详解 - 知乎

NER统一模型:刷爆14个中英文数据SOTA - 知乎

二、简要思路介绍

1、label的表示

W2NER是能够统一处理扁平实体、重叠实体和非连续实体三种NER任务,这得益于其label的统一表示,如下图所示,其实体内相邻的token用NNW来表示,实体的边界用THW-S来表示。

2、模型结构

模型主要网络结构有,bert层、双向LSTM层、卷积层、CLN层,以及输出层Co-Predictor(由仿射变换+MLP组成),其主要流程如下

  1. input_ids输入bert层和双向LSTM层,得到[btz, seqlen, hdsz]的表示
  2. 过CLN(条件LayerNorm层),得到[btz, seqlen, seqlen, hdsz]的word_embedding
  3. concat上另外两个embedding,距离embedding和区域embedding
  4. 依次经过卷积层和输出层,得到[btz, seqlen, seqlen, entnum]的表示,可以和labels计算交叉熵损失

三、实验比对

在数据集上测试看看,在人民日报数据集上token粒度f1=97.37, ent粒度f1=96.32,具体测试结果如下表(含其他算法的测试结果)

solutionepochf1_tokenf1_entitycomment
bert+crf18/2096.8996.05——
bert+crf+init18/2096.9396.08用训练数据初始化crf权重
bert+crf+freeze11/2096.8996.13用训练数据生成crf权重(不训练)
bert+cascade+crf5/2098.1096.26crf类别少所以f1_token偏高
bert+crf+posseg13/2097.3296.55加了词性输入
bert+global_pointer18/20——95.66——
bert+efficient_global_pointer17/20——96.55——
bert+mrc7/20——95.75——
bert+span13/20——96.31——
bert+tplinker_plus20/20——95.71长度限制明显
uie20/20——96.57zeroshot:f1=60.8, fewshot-100样本:f1=85.82, 200样本:f1=86.40
W2NER18/2097.3796.32对显存要求较高

四、代码

全部代码测试都是基于bert4torch框架,这是一个基于pytorch的训练框架,前期以效仿和实现bert4keras的主要功能为主,特点是尽量简洁轻量,提供丰富示例,有兴趣的小伙伴可以试用,欢迎star。

bert4torch/task_sequence_labeling_ner_W2NER.py at master · Tongjilibo/bert4torch · GitHub

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值