共计 27117 个字符,预计需要花费 68 分钟才能阅读完成。
全国大数据与计算智能挑战赛:面向低资源的命名实体辨认基线计划,排名 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。
文件类型 | 文件名 | 文件阐明 |
---|---|---|
<p> 训练集 </p> | ner_train.json | 97 条已标注样本,每个样本对应内容为:样本 id(sample_id),原始文本(text)和标注实体列表(annotations),列表中每个元素对应一个实体,包含类型(type)、文本(text)、跨度起始地位(start)和完结地位(end) |
测试集 | ner_test.json | 5920 条未标注样本,每个样本对应内容为:样本 id(sample_id)和原始文本(text) |
• 复赛数据阐明
共计约 4500 条样本,蕴含多个工作,每个工作仅波及一个实体类型,共计 6 个工作 / 实体类型:1. 装甲车辆;2. 火炮;3. 导弹;4. 舰船舰艇;5. 炸弹;6. 太空配备。每个工作领有各自的工作 id(即每个类型后面的序号)、训练、验证和测试集文件(大抵按 6:1:3 的比例进行划分)。所有数据文件编码均为 UTF-8。每个工作的数据集共划分为以下几个文件:
每个工作的数据集共划分为以下几个文件:
文件类型 | 文件名 | 文件阐明 |
---|---|---|
<p> 训练集 </p> | #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=91i=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=1iF1i,j;
• 学完所有工作后失去每个阶段的性能 F1(1)∼F1(N),求其均值 F1N=N1∑i=1NF1(i),用于总结模型的整个学习曲线;
• 为了排除工作程序对性能的影响,每个序列后面的序号即为前述 seq_id,序列元素示意工作 id:
> 1. 1-2-3-4-5-6
> 2. 2-4-6-1-3-5
> 3. 3-1-5-2-6-4
> 4. 4-6-2-5-1-3
> 5. 5-3-1-6-4-2
> 6. 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
`
python
#应用最新版本 paddlenlp
!pip install -U paddlenlp`
# 3. 数据转换
通过转换的数据已放在 data_all 目录下,间接应用即可。
`
python
#挪动数据到指定目录
!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:学习率更新策略
Warmup 原理指的是在训练神经网络模型时,通过逐步增大学习率来进步模型的训练成果。在模型训练开始的阶段,逐渐减少学习率的大小,直到达到预设最大值,而后再放弃不变。这个过程能够让模型逐步从初始状态进入到稳固状态,防止在训练初期呈现较大的震荡或梯度爆炸等状况,同时也能减速模型训练过程。在理论利用中通常会采纳一些特定的 warmup 策略,如线性递增、多项式递增等,在肯定水平上能够晋升模型的性能体现。此外,还能够联合其余技巧,如批归一化、dropout 等,来进一步改善模型的训练成果。
* 线性调整策略(linear):在每个训练步骤中将学习率按线性递加的形式进行衰减,直到达到最小值。该策略通常实用于训练过程稳固的场景。
* 余弦退火策略(cosine):依据余弦函数的曲线进行学习率的动静调整,先从较大的学习率开始逐渐降落,而后在训练周期的后半局部加快调整速度,使得学习率更快地衰减,并且在训练实现前靠近于 0。该策略能够帮忙进步模型的精度和稳定性。
* 固定学习率策略(constant):在整个训练过程中放弃不变的学习率,实用于数据集较小,训练较快的场景。
* 和煦启动固定学习率策略(constant_with_warmup):该策略先应用较小的学习率进行预热,在肯定步数内逐步减少学习率,而后在残余训练步数内应用较大的学习率进行训练。预热能够帮忙模型在刚开始训练时更好地适应数据集,放慢学习速度和进步模型精度。
Warmup ratio 的大小次要取决于训练数据的规模,模型的复杂度和工作的难度等因素。通常来说,warmup_ratio 设置为 0.1 左右比拟适合。这意味着,在整个训练过程中,模型的前 10% 的迭代次数将会采纳绝对较小的学习率进行 warmup。
> 须要留神的是,如果 warmup_ratio 设置过大,可能会导致模型在 warmup 阶段破费过多工夫,从而影响整个训练过程的停顿。反之,如果 warmup_ratio 设置过小,则可能无奈充沛调整模型参数,导致模型训练不稳固,或者呈现梯度爆炸等问题。因而,须要依据具体情况,正当地设置 warmup_ratio 的大小,以达到最佳的训练成果。
* 正则化(Regularization)
权重衰减 / 权重消退:Weight Decay 是一个正则化技术,作用是克制模型的过拟合,以此来进步模型的泛化性。它是通过给损失函数减少模型权重 L2 范数的惩办 (penalty) 来让模型权重不要太大,以此来减小模型的复杂度,从而克制模型的过拟合。除了所有 bias 和 LayerNorm 权重之外,利用于所有层的权重衰减数值,在训练期间对模型的权重施加额定惩办(通常是 L2 正则化)来避免适度拟合。
* weight decay 的最佳值通常取决于数据集和模型自身。不同的模型和数据集可能对 weight decay 有不同的敏感度。如果 weight decay 设置太低,则模型可能会适度拟合;如果设置太高,则可能会导致模型对训练数据的拟合能力较差。
* 倡议应用网格搜寻或穿插验证等技术来抉择最佳的 weight decay 值通常倡议尝试一组设置,例如 [1e-6,1e-5, 1e-4, 1e-3, 1e-2],并依据穿插验证性能抉择最佳后果。
*
`
python
#单卡训练
!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`
局部后果展现:
* eval_f1 = 0.9674
`
[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
,因而在训练完会主动进行评估。
可配置参数阐明:
* model_name_or_path
:必须,进行 few shot 训练应用的预训练模型。可抉择的有 “uie-base”、“uie-medium”, “uie-mini”, “uie-micro”, “uie-nano”, “uie-m-base”。
* device
: 训练设施,可抉择 ‘cpu’、’gpu’、’npu’ 其中的一种;默认为 GPU 训练。
* logging_steps
: 训练过程中日志打印的距离 steps 数,默认 10。
* save_steps
: 训练过程中保留模型 checkpoint 的距离 steps 数,默认 100。
* eval_steps
: 训练过程中保留模型 checkpoint 的距离 steps 数,默认 100。
* seed
:全局随机种子,默认为 42。
* output_dir
:必须,模型训练或压缩后保留的模型目录;默认为 None
。
* train_path
:训练集门路;默认为 None
。
* dev_path
:开发集门路;默认为 None
。
* max_seq_len
:文本最大切分长度,输出超过最大长度时会对输出文本进行主动切分,默认为 512。
* per_device_train_batch_size
: 用于训练的每个 GPU 外围 /CPU 的 batch 大小,默认为 8。
* per_device_eval_batch_size
: 用于评估的每个 GPU 外围 /CPU 的 batch 大小,默认为 8。
* num_train_epochs
: 训练轮次,应用早停法时能够抉择 100;默认为 10。
* learning_rate
:训练最大学习率,UIE-X 举荐设置为 1e-5;默认值为 3e-5。
* weight_decay
:除了所有 bias 和 LayerNorm 权重之外,利用于所有层的权重衰减数值。可选;默认为 0.0;
* label_names
:训练数据标签 label 的名称,UIE-X 设置为 ’start_positions’ ‘end_positions’;默认值为 None。
* do_train
: 是否进行微调训练,设置该参数示意进行微调训练,默认不设置。
* do_eval
: 是否进行评估,设置该参数示意进行评估,默认不设置。
* do_export
: 是否进行导出,设置该参数示意进行动态图导出,默认不设置。
* export_model_dir
: 动态图导出地址,默认为 None。
* overwrite_output_dir
:如果 True
,笼罩输入目录的内容。如果 output_dir
指向检查点目录,则应用它持续训练。
* disable_tqdm
:是否应用 tqdm 进度条。
* metric_for_best_model
:最优模型指标,UIE-X 举荐设置为 eval_f1
,默认为 None。
* load_best_model_at_end
:训练完结后是否加载最优模型,通常与 metric_for_best_model
配合应用,默认为 False。
* save_total_limit
:如果设置次参数,将限度 checkpoint 的总数。删除旧的 checkpoints 输入目录
,默认为 None。
## 2.3 模型评估
评估形式阐明:采纳单阶段评估的形式,即关系抽取、事件抽取等须要分阶段预测的工作对每一阶段的预测后果进行别离评估。验证 / 测试集默认会利用同一层级的所有标签来结构出全副负例。
可开启 debug 模式 对每个正例类别别离进行评估,该模式仅用于模型调试:
`
python
!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 <class ‘paddlenlp.transformers.ernie.tokenizer.ErnieTokenizer’> 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.2
W0617 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
`
python
#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 <class ‘paddlenlp.transformers.ernie.tokenizer.ErnieTokenizer’> 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.2
W0617 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
可配置参数阐明:
– device
: 评估设施,可抉择 ‘cpu’、’gpu’、’npu’ 其中的一种;默认为 GPU 评估。
– model_path
: 进行评估的模型文件夹门路,门路下需蕴含模型权重文件 model_state.pdparams
及配置文件model_config.json
。
– test_path
: 进行评估的测试集文件。
– batch_size
: 批处理大小,请联合机器状况进行调整,默认为 16。
– max_seq_len
: 文本最大切分长度,输出超过最大长度时会对输出文本进行主动切分,默认为 512。
– debug
: 是否开启 debug 模式对每个正例类别别离进行评估,该模式仅用于模型调试,默认敞开。
– multilingual
: 是否是跨语言模型,默认敞开。
– schema_lang
: 抉择 schema 的语言,可选有 ch
和en
。默认为ch
,英文数据集请抉择en
。
局部后果展现:
`
[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
`
* 总共 9 种实体类型:飞行器, 单兵武器, 炸弹, 装甲车辆, 火炮, 导弹, 舰船舰艇, 太空配备, 其余武器装备
`
[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 则不出错
`
python
# !pip install –pre –upgrade paddlenlp -f https://www.paddlepaddle.org.cn/whl/paddlenlp.html`
`
python
!pip install fast-tokenizer-python`
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Requirement 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 的得分也会相应升高。
`
python
from pprint import pprint
from paddlenlp import Taskflow
schema = {“ 飞行器 ”,” 单兵武器 ”, “ 炸弹 ”, “ 装甲车辆 ”,” 其余武器装备 ”,” 太空配备 ”,” 舰船舰艇 ”,” 导弹 ”,” 火炮 ”}
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 <class ‘paddlenlp.transformers.ernie.tokenizer.ErnieTokenizer’> 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 无人轨道机动飞行器 ’}]}]`
* schema
:定义工作抽取指标,可参考开箱即用中不同工作的调用示例进行配置。
* schema_lang
:设置 schema 的语言,默认为 zh
, 可选有zh
和en
。因为中英 schema 的结构有所不同,因而须要指定 schema 的语言。该参数只对 uie-m-base
和uie-m-large
模型无效。
* batch_size
:批处理大小,请联合机器状况进行调整,默认为 1。
* model
:抉择工作应用的模型,默认为 uie-base
,可选有uie-base
, uie-medium
, uie-mini
, uie-micro
, uie-nano
和uie-medical-base
, uie-base-en
。
* position_prob
:模型对于 span 的起始地位 / 终止地位的后果概率在 0~1 之间,返回后果去掉小于这个阈值的后果,默认为 0.5,span 的最终概率输入为起始地位概率和终止地位概率的乘积。
* precision
:抉择模型精度,默认为 fp32
,可选有fp16
和fp32
。fp16
推理速度更快,反对 GPU 和 NPU 硬件环境。如果抉择 fp16
,在 GPU 硬件环境下,请先确保机器正确装置 NVIDIA 相关驱动和根底软件, 确保 CUDA>=11.2,cuDNN>=8.1.1,首次应用需依照提醒装置相干依赖。其次,须要确保 GPU 设施的 CUDA 计算能力(CUDA Compute Capability)大于 7.0,典型的设施包含 V100、T4、A10、A100、GTX 20 系列和 30 系列显卡等。
* use_fast
: 应用 C ++ 实现的高性能分词算子 FastTokenizer 进行文本预处理减速。须要通过 pip install fast-tokenizer-python
装置 FastTokenizer 库前方可应用。默认为False
。
`
python
import json
from paddlenlp import Taskflow
import 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 = [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 <class ‘paddlenlp.transformers.ernie.tokenizer.ErnieTokenizer’> 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. 更多改良策略:进步卷积神经网络的泛化能力
在做工程的时候如何进步本人训练进去的模型的泛化能力是一项具备挑战性同时也是一件充斥 ” 玄学 ” 的事件。大略能够总结为上面这几点。
* 数据加强(Data Augmentation):通过对训练数据进行加强,使得同类数据的表现形式更加丰盛,以此进步模型的泛化能力,能够无效缩小过拟合。例如,能够应用同义词替换、随机插入、随机删除或调换词语地位等办法来生成更多的训练样本,减少数据的多样性。
* 正则化(Regularization):在模型训练中引入正则化项,如 L1 正则化或 L2 正则化,能够对模型的复杂度进行束缚,避免过拟合。正则化能够通过在损失函数中增加正则化项,惩办模型的复杂度。
* 权重惩办:权重惩办也即是正则化操作,个别是在损失函数中增加一项权重矩阵的正则项作为惩办项,用来惩办损失值较小时网络权重过大的状况,此时往往是网络权值过拟合了数据样本。
* 早停(Early Stopping):通过监控验证集上的性能,当模型在验证集上的性能不再晋升时,能够提前进行训练,避免过拟合。这样能够防止模型在训练集上适度拟合。
* Dropout 策略:在神经网络中应用 Dropout 层能够缩小过拟合。Dropout 是指在训练过程中,随机将一部分神经元的输入设置为 0,这样能够强制模型学习更鲁棒的特色示意。如果网络最初有全连贯层能够应用 Dropout,相当于对深度学习模型做了 Ensemble,有助于进步模型的泛化能力。
* 参数调节:调整模型的超参数,如学习率、批次大小、暗藏层大小等,能够对模型的性能和过拟合水平产生影响。能够应用穿插验证或网格搜寻等办法来寻找最佳的超参数组合。
* 模型集成:通过组合多个不同的模型,能够缩小过拟合。例如,能够应用集成办法,如 Bagging 或 Boosting,来交融多个根底模型的预测后果,以升高模型的方差。
* 减少训练数据量:如果可能的话,尽量减少训练数据量。更多的数据能够提供更多的样本多样性,有助于缩小过拟合。这是进步泛化能力最现实的办法,更多的数据让模型失去更充沛的学习,天然进步了泛化能力,但理论场景中思考到标注老本的问题,可能并不能无脑加数据。
* 应用更大的 batch_size:在雷同迭代次数和学习率的条件下,每批次采纳更多的数据将有助于模型更好的学习到正确的模式,模型输入后果也会更加稳固。
* 数据过采样:很多状况下咱们拿到手的数据都存在类别不平均的状况,模型这个时候过多的拟合某类数量多的数据导致其输入后果偏差于该类数据,此时如果咱们过采样其余类别的数据,使得数据量比拟平衡能够肯定水平进步泛化能力。
* 批改损失函数:晋升模型的泛化能力。
* 应用更厉害的模型:一个 SOTA 预训练模型作为底座很重要。
# 6. 总结
更多优质内容请关注公重号:汀丶人工智能
# 我的项目链接以及本地码源见文末
云端我的项目复现链接:https://www.heywhale.com/mw/project/648e811202479f749d15842b
本地码源链接见:https://blog.csdn.net/sinat_39620217/article/details/131270249