【ACL 2023-NER注入到PLM】数据集+实验解读:基于上下文学习的命名实体识别 Learning In-context Learning for Named Entity Recognitio

简介: 【ACL 2023-NER注入到PLM】数据集+实验解读:基于上下文学习的命名实体识别 Learning In-context Learning for Named Entity Recognitio

写在最前面

论文:Learning In-context Learning for Named Entity Recognition

标题:基于上下文学习的命名实体识别

作者:Jiawei Chen, Yaojie Lu, Hongyu Lin, Jie Lou, Wei Jia, Dai Dai, Hua Wu, Boxi Cao, Xianpei Han and Le Sun

地址:[2305.11038] Learning In-context Learning for Named Entity Recognition (arxiv.org)

代码:https://github.com/chen700564/metaner-icl

数据集

四个数据集

这四个数据集在自然语言处理(NLP)和命名实体识别(NER)任务中非常著名,它们分别来源于不同的领域,具有各自的特点和挑战。

CoNLL-2003 (CoNLL03)

  • 来源与领域:CoNLL-2003是一个广泛使用的英文NER数据集,最初由CoNLL(Conference on Natural Language Learning)2003共享任务发布。该数据集主要来源于新闻报道。
  • 实体类型:包含四种实体类型:人名(PER)、组织(ORG)、地点(LOC)和其他名称(MISC)。
  • 用途:是评估NER系统性能的标准基准之一,广泛用于训练和测试NER模型。

WNUT-2017 (WNUT17)

  • 来源与领域:WNUT-2017是由WNUT(Workshop on Noisy User-generated Text)2017共享任务发布的。该数据集聚焦于社交媒体文本,特别是Twitter上的用户生成文本。
  • 实体类型:包括创新性实体类型,如创意表达的地点、人物和产品等。
  • 用途:旨在挑战NER模型处理非正式、错误拼写和缩写频繁的文本的能力。

NCBI-disease

  • 来源与领域:NCBI-disease是一个公开的生物医学文献数据集,由美国国家生物技术信息中心(National Center for Biotechnology Information, NCBI)提供。主要用于疾病名称的识别和规范化。
  • 实体类型:专注于疾病实体的识别。
  • 用途:支持生物医学研究中疾病相关信息的自动提取,以及临床数据分析等应用。

SEC-filings

  • 来源与领域:SEC-filings数据集包含从美国证券交易委员会(Securities and Exchange Commission, SEC)的财务报表中提取的文本。这些报表包括10-K和10-Q报告,是公司公开发布的详细财务和经营情况报告。
  • 实体类型:涵盖财经领域的实体类型,如公司名、财务指标和市场术语等。
  • 用途:用于研究和开发能够自动从财务文档中提取关键信息的NER系统,辅助财务分析和决策。

test.json数据集

{“tokens”: [“Clustering”, “of”, “missense”, “mutations”, “in”, “the”, “ataxia”, “-”, “telangiectasia”, “gene”,“in”, “a”, “sporadic”, “T”, “-”, “cell”, “leukaemia”, “.”],

“entity”: [{“type”: “Disease”, “offset”: [6, 7, 8], “text”: “ataxia - telangiectasia”},

{“type”: “Disease”, “offset”: [12, 13, 14, 15, 16], “text”: “sporadic T - cell leukaemia”}], “relation”: [], “event”: []}

解读

这些测试数据集包含了用于命名实体识别(NER)、关系识别和事件抽取的标注信息。每个数据项是一个结构化的JSON对象,包含以下元素:

  1. tokens: 代表输入文本被分割成的单词序列。例如,第一个数据项的tokens是一个包含句子“Clustering of missense mutations in the ataxia - telangiectasia gene in a sporadic T - cell leukaemia.”被分词后的数组。

     散发性T细胞白血病中共济失调-毛细血管扩张基因错义突变的聚类。

  1. entity: 包含句子中被识别出的实体信息。每个实体由三部分组成:
  • type: 实体的类型,如“Disease”表示疾病。
  • offset: 实体在tokens数组中的位置索引。索引是基于零开始,包含开始和结束位置。例如,"offset": [6, 7, 8]表示实体覆盖了tokens中从第7个到第9个词。
  • “ataxia”, “-”, “telangiectasia”“共济失调”,“-”,“毛细血管扩张”
  • text: 实体的文本表示,即tokens中对应偏移位置词的组合。这有助于直观地理解实体是什么,而不必单独查看tokens。
  1. relation: 包含句子中实体之间的关系信息。在给出的示例中,relation数组为空,表示在这些句子中没有标注实体间的关系。
  2. event: 包含句子中事件信息。与relation类似,给出的示例中event数组也为空,表示没有标注任何事件。

用途说明:

  • tokens 用于提供模型输入的基本单元,即句子的分词表示,为实体、关系和事件的识别提供基础。
  • entity 用于命名实体识别任务,它标注了句子中具有特定类型(如疾病、基因等)的词或词组,对于训练模型识别和分类文本中的实体至关重要。
  • relation 和 event 分别用于关系识别和事件抽取任务,它们标注了句子中实体间的关系和特定事件,尽管在给出的示例中没有使用这些信息。

综上所述,这些测试数据集通过详细的标注信息支持对NER、关系识别和事件抽取模型的综合训练和评估,旨在提高模型在实际文本数据上处理复杂自然语言处理任务的能力。

train.json数据集

这些JSON对象来自于一个NER任务的数据集,包含了用于模型训练和测试的样本。每个对象代表一个文本样本,其中包含了文本的分词(tokens)、实体标注(entity)、关系标注(relation)和事件标注(event),和test.json数据集一样。

实验

环境

conda create -n metaner python=3.9.0
conda activate metaner
bash env.sh

预训练

预先训练的模型位于 huggingface 中:metaner 和 metaner-base

预训练的数据集位于 huggingface 中

我们使用一台 A100-80g 来预训练 t5-v1_1-large,您可以运行:

python pretrain.py --plm google/t5-v1_1-large --do_train --per_device_train_batch_size 8 --learning_rate 5e-5 \
--logging_step 1000 \
--output_dir plm/metaner \
--evaluation_strategy steps \
--do_eval \
--per_device_eval_batch_size 32 \
--metric_for_best_model f1 \
--eval_steps 10000 \
--max_steps 500000 \
--save_steps 10000 \
--lr_scheduler_type constant_with_warmup \
--warmup_steps 10000 \
--save_total_limit 50 \
--remove_unused_columns False \
--dataset pretrain_data 

预训练数据集应放在路径中pretrain_data/

pretrain_data/
├── ICL_train.json
├── ICL_dev.json
├── label2id.json
├── code2name.json
└── lmtrain.json

其中 ICL_train.json 和 ICL_dev.json 是来自维基百科和维基数据的 NER 数据集,label2id.json用于 NER 预训练,code2name.json 是维基数据代码和标签名称映射文件,lmtrain.json用于伪提取语言建模任务。

情境学习

您可以运行:

python predictor.py --output_dir tmp/conll03/metaner-icl \
--plm plm/metaner \
--formatsconfig config/formats/metaner.yaml \
--testset data/conll03 \
--do_predict \
--remove_unused_columns False \
--shot_num 5 \
--per_device_eval_batch_size 16

结果将在 output_dir 里。您可以更改不同镜头和不同数据集的 .shot_numtestset

对于不同的预训练模型,应更改 (模型)和 .plmformatsconfig

对于 t5 模型,您可以将 formatsconfig 更改为 . For gpt/opt 模型,您可以将 formatsconfig 更改为

.config/formats/t5.yamlconfig/formats/gpt.yaml/config/formats/opt.yaml

模型评估

您可以运行:

python getresult.py -modelpath tmp/conll03/metaner-icl

请注意,由于演示顺序可能有所不同,因此可能会有轻微的性能差异,约为 1%。

Fewshot 微调

运行:

python finetuning.py \
--dataset data/conll03 \
--shot 5 \
--plm plm/metaner \
--formatsconfig config/formats/finetune/t5.yaml \
--output_dir tmp/conll03/metaner-ft \
--do_train \
--per_device_train_batch_size 4 \
--save_strategy no \
--num_train_epochs 200 \
--learning_rate 1e-4 \
--save_total_limit 1 \
--warmup_ratio 0.06 \
--remove_unused_columns False 

结果将在 output_dir 里。您可以更改不同镜头和不同数据集的 .shotdataset

对于不同的预训练模型,应更改 (模型)和 .plmformatsconfig

对于 t5/metaner 模型,formatsconfig 应为 . For gpt/opt 模型,它应该是 .config/formats/t5.yamlconfig/formats/gpt.yaml/config/formats/opt.yaml

对于预测,您可以运行并设置为 -1:predictor.py context_num

python predictor.py --output_dir tmp/conll03/metaner-ft \
--plm plm/metaner \
--formatsconfig config/formats/finetune/t5.yaml \
--testset data/conll03 \
--do_predict \
--remove_unused_columns False \
--shot_num 5 \
--context_num -1 \
--per_device_eval_batch_size 16


目录
相关文章
|
8天前
|
机器学习/深度学习 自然语言处理 监控
命名实体识别(Named Entity Recognition, NER)
命名实体识别(Named Entity Recognition, NER)
|
8天前
|
机器学习/深度学习 数据采集 自然语言处理
如何使用深度学习模型来提高命名实体识别的准确率?
如何使用深度学习模型来提高命名实体识别的准确率?
|
3月前
|
存储 JSON 自然语言处理
数据标注工具 doccano | 命名实体识别(Named Entity Recognition,简称NER)
数据标注工具 doccano | 命名实体识别(Named Entity Recognition,简称NER)
46 1
|
4月前
|
机器学习/深度学习 数据采集 自然语言处理
如何使用深度学习模型来提高命名实体识别的准确率
如何使用深度学习模型来提高命名实体识别的准确率
|
6月前
|
自然语言处理 安全 算法
【ACL 2023-NER注入到PLM】基于上下文学习的命名实体识别 Learning In-context Learning for Named Entity Recognition
【ACL 2023-NER注入到PLM】基于上下文学习的命名实体识别 Learning In-context Learning for Named Entity Recognition
161 0
|
6月前
|
自动驾驶 机器人 测试技术
CVPR 2024:分割一切模型SAM泛化能力差?域适应策略给解决了
【4月更文挑战第24天】CVPR 2024 论文提出了解决图像分割基础模型 SAM 在分布偏移下泛化能力不足的问题,通过弱监督自训练策略增强模型适应性和计算效率。在多种图像分割任务上超越预训练 SAM 和现有适应方法,但弱标签质量和数量可能限制性能,且需大量计算资源。[Improving the Generalization of Segmentation Foundation Model under Distribution Shift via Weakly Supervised Adaptation](https://arxiv.org/pdf/2312.03502.pdf)
225 1
|
6月前
|
JSON 自然语言处理 安全
微调大型语言模型进行命名实体识别
大型语言模型的目标是理解和生成与人类语言类似的文本。它们经过大规模的训练,能够对输入的文本进行分析,并生成符合语法和语境的回复。这种模型可以用于各种任务,包括问答系统、对话机器人、文本生成、翻译等。
173 1
|
6月前
|
关系型数据库 MySQL 数据库
定义模型和模型配置
定义模型和模型配置。
41 1
|
机器学习/深度学习 存储 人工智能
大语言模型的预训练[5]:语境学习、上下文学习In-Context Learning:精调LLM、Prompt设计和打分函数(Scoring Function)设计以及ICL底层机制等原理详解
大语言模型的预训练[5]:语境学习、上下文学习In-Context Learning:精调LLM、Prompt设计和打分函数(Scoring Function)设计以及ICL底层机制等原理详解
大语言模型的预训练[5]:语境学习、上下文学习In-Context Learning:精调LLM、Prompt设计和打分函数(Scoring Function)设计以及ICL底层机制等原理详解
|
自然语言处理 数据处理
浅析命名实体识别(NER)的三种序列标注方法
简述序列标注 序列标注(Sequence Tagging)是NLP中最基础的任务,应用十分广泛,如分词、词性标注(POS tagging)、命名实体识别(Named Entity Recognition,NER)、关键词抽取、语义角色标注(Semantic Role Labeling)、槽位抽取(Slot Filling)等实质上都属于序列标注的范畴。