Few-NERD 项目介绍
Few-NERD 是一个大规模的、细粒度的手动标注命名实体识别(NER)数据集,旨在推进命名实体识别领域的研究。这一数据集基于上下文对于实体进行标注,例如在句子中“London is the fifth album by the British rock band…”,“London”被标注为“Art-Music”。该项目不仅提供了一组新的数据集,还提出了几种基准任务,帮助研究者评估命名实体识别算法。
项目背景和概述
Few-NERD 项目源自于 2021 年 ACL-IJCNLP 会议上的一篇论文,目的是创建一个专为少样本学习任务设计的命名实体识别数据集。该数据集提供了三种基准任务:监督学习 Few-NERD (SUP) 以及两种少样本学习任务 Few-NERD (INTRA) 和 Few-NERD (INTER)。
Few-NERD 数据集覆盖了8 个粗粒度类别和66 个细粒度类别,含有188,200 句子,491,711 实体,以及4,601,223 个标记。它为不同的研究任务和学习模式提供了丰富的资源。
数据集内容
获取数据
Few-NERD 数据集分为三种模式可供下载:
- 监督学习(supervised):数据集以随机方式分割。
- 少样本学习(inter):数据随机分割在粗粒度类别内,意味着每个文件包含所有 8 个粗粒度类别,但细粒度类别不同。
- 少样本学习(intra):数据按粗粒度类别进行分割。
获取这些数据集的方法是运行相应的脚本命令,例如:
bash data/download.sh supervised
同时,还支持获取按集段采样的数据:
bash data/download.sh episode-data
unzip -d data/ data/episode-data.zip
数据格式
数据经过预处理为典型的 NER 数据形式,如下:
Between O
1789 O
and O
1793 O
he O
sat O
on O
a O
committee O
reviewing O
the O
administrative MISC-law
constitution MISC-law
of MISC-law
Galicia MISC-law
to O
little O
effect O
. O
项目结构
Few-NERD 项目的代码结构如下:
util
目录包含了框架、数据加载器、维特比解码器(仅用于 structshot)和少样本采样器。proto.py
实现了原型模型。nnshot.py
实现了 nnshot 模型。train_demo.py
是主要的训练脚本。
关键实现与运行
采样器
项目中设计了*“N 路 K~2K 射”*采样策略,具体实现于util/fewshotsampler.py
中。
模型实现
- 原型网络结合 BERT 的实现于
model/proto.py
。 - NNShot 与 BERT 的实现于
model/nnshot.py
。 - StructShot 通过在
util/framework.py
中添加一个额外的维特比解码器实现。
如何运行
运行命令示例:
python3 train_demo.py --mode inter \
--lr 1e-4 --batch_size 8 --trainN 5 --N 5 --K 1 --Q 1 \
--train_iter 10000 --val_iter 500 --test_iter 5000 --val_step 1000 \
--max_length 64 --model structshot --tau 0.32
参数说明:
--mode
:训练模式,可以是 inter, intra 或 supervised。- 以及其他可配置的参数,例如学习率、批量大小等。
引用与联系
如果在您的工作中使用了 Few-NERD,请引用相关论文。此外,项目的 Few-NERD 数据集和代码分别以 CC BY-SA 4.0 和 Apache 2.0 许可证发布。对于任何疑问,欢迎联系创作者。