全国大数据与计算智能挑战赛:面向低资源的命名实体识别基线方案,排名13/64|焦点要闻

博客园   2023-06-18 18:11:05

全国大数据与计算智能挑战赛:面向低资源的命名实体识别基线方案,排名13/64

全国大数据与计算智能挑战赛:面向低资源的命名实体识别baseline,排名13/64。第一名:0.68962791,基线:0.67902593 ,感兴趣小伙伴可以刷刷榜。 国防科技大学系统工程学院(大数据与决策实验室)


(资料图片仅供参考)

项目链接以及本地码源见文末

1.赛题介绍

全国大数据与计算智能挑战赛是由国防科技大学系统工程学院大数据与决策实验室组织的年度赛事活动,旨在深入挖掘大数据应用实践中亟需的能力生成难题,选拔汇聚数据领域优势团队,促进大数据领域的技术创新和面向需求的成果生成,推动形成 “集智众筹、联合攻关、共享共用” 的研建用一体迭代演进创新模式。  本届大赛以 “发榜挑战、集智攻关” 为主题,面向全国大数据与计算智能领域的相关单位,将围绕自然语言处理、图像检测识别、时空数据分析、知识建模分析等前沿技术难点开设赛道,以 “揭榜打擂” 的形式组织创研竞赛,通过线上打榜与现场评审相结合的方式决出优势团队,进一步创新大数据管理与应用模式,推动大数据与计算智能领域技术发展与生态构建。  热烈欢迎全国各工业部门、科研院所、各高校及民营企业的业内优势团队踊跃参赛揭榜!

了解更多赛事信息 2023 全国大数据与计算智能挑战赛

• 赛题名称

面向低资源和增量类型的命名实体识别

• 赛题背景命名实体识别是自然语言处理领域中的重要上游任务,其目标是从文本中识别出具有特定意义的实体,包括人物、地点、组织机构等。近年来,基于深度学习模型的命名实体识别技术取得了突出的成果,但仍然存在依赖大规模标注数据、无法增量地学习新类型等问题,使得大部分现有模型和方法难以满足实际需求。本赛题面向装备领域的信息抽取业务场景,针对现有命名实体识别技术的不足,设置低资源实体识别和持续实体识别两类赛题任务:低资源实体识别任务仅提供少量训练样本,不允许参赛者使用外部数据,重点考察参赛系统的小样本泛化能力;持续实体识别任务提供一个相互之间实体类型不重叠的实体识别任务序列,参赛系统需要连续地学习每个任务中的实体类型并保持在学过类型上的性能,主要考察参赛系统的持续学习能力。

• 初赛任务:低资源命名实体识别

参赛系统需要学习一个低资源训练集,每种实体类型仅涉及 50 个左右的样本案例,并在规模更大的测试集上取得较好的性能。各类型训练样本数非常少,并且由于同属于武器装备概念,不同类型上下文相似,具有一定的迷惑性。示例:输入:{“sample_id”:23,“text”:“据 BAE 系统公司消息,英国领导的暴风战斗机项目在概念和评估阶段取得了良好进展,英国国防部将在未来几周内授予一份合同,开展项目的下一阶段工作。”}

输出:{sample_id": 23,“text”: “暴风战斗机”,“type”: “战斗机”,“start”: 14,“end”: 19}

• 复赛任务:持续命名实体识别参赛系统需要连续地学习一个实体识别任务序列,每个任务拥有独立的数据集,每个任务仅涉及一个实体类型。参赛系统每学完一个任务,就在当前任务以及所有学习过的历史任务的测试集上进行测试。参赛系统既要在当前任务取得良好性能,也要保证在历史任务上的性能退化尽可能少。输入输出示例:详见 “数据与评测” 页面

1.1 效果展示

2.数据简介

本赛题采用的数据聚焦装备领域,主要从以下三个方面的来源收集整理得到,具有一定的权威性和领域价值:

开源资讯:对国内外主流新闻网站、百度百科、维基百科、武器大全等开源资讯网站进行数据收集,优先收集中文,并将外文数据进行翻译后获得情报数据;智库报告:从智库网站中获取含有装备情报信息的论文以及报告;内部成果:通过国内军工企业、研究院所、国内综合图书馆、数字图书馆、军工院所图书馆等内部网站获取成果相关的文件进行分析和整理。

本赛题从上述来源收集到充足原始无标注数据后,先结合人工排查和关键字匹配等自动化方法过滤偏离主题、不真实和有偏见的数据;随后清洗无效和非法字符并过滤篇幅较长以及不含领域实体的文本;其次采用参考权威装备标准与论著制定的标签体系对文本进行标注,并采用相关领域以往研究成果中的模型对数据进行预打标;最终统计筛选出类型分布符合任务需求的样本作为原始数据集。

2.1 数据说明

• 初赛数据说明该赛题数据集共计约 6000 条样本,包含以下 9 种实体类型:飞行器, 单兵武器, 炸弹, 装甲车辆, 火炮, 导弹, 舰船舰艇, 太空装备, 其他武器装备。参考低资源学习领域的任务设置,为每种类型从原始数据集中采样 50 个左右样本案例,形成共 97 条标注样本的训练集(每一条样本可能包含多个实体和实体类型),其余样本均用于测试集。所有数据文件编码均为 UTF-8。

文件类型文件名文件说明

训练集

ner_train.json97 条已标注样本,每个样本对应内容为:样本 id(sample_id),原始文本(text)和标注实体列表(annotations),列表中每个元素对应一个实体,包括类型(type)、文本(text)、跨度起始位置(start)和结束位置(end)
测试集ner_test.json5920 条未标注样本,每个样本对应内容为:样本 id(sample_id)和原始文本(text)

• 复赛数据说明共计约 4500 条样本,包含多个任务,每个任务仅涉及一个实体类型,共计 6 个任务 / 实体类型:1. 装甲车辆;2. 火炮;3. 导弹;4. 舰船舰艇;5. 炸弹;6. 太空装备。每个任务拥有各自的任务 id(即每个类型前面的序号)、训练、验证和测试集文件(大致按 6:1:3 的比例进行划分)。所有数据文件编码均为 UTF-8。每个任务的数据集共划分为以下几个文件:

每个任务的数据集共划分为以下几个文件:

文件类型文件名文件说明

训练集

#task_id#_ner_train.json平均每个任务有自己的数据集,每个文件的命名以任务 id 开头,格式为 #task_id#_ner_train.json,下同。平均每个任务约 400 条样本,每条样本内容为:样本 id(sample_id),原始文本(text)和标注实体列表(entities),列表中每个元素对应一个实体,包括类型(type)、文本(text)、跨度起始位置(start)和结束位置(end)
验证集#task_id#_ner_dev.json平均每个任务约 70 条样本,样式同训练集
测试集#task_id#_ner_test.json平均每个任务约 200 条样本,每条样本内容为:样本 id(sample_id)和原始文本(text)

2.2 提交示例

初赛提交示例参赛者以 json 文件格式将结果提交到竞赛平台,文件每一行内容为预测结果字典(每个元素包括:测试样本 id(sample_id),对应文本 text,跨度起始位置 start,跨度结束位置 end,类型 type)。文件编码为 UTF-8。示例:

[…{"sample_id": 317,"text": "歼-20","type": "飞行器""start": 20,"end": 24,}{"sample_id": 318,"text": "F-100级护卫舰","type": "舰船舰艇","start": 8, "end": 17}…]

复赛提交示例参赛者以多个 json 文件格式提交测试结果,每个文件对应一个对象数组,数组的每一个对象内容包括:目前刚学完任务的 id(current_task_id)、测试样本所属任务的 id(test_task_id)、测试样本 id(sample_id),预测结果列表(每个元素包括:对应文本 text,跨度起始位置 start,跨度结束位置 end,类型 type)。每个文件对应模型在一个任务顺序上的结果,命名为 “#seq_id#_ner_results.json”,#seq_id# 表示任务顺序的 id,所有测试结果文件保存在“results” 目录下。文件编码为 UTF-8。示例:

[…{"current_task_id": 5,    "test_task_id": 4,    "sample_id": 27,"text": "辽宁号","start": 20,"end": 23,"type": "舰船舰艇"}…]

2.3 评测标准

初赛评测标准本赛题采用精确匹配的 macro-F1 分数作为评测和排名指标,即预测出的类型和实体跨度都与 ground-truth 精确匹配才算正确,并同时考虑模型在所有类型上的综合表现能力,满分 100,分值越大排名越高。macro-F1 的计算公式如下:

macro−F1=91​i=1∑9​F1i​

每一种类型对应的 F1 值的计算方式为:

F1=2∗P+RP∗R​

其中:P = 预测正确实体数量 / 预测出的实体数量 ×100%R = 预测正确实体数量 / 样本中的实体数量 ×100%

注意:评测标准中判断模型预测的正误是以实体为单位,而不是以样本为单位的。

复赛评测标准本赛题的评测指标及其计算步骤如下:

• 对于长度为 N 的任务序列,模型每次学完一个任务 Ti​(i 即提交示例中的 “current_task_id”)后,在 T1​ ~ Ti​的测试集上进行测试得到一系列 F1 分数 F1i,j​(1≤j≤i)(j 即提交示例中的 “test_task_id”),对其求均值得到 F1(i)​=i1​∑j=1i​F1i,j​;

• 学完所有任务后得到每个阶段的性能 F1(1)​∼F1(N)​,求其均值 F1N=N1​∑i=1N​F1(i)​,用于总结模型的整个学习曲线;

• 为了排除任务顺序对性能的影响,每个序列前面的序号即为前述 seq_id,序列元素表示任务 id:

1. 1-2-3-4-5-62. 2-4-6-1-3-53. 3-1-5-2-6-44. 4-6-2-5-1-35. 5-3-1-6-4-26. 6-5-4-3-2-1

复赛指标计算示例:给定一个共有 3 个任务(N=3)的任务序列,对于顺序 “T1​ - T2​ - T3​”, 指标计算的过程如下表所示,每个表项中的数值为模型学完任务 Ti​(i 即提交示例中的 “current_task_id”)后在 Tj​(1≤j≤i)(j 即提交示例中的 “test_task_id”)上的 F1 分数 F1i,j​:

最终该任务顺序的 F1N=3F1(1)​+F1(2)​+F1(3)​​=380+72+64​=72; 假设在另外两个顺序 “T3​ - T1​ - T2​” 和 “T2​ - T3​ - T1​” 上的结果为 68 和 70,则最终结果为 372+68+70​=70

#使用最新版本paddlenlp!pip install -U paddlenlp

3. 数据转换

经过转换的数据已放在data_all 目录下,直接使用即可。

#移动数据到指定目录!cp /home/aistudio/data_all/* /home/aistudio/data

4.面向低资源和增量类型的命名实体识别

4.1 数据切分/构造负样本

信息抽取是从非结构化或半结构化文本数据中提取结构化的信息,可以使用以下几种方法进行负样本构建:

需要注意的是,在进行负样本构建时应尽量保证构建出来的负样本与正样本在数据分布上的差异不会过大,以确保模型有足够的泛化能力。同时,也要考虑到负样本数量的影响,一般情况下需要与正样本数量保持相对平衡。

部分结果展示:

{"content": "美国陆军与通用动力公司的武器与技术生产部门签订了两份合约,包括一份价值2.104亿美元的70毫米海德拉航空火箭弹生产合约和一份价值1350万美元的用于70毫米海德拉火箭弹保障项目的技术维护合约。这两份合约由位于阿拉巴马州红石兵工厂的美国陆军合约司令部授予。该合约的最终交货期限预计为2015年早期。自1996年开始,通用动力公司就是海德拉火箭弹的系统集成商。通用动力公司的发言人称:通用动力公司为美国军队及其亲密盟友提供海德拉火箭弹已经超过15年了。对该项目的长期管理经验使得我们能够更紧密的与美国陆军合作以提供这种廉价而可靠地武器。海德拉火箭弹由两个主要部件组成:MK66火箭发动机和战斗部。该火箭弹的战斗部有多种类型以满足不同任务的需要。该70毫米火箭弹可用于大部分直升机和部分飞机上。", "result_list": [{"text": "70毫米海德拉航空火箭弹", "start": 44, "end": 56}, {"text": "70毫米海德拉火箭弹", "start": 75, "end": 85}, {"text": "海德拉火箭弹", "start": 166, "end": 172}, {"text": "海德拉火箭弹", "start": 210, "end": 216}, {"text": "海德拉火箭弹", "start": 267, "end": 273}], "prompt": "炸弹"}{"content": "据联合早报莫斯科9月5日报道:俄罗斯一名海军上将为库尔斯克号核潜艇上个月沉没提出新的解释。他说,该潜艇可能首先被另一艘战舰发射的导弹击中。俄罗斯波罗的海舰队司令叶戈罗夫说,这样的攻击行动是调查人员研究的好几个看法之一。他说,如果该潜艇被击中,那肯定是我们的一艘战舰发射的鱼雷。", "result_list": [], "prompt": "装甲车辆"}

2.2 模型微调

推荐使用 Trainer API 对模型进行微调。只需输入模型、数据集等就可以使用 Trainer API 高效快速地进行预训练、微调和模型压缩等任务,可以一键启动多卡训练、混合精度训练、梯度累积、断点重启、日志显示等功能,Trainer API 还针对训练过程的通用训练配置做了封装,比如:优化器、学习率调度等。

使用下面的命令,使用 uie-base 作为预训练模型进行模型微调,将微调后的模型保存至$finetuned_model:

2.2.1 微调小技巧

Warmup ratio的大小主要取决于训练数据的规模,模型的复杂度和任务的难度等因素。通常来说,warmup_ratio设置为0.1左右比较合适。这意味着,在整个训练过程中,模型的前10%的迭代次数将会采用相对较小的学习率进行warmup。

需要注意的是,如果warmup_ratio设置过大,可能会导致模型在warmup阶段花费过多时间,从而影响整个训练过程的进展。反之,如果warmup_ratio设置过小,则可能无法充分调整模型参数,导致模型训练不稳定,或者出现梯度爆炸等问题。因此,需要根据具体情况,合理地设置warmup_ratio的大小,以达到最佳的训练效果。

权重衰减/权重衰退:Weight Decay是一个正则化技术,作用是抑制模型的过拟合,以此来提高模型的泛化性。它是通过给损失函数增加模型权重L2范数的惩罚(penalty)来让模型权重不要太大,以此来减小模型的复杂度,从而抑制模型的过拟合。除了所有bias和 LayerNorm 权重之外,应用于所有层的权重衰减数值,在训练期间对模型的权重施加额外惩罚(通常是 L2 正则化)来防止过度拟合。

#单卡训练!python finetune.py  \    --device gpu \    --logging_steps 100 \    --save_steps 100 \    --eval_steps 100 \    --seed 1000 \    --model_name_or_path uie-base\    --output_dir ./checkpoint/model_best \    --train_path data/train.txt \    --dev_path data/dev.txt  \    --max_seq_len 512  \    --per_device_train_batch_size  32 \    --per_device_eval_batch_size 32 \    --num_train_epochs 20 \    --learning_rate 1e-5 \    --label_names "start_positions" "end_positions" \    --do_train \    --do_eval \    --do_export \    --export_model_dir ./checkpoint/model_best \    --overwrite_output_dir \    --disable_tqdm True \    --metric_for_best_model eval_f1 \    --load_best_model_at_end  True \    --lr_scheduler_type "cosine" \    --warmup_ratio 0.15 \    --weight_decay 1e-6 \    --save_total_limit 1

部分结果展示:

[2023-06-17 11:12:16,916] [    INFO] - ***** eval metrics *****[2023-06-17 11:12:16,916] [    INFO] -   epoch                   =       20.0[2023-06-17 11:12:16,916] [    INFO] -   eval_f1                 =     0.9674[2023-06-17 11:12:16,916] [    INFO] -   eval_loss               =     0.0002[2023-06-17 11:12:16,916] [    INFO] -   eval_precision          =     0.9653[2023-06-17 11:12:16,916] [    INFO] -   eval_recall             =     0.9695[2023-06-17 11:12:16,916] [    INFO] -   eval_runtime            = 0:00:10.49[2023-06-17 11:12:16,916] [    INFO] -   eval_samples_per_second =     64.624[2023-06-17 11:12:16,916] [    INFO] -   eval_steps_per_second   =      2.097[2023-06-17 11:12:16,918] [    INFO] - Exporting inference model to ./checkpoint/model_best/model[2023-06-17 11:12:22,862] [    INFO] - Inference model exported.[2023-06-17 11:12:22,863] [    INFO] - tokenizer config file saved in ./checkpoint/model_best/tokenizer_config.json[2023-06-17 11:12:22,863] [    INFO] - Special tokens file saved in ./checkpoint/model_best/special_tokens_map.json

注意:如果模型是跨语言模型 UIE-M,还需设置 --multilingual

该示例代码中由于设置了参数 --do_eval,因此在训练完会自动进行评估。

可配置参数说明:

2.3 模型评估

评估方式说明:采用单阶段评价的方式,即关系抽取、事件抽取等需要分阶段预测的任务对每一阶段的预测结果进行分别评价。验证/测试集默认会利用同一层级的所有标签来构造出全部负例。

可开启debug模式对每个正例类别分别进行评估,该模式仅用于模型调试:

!python evaluate.py \    --model_path ./checkpoint/model_best \    --test_path ./data/dev.txt \    --batch_size 8 \    --device gpu \    --max_seq_len 512 
[2023-06-17 11:12:59,278] [    INFO] - We are using  to load "./checkpoint/model_best".[2023-06-17 11:12:59,301] [    INFO] - loading configuration file ./checkpoint/model_best/config.json[2023-06-17 11:12:59,302] [    INFO] - Model config ErnieConfig {  "architectures": [    "UIE"  ],  "attention_probs_dropout_prob": 0.1,  "dtype": "float32",  "enable_recompute": false,  "fuse": false,  "hidden_act": "gelu",  "hidden_dropout_prob": 0.1,  "hidden_size": 768,  "initializer_range": 0.02,  "intermediate_size": 3072,  "layer_norm_eps": 1e-12,  "max_position_embeddings": 2048,  "model_type": "ernie",  "num_attention_heads": 12,  "num_hidden_layers": 12,  "pad_token_id": 0,  "paddlenlp_version": null,  "pool_act": "tanh",  "task_id": 0,  "task_type_vocab_size": 3,  "type_vocab_size": 4,  "use_task_id": true,  "vocab_size": 40000}W0617 11:13:01.221978  5838 gpu_resources.cc:61] Please NOTE: device: 0, GPU Compute Capability: 8.0, Driver API Version: 11.2, Runtime API Version: 11.2W0617 11:13:01.224613  5838 gpu_resources.cc:91] device: 0, cuDNN Version: 8.2.[2023-06-17 11:13:02,350] [    INFO] - All model checkpoint weights were used when initializing UIE.[2023-06-17 11:13:02,350] [    INFO] - All the weights of UIE were initialized from the model checkpoint at ./checkpoint/model_best.If your task is similar to the task the model of the checkpoint was trained on, you can already use UIE for predictions without further training.[2023-06-17 11:13:14,607] [    INFO] - -----------------------------[2023-06-17 11:13:14,607] [    INFO] - Class Name: all_classes[2023-06-17 11:13:14,607] [    INFO] - Evaluation Precision: 0.96529 | Recall: 0.96950 | F1: 0.96739
#debug!python evaluate.py \    --model_path ./checkpoint/model_best \    --test_path ./data/dev.txt \    --debug 
[2023-06-17 11:13:18,817] [    INFO] - We are using  to load "./checkpoint/model_best".[2023-06-17 11:13:18,840] [    INFO] - loading configuration file ./checkpoint/model_best/config.json[2023-06-17 11:13:18,841] [    INFO] - Model config ErnieConfig {  "architectures": [    "UIE"  ],  "attention_probs_dropout_prob": 0.1,  "dtype": "float32",  "enable_recompute": false,  "fuse": false,  "hidden_act": "gelu",  "hidden_dropout_prob": 0.1,  "hidden_size": 768,  "initializer_range": 0.02,  "intermediate_size": 3072,  "layer_norm_eps": 1e-12,  "max_position_embeddings": 2048,  "model_type": "ernie",  "num_attention_heads": 12,  "num_hidden_layers": 12,  "pad_token_id": 0,  "paddlenlp_version": null,  "pool_act": "tanh",  "task_id": 0,  "task_type_vocab_size": 3,  "type_vocab_size": 4,  "use_task_id": true,  "vocab_size": 40000}W0617 11:13:20.786005  5889 gpu_resources.cc:61] Please NOTE: device: 0, GPU Compute Capability: 8.0, Driver API Version: 11.2, Runtime API Version: 11.2W0617 11:13:20.789184  5889 gpu_resources.cc:91] device: 0, cuDNN Version: 8.2.[2023-06-17 11:13:21,943] [    INFO] - All model checkpoint weights were used when initializing UIE.[2023-06-17 11:13:21,943] [    INFO] - All the weights of UIE were initialized from the model checkpoint at ./checkpoint/model_best.If your task is similar to the task the model of the checkpoint was trained on, you can already use UIE for predictions without further training.[2023-06-17 11:13:23,749] [    INFO] - -----------------------------[2023-06-17 11:13:23,749] [    INFO] - Class Name: 舰船舰艇[2023-06-17 11:13:23,749] [    INFO] - Evaluation Precision: 0.98077 | Recall: 1.00000 | F1: 0.99029[2023-06-17 11:13:24,017] [    INFO] - -----------------------------[2023-06-17 11:13:24,017] [    INFO] - Class Name: 其他武器装备[2023-06-17 11:13:24,017] [    INFO] - Evaluation Precision: 0.92157 | Recall: 0.92157 | F1: 0.92157[2023-06-17 11:13:24,263] [    INFO] - -----------------------------[2023-06-17 11:13:24,263] [    INFO] - Class Name: 单兵武器[2023-06-17 11:13:24,263] [    INFO] - Evaluation Precision: 0.98000 | Recall: 0.96078 | F1: 0.97030[2023-06-17 11:13:24,591] [    INFO] - -----------------------------[2023-06-17 11:13:24,592] [    INFO] - Class Name: 装甲车辆[2023-06-17 11:13:24,592] [    INFO] - Evaluation Precision: 0.96078 | Recall: 0.96078 | F1: 0.96078[2023-06-17 11:13:24,789] [    INFO] - -----------------------------[2023-06-17 11:13:24,789] [    INFO] - Class Name: 飞行器[2023-06-17 11:13:24,789] [    INFO] - Evaluation Precision: 1.00000 | Recall: 1.00000 | F1: 1.00000[2023-06-17 11:13:24,993] [    INFO] - -----------------------------[2023-06-17 11:13:24,993] [    INFO] - Class Name: 太空装备[2023-06-17 11:13:24,993] [    INFO] - Evaluation Precision: 0.96226 | Recall: 1.00000 | F1: 0.98077[2023-06-17 11:13:25,280] [    INFO] - -----------------------------[2023-06-17 11:13:25,280] [    INFO] - Class Name: 导弹[2023-06-17 11:13:25,280] [    INFO] - Evaluation Precision: 0.98000 | Recall: 0.96078 | F1: 0.97030[2023-06-17 11:13:25,611] [    INFO] - -----------------------------[2023-06-17 11:13:25,612] [    INFO] - Class Name: 火炮[2023-06-17 11:13:25,612] [    INFO] - Evaluation Precision: 0.94118 | Recall: 0.94118 | F1: 0.94118[2023-06-17 11:13:25,901] [    INFO] - -----------------------------[2023-06-17 11:13:25,901] [    INFO] - Class Name: 炸弹[2023-06-17 11:13:25,902] [    INFO] - Evaluation Precision: 0.96154 | Recall: 0.98039 | F1: 0.97087

可配置参数说明:

部分结果展示:

[2023-06-16 19:50:40,632] [    INFO] - [2023-06-16 19:50:40,632] [    INFO] - Class Name: all_classes[2023-06-16 19:50:40,632] [    INFO] - Evaluation Precision: 0.74713 | Recall: 0.73864 | F1: 0.74286
[2023-06-17 11:13:23,749] [    INFO] - Class Name: 舰船舰艇[2023-06-17 11:13:23,749] [    INFO] - Evaluation Precision: 0.98077 | Recall: 1.00000 | F1: 0.99029[2023-06-17 11:13:24,017] [    INFO] - -----------------------------[2023-06-17 11:13:24,017] [    INFO] - Class Name: 其他武器装备[2023-06-17 11:13:24,017] [    INFO] - Evaluation Precision: 0.92157 | Recall: 0.92157 | F1: 0.92157[2023-06-17 11:13:24,263] [    INFO] - -----------------------------[2023-06-17 11:13:24,263] [    INFO] - Class Name: 单兵武器[2023-06-17 11:13:24,263] [    INFO] - Evaluation Precision: 0.98000 | Recall: 0.96078 | F1: 0.97030[2023-06-17 11:13:24,591] [    INFO] - -----------------------------[2023-06-17 11:13:24,592] [    INFO] - Class Name: 装甲车辆[2023-06-17 11:13:24,592] [    INFO] - Evaluation Precision: 0.96078 | Recall: 0.96078 | F1: 0.96078[2023-06-17 11:13:24,789] [    INFO] - -----------------------------[2023-06-17 11:13:24,789] [    INFO] - Class Name: 飞行器[2023-06-17 11:13:24,789] [    INFO] - Evaluation Precision: 1.00000 | Recall: 1.00000 | F1: 1.00000[2023-06-17 11:13:24,993] [    INFO] - -----------------------------[2023-06-17 11:13:24,993] [    INFO] - Class Name: 太空装备[2023-06-17 11:13:24,993] [    INFO] - Evaluation Precision: 0.96226 | Recall: 1.00000 | F1: 0.98077[2023-06-17 11:13:25,280] [    INFO] - -----------------------------[2023-06-17 11:13:25,280] [    INFO] - Class Name: 导弹[2023-06-17 11:13:25,280] [    INFO] - Evaluation Precision: 0.98000 | Recall: 0.96078 | F1: 0.97030[2023-06-17 11:13:25,611] [    INFO] - -----------------------------[2023-06-17 11:13:25,612] [    INFO] - Class Name: 火炮[2023-06-17 11:13:25,612] [    INFO] - Evaluation Precision: 0.94118 | Recall: 0.94118 | F1: 0.94118[2023-06-17 11:13:25,901] [    INFO] - -----------------------------[2023-06-17 11:13:25,901] [    INFO] - Class Name: 炸弹[2023-06-17 11:13:25,902] [    INFO] - Evaluation Precision: 0.96154 | Recall: 0.98039 | F1: 0.97087

2.4 模型预测

paddlenlp.Taskflow装载定制模型,通过task_path指定模型权重文件的路径,路径下需要包含训练好的模型权重文件model_state.pdparams。

相关bug:KeyError: "sentencepiece_model_file"

同一个脚本先加载uie-x,再加载uie,报错KeyError: "sentencepiece_model_file":https://github.com/PaddlePaddle/PaddleNLP/issues/5795

加载过uiem之后不能加载uie模型:https://github.com/PaddlePaddle/PaddleNLP/issues/5615

  1. 修复加载最新版本paddlenlp重启内核即可
  2. 重启项目,先加载uie,再加在uie-x则不出错
# !pip install --pre --upgrade paddlenlp -f https://www.paddlepaddle.org.cn/whl/paddlenlp.html
!pip install fast-tokenizer-python
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simpleRequirement already satisfied: fast-tokenizer-python in /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages (1.0.2)[notice] A new release of pip available: 22.1.2 -> 23.1.2[notice] To update, run: pip install --upgrade pip

position_prob是指模型对于span的起始位置和终止位置的结果得分。由于这是一个得分,所以它的取值范围在0~1之间,0表示完全不可能成为起始位置或终止位置,1表示完全符合条件。默认情况下,我们将得分高于0.5的结果视为有效结果,否则视为无效结果。

最终,我们需要通过起始位置和终止位置的得分,计算出整个span的得分。这个得分可以看作是起始位置概率和终止位置概率的乘积,因为只有当两个概率都高时,才能说明这个span的得分比较高。如果有一个位置的得分很低,那么整个span的得分也会相应降低。

from pprint import pprintfrom paddlenlp import Taskflowschema = {"飞行器","单兵武器", "炸弹", "装甲车辆","其他武器装备","太空装备","舰船舰艇","导弹","火炮"}my_ie = Taskflow("information_extraction", schema=schema,batch_size=16,task_path="./checkpoint/model_best",model="uie-base",precision="fp32",position_prob=0.55)# my_ie = Taskflow("information_extraction", schema=schema,schema_lang="zh",batch_size=32,task_path="./checkpointx/model_best",model="uie-m-large")pprint(my_ie("第五艘西班牙海军F-100级护卫舰即将装备集成通信控制系统。该系统由葡萄牙EID公司生产。该系统已经用于巴西海军的圣保罗航母,荷兰海军的四艘荷兰级海上巡逻舰和四艘西班牙海军BAM近海巡逻舰。F-105护卫舰于2009年初铺设龙骨。该舰预计2010年建造完成,2012年夏交付。"))pprint(my_ie("美国空军部长希瑟・威尔逊本周二宣布,Space-X公司将于8月份发射空军X-37B无人轨道机动飞行器。而在前4次轨道试验任务中,X-37B由联合发射联盟的宇宙神-5火箭发射。威尔逊在网络直播的参议院军事委员会听证会上表示,Space-X公司将于8月份发射空军有效载荷进入轨道,该载荷为空军两架X-37B飞行器之一。空军在X-37B发射前2个月公布发射合同,而通常是在发射前2年公布,并且拒绝披露合同授予日期及其他细节。SpaceX总裁GwynneShotwell拒绝置评。"))
[2023-06-17 11:17:46,069] [    INFO] - loading configuration file ./checkpoint/model_best/config.json[2023-06-17 11:17:46,072] [    INFO] - Model config ErnieConfig {  "architectures": [    "UIE"  ],  "attention_probs_dropout_prob": 0.1,  "dtype": "float32",  "enable_recompute": false,  "fuse": false,  "hidden_act": "gelu",  "hidden_dropout_prob": 0.1,  "hidden_size": 768,  "initializer_range": 0.02,  "intermediate_size": 3072,  "layer_norm_eps": 1e-12,  "max_position_embeddings": 2048,  "model_type": "ernie",  "num_attention_heads": 12,  "num_hidden_layers": 12,  "pad_token_id": 0,  "paddlenlp_version": null,  "pool_act": "tanh",  "task_id": 0,  "task_type_vocab_size": 3,  "type_vocab_size": 4,  "use_task_id": true,  "vocab_size": 40000}[2023-06-17 11:17:47,827] [    INFO] - All model checkpoint weights were used when initializing UIE.[2023-06-17 11:17:47,830] [    INFO] - All the weights of UIE were initialized from the model checkpoint at ./checkpoint/model_best.If your task is similar to the task the model of the checkpoint was trained on, you can already use UIE for predictions without further training.[2023-06-17 11:17:47,833] [    INFO] - Converting to the inference model cost a little time.[2023-06-17 11:17:54,964] [    INFO] - The inference model save in the path:./checkpoint/model_best/static/inference[2023-06-17 11:17:56,936] [    INFO] - We are using  to load "./checkpoint/model_best".[{"舰船舰艇": [{"end": 103,            "probability": 0.9993847362591879,            "start": 95,            "text": "F-105护卫舰"},           {"end": 17,            "probability": 0.9561809895684519,            "start": 8,            "text": "F-100级护卫舰"},           {"end": 94,            "probability": 0.6309098078362751,            "start": 86,            "text": "BAM近海巡逻舰"},           {"end": 78,            "probability": 0.9929937742996913,            "start": 70,            "text": "荷兰级海上巡逻舰"},           {"end": 62,            "probability": 0.9938209366804145,            "start": 57,            "text": "圣保罗航母"}]}][{"太空装备": [{"end": 84,            "probability": 0.5503150068932996,            "start": 77,            "text": "宇宙神-5火箭"}],  "飞行器": [{"end": 69,           "probability": 0.9939817925809464,           "start": 64,           "text": "X-37B"},          {"end": 154,           "probability": 0.884662710696297,           "start": 146,           "text": "X-37B飞行器"},          {"end": 165,           "probability": 0.9965047226514798,           "start": 160,           "text": "X-37B"},          {"end": 50,           "probability": 0.9932846224923821,           "start": 34,           "text": "空军X-37B无人轨道机动飞行器"}]}]

部分结果展示:

[{"舰船舰艇": [{"end": 103,            "probability": 0.9993847362591879,            "start": 95,            "text": "F-105护卫舰"},           {"end": 17,            "probability": 0.9561809895684519,            "start": 8,            "text": "F-100级护卫舰"},           {"end": 94,            "probability": 0.6309098078362751,            "start": 86,            "text": "BAM近海巡逻舰"},           {"end": 78,            "probability": 0.9929937742996913,            "start": 70,            "text": "荷兰级海上巡逻舰"},           {"end": 62,            "probability": 0.9938209366804145,            "start": 57,            "text": "圣保罗航母"}]}][{"太空装备": [{"end": 84,            "probability": 0.5503150068932996,            "start": 77,            "text": "宇宙神-5火箭"}],  "飞行器": [{"end": 69,           "probability": 0.9939817925809464,           "start": 64,           "text": "X-37B"},          {"end": 154,           "probability": 0.884662710696297,           "start": 146,           "text": "X-37B飞行器"},          {"end": 165,           "probability": 0.9965047226514798,           "start": 160,           "text": "X-37B"},          {"end": 50,           "probability": 0.9932846224923821,           "start": 34,           "text": "空军X-37B无人轨道机动飞行器"}]}]
import jsonfrom paddlenlp import Taskflowimport pandas as pd#修改需要预测数据path="/home/aistudio/input/test-5.json"# path="/home/aistudio/input/ner_test.json"with open(path, "r", encoding="utf-8") as f:    data = json.load(f)texts = [d["text"] for d in data]text_list = [" ".join(text.split()) for text in texts]text_list = [[text] for text in text_list]# 模型处理函数schema = {"飞行器","单兵武器", "炸弹", "装甲车辆","其他武器装备","太空装备","舰船舰艇","导弹","火炮"}my_ie = Taskflow("information_extraction", schema=schema,batch_size=8,task_path="/home/aistudio/checkpoint/model_best")results=my_ie(texts)print(results)with open("output.txt", "w+",encoding="UTF-8") as f:    #a :   写入文件,若文件不存在则会先创建再写入,但不会覆盖原文件,而是追加在文件末尾    for result in results:        line = json.dumps(result, ensure_ascii=False)  #对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii=False        f.write(line + "\n")output = []for i, d in enumerate(data):    sample_id = d["sample_id"]    text = d["text"]    for key, value in results[i].items():        for v in value:            output.append({                "sample_id": sample_id,                "text": v["text"],                "type": key,                "start": v.get("start", 0),                "end": v.get("end", 0)            })# 将结果写入文件中with open("submit.json", "w", encoding="utf-8") as f:    json.dump(output, f, ensure_ascii=False, indent=4)print("在A100下,完整结果导出时间需要12.5min+-,")
[2023-06-18 10:37:23,636] [    INFO] - loading configuration file /home/aistudio/checkpoint/model_best/config.json[2023-06-18 10:37:23,641] [    INFO] - Model config ErnieConfig {  "architectures": [    "UIE"  ],  "attention_probs_dropout_prob": 0.1,  "dtype": "float32",  "enable_recompute": false,  "fuse": false,  "hidden_act": "gelu",  "hidden_dropout_prob": 0.1,  "hidden_size": 768,  "initializer_range": 0.02,  "intermediate_size": 3072,  "layer_norm_eps": 1e-12,  "max_position_embeddings": 2048,  "model_type": "ernie",  "num_attention_heads": 12,  "num_hidden_layers": 12,  "pad_token_id": 0,  "paddlenlp_version": null,  "pool_act": "tanh",  "task_id": 0,  "task_type_vocab_size": 3,  "type_vocab_size": 4,  "use_task_id": true,  "vocab_size": 40000}[2023-06-18 10:37:36,648] [    INFO] - All model checkpoint weights were used when initializing UIE.[2023-06-18 10:37:36,651] [    INFO] - All the weights of UIE were initialized from the model checkpoint at /home/aistudio/checkpoint/model_best.If your task is similar to the task the model of the checkpoint was trained on, you can already use UIE for predictions without further training.[2023-06-18 10:37:36,655] [    INFO] - Converting to the inference model cost a little time.[2023-06-18 10:37:49,285] [    INFO] - The inference model save in the path:/home/aistudio/checkpoint/model_best/static/inference[2023-06-18 10:37:50,217] [    INFO] - We are using  to load "/home/aistudio/checkpoint/model_best".[{"舰船舰艇": [{"text": "F-105护卫舰", "start": 95, "end": 103, "probability": 0.9993853321214488}, {"text": "F-100级护卫舰", "start": 8, "end": 17, "probability": 0.9563263792874181}, {"text": "BAM近海巡逻舰", "start": 86, "end": 94, "probability": 0.6336507143336227}, {"text": "荷兰级海上巡逻舰", "start": 70, "end": 78, "probability": 0.9929986380754485}, {"text": "圣保罗航母", "start": 57, "end": 62, "probability": 0.9938496606350746}]}, {"飞行器": [{"text": "海王直升机", "start": 283, "end": 288, "probability": 0.9975667479452532}, {"text": "海王直升机", "start": 341, "end": 346, "probability": 0.9964911773516612}, {"text": "山猫Mk9A直升机", "start": 414, "end": 423, "probability": 0.9995674330360202}, {"text": "海王直升机", "start": 384, "end": 389, "probability": 0.9990367223152745}, {"text": "海王HC4型直升机", "start": 140, "end": 149, "probability": 0.9979166426240695}, {"text": "山猫HMA8直升机", "start": 398, "end": 407, "probability": 0.9996339417611502}, {"text": "海王HC4直升机", "start": 212, "end": 220, "probability": 0.9981994933614828}],完整结果导出时间需要12.5min

5.更多改进策略:提高卷积神经网络的泛化能力

在做工程的时候如何提高自己训练出来的模型的泛化能力是一项具有挑战性同时也是一件充满"玄学"的事情。大概可以总结为下面这几点。

6.总结

更多优质内容请关注公重号:汀丶人工智能

项目链接以及本地码源见文末

云端项目复现链接:https://www.heywhale.com/mw/project/648e811202479f749d15842b

本地码源链接见:https://blog.csdn.net/sinat_39620217/article/details/131270249

相关新闻

猜你喜欢

全国大数据与计算智能挑战赛:面向低资源的命名实体识别基线方案,排名13/64|焦点要闻

2023-06-18

环球最资讯丨吉镜头|长春持续高温天气 市民开启“防晒模式”

2023-06-18

武汉市教育局最新名单公示 每日简讯

2023-06-18

【快播报】国内首款市域C型动车组亮相:时速达160公里

2023-06-18

暗黑破坏神4隐藏头盔方法 焦点信息

2023-06-18

如何种植芦笋_种植芦笋的方法介绍

2023-06-18

【世界速看料】天气一热,血压也不开始“不安分”?日常做好这7点,或能安稳度夏

2023-06-18

有头脑的女人,在婆家要三不做,越不做,地位越高

2023-06-18

宝马打造的“黑武士”,车长5米、4座布局,718匹马力3s破百

2023-06-18

信息:未婚妻参加库尔图瓦比利时队百场纪念仪式,裤袜晒照秀恩爱

2023-06-18

环球新资讯:微软股价飙升受益于ChatGPT等人工智能技术发展

2023-06-18

苏州买房:楼市两极分化将会更加严重!

2023-06-18

高考网上评卷进展顺利|世界播报

2023-06-18

联合国秘书长:国际货币基金组织和世界银行“该改革了”_环球消息

2023-06-18

街机三国礼包大全(街机三国礼包)|全球最新

2023-06-18

【焦点热闻】深汕鲘门海域惊现“龙吸水”

2023-06-18

每日速读!金桥信息6月6日盘中涨幅达5%

2023-06-18

泰山队争议外援归队,新外援也有了眉目,小德恐将再次成为牺牲品_天天速看

2023-06-18

当然,并非所有消费金融公司都有能力和精力去做房抵业务,相比小额现金贷和固收、分润助贷业务,房抵业务需要投入更大的资金占用及人力推广成本,显然不是一个躺赚的生意。|新资讯

2023-06-18

是曝光还是侵权?关于肖像权的问题要明白

2023-06-18

焦点速读:实景模型 给视域分析 带来新的契机

2023-06-18

海航是国企还是央企_海航集团是国企还是私企

2023-06-18

熵减科技旗下app(熵减科技)-世界焦点

2023-06-18

韩国甜宠剧推荐巨甜_甜宠剧推荐巨甜-天天信息

2023-06-18

环球微头条丨idfa是什么意思_idf

2023-06-17

精彩图集