写在最前面
论文: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对象,包含以下元素:
- tokens: 代表输入文本被分割成的单词序列。例如,第一个数据项的tokens是一个包含句子“Clustering of missense mutations in the ataxia - telangiectasia gene in a sporadic T - cell leukaemia.”被分词后的数组。
散发性T细胞白血病中共济失调-毛细血管扩张基因错义突变的聚类。
- entity: 包含句子中被识别出的实体信息。每个实体由三部分组成:
- type: 实体的类型,如“Disease”表示疾病。
- offset: 实体在tokens数组中的位置索引。索引是基于零开始,包含开始和结束位置。例如,"offset": [6, 7, 8]表示实体覆盖了tokens中从第7个到第9个词。
- “ataxia”, “-”, “telangiectasia”“共济失调”,“-”,“毛细血管扩张”
- text: 实体的文本表示,即tokens中对应偏移位置词的组合。这有助于直观地理解实体是什么,而不必单独查看tokens。
- relation: 包含句子中实体之间的关系信息。在给出的示例中,relation数组为空,表示在这些句子中没有标注实体间的关系。
- 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