https://www.biendata.xyz/competition/ccks_2020_4_1/leaderboard/199952/
排名:25/686
特点:
- 多标签实体识别
- 实体的类别不敏感(不管什么类型的实体都是公司)
- 实体类别多(29分类)
- 包含负样本(即标签为空的样本)
数据样例:
"context": "而随着近日摩能国际因涉嫌传销被调查的消息被确认,也坐实了摩能国际近段时间以来的崩盘传闻",
"type": [
"涉嫌传销",
"提现困难"
],
"entity": [
[
摩能国际
],
[
摩能国际
]
]
注:抽取的实体只能有一个类别标签,数据预处理时shuffle类别(数据类别多折,结果融合)
模型:[BERT]+[Encoder]+CRF
BERT/MIDDLE | Bi-LSTM | IDCNN | TENER | R-Transformer |
---|---|---|---|---|
NEZHA | √ | × | √ | √ |
通过替换预训练模型和下游结构Encoder提升模型的表现,问题在于不能cover多标签的特点。
最佳单模:
结构:NEZHA+Bi-LSTM+CRF
F1-score:0.76
复现论文:《A Unified MRC Framework for Named Entity Recognition》
利用MRC方法实现NER任务,通过先验问题的构造确定实体类别,可以解决多标签的问题。
该模型的不足在于存在无回答的样本,这使得模型无法完全分辨出不同问题之间的差异(Recall高,Precision低)。
最佳单模:
结构:RoBERTa+MRC
F1-score:0.70
为了解决无法正确分辨类别的问题,尝试了一种多任务的方法。除了原始的主任务以外,加入了文本匹配任务,任务目标是判断样本中的问题与文本是否匹配,如不匹配则丢弃该样本中抽取到的实体。
但实验结果分数低于原始的MRC方法,即文本匹配任务反而伤害了模型。
多层指针网络,将类别先验的表示为指针的层数,标签形状为(bs, seq_len, tag_size)。
可以解决多标签的问题,不足在于模型学习的目标会变得复杂,使得模型泛化性较差。
最佳单模:
结构:RoBERTa+Multi-Pointer
F1-score:0.77
将任务视作事件抽取来做,分为两个阶段。
通过整段文本的表征做多标签分类任务,获得事件类别。由于事件类别的获取是独立的模型,在这个阶段可以引入负样本。
将得到的事件类别通过**MRC方法(方法二)**的思想拼接到原样本上去,然后抽取实体。
这种方式有效的避免了方法二中的无回答样本问题,使得测试集样本更加准确。
但是pipline的方式也导致了两个问题:
- 第一阶段的误差累积到了第二阶段
- 事件类别和实体抽取之间的内在联系被割裂
最佳单模:
阶段一结构:RoBERTa+多标签分类
阶段二结构:RoBERTa+MRC
F1-score:0.75
两阶段抽取,先抽类别再抽对应实体
方法名 | 优点 | 缺点 |
---|---|---|
CRF方法 | 有CRF转移矩阵约束,分词和分类信息更加准确 | 无法解决实体多标签和实体嵌套问题 |
MRC方法 | 先天可以解决多标签问题,通过span矩阵可以解决实体嵌套的问题 | 局限性太大,在多类别数据集和少样本数据集上效果欠佳 |
指针方法 | 可通过多层指针解决实体多标签问题 | 分词与分类信息无约束,结果较脏 |
Silver Bullet:
- 可解决多标签问题
- 可解决实体嵌套问题
- 分词和分类任务有约束