未验证 提交 083cdecf 编写于 作者: X Xiaoyao Xi 提交者: GitHub

Update README.md

上级 99af541e
# PaddlePALM
PaddlePALM (Paddle for Pretraining And Learning Multi-task) 是一个强大快速、灵活易用的NLP大规模预训练与多任务学习框架。通过PaddlePALM,用户可以轻松完成复杂的多任务学习与参数复用,无缝集成**「单任务训练」****「主辅任务训练」****「多目标任务联合训练」**以及**「预训练」****4** 种训练方式和灵活的保存与预测机制,且仅需书写极少量代码即可”一键启动”高性能单机单卡和分布式训练与推理。
PaddlePALM (Paddle for Pretraining And Learning Multi-task) 是一个强大快速、灵活易用的NLP大规模预训练与多任务学习框架。通过PaddlePALM,用户可以轻松完成复杂的多任务学习与参数复用,无缝集成**「单任务训练」****「多任务辅助训练」****「多目标任务联合训练」**以及**「单/多任务预训练」****4** 种训练方式和灵活的保存与预测机制,且仅需书写极少量代码即可”一键启动”高性能单机单卡和分布式训练与推理。
框架中内置了丰富的[主干网络]()及其[预训练模型]()(BERT、ERNIE等)、常见的[任务范式]()(分类、匹配、机器阅读理解等)和相应的[数据集读取与处理工具]()。同时框架提供了用户自定义接口,若内置工具、主干网络和任务无法满足需求,开发者可以轻松完成相关组件的自定义。各个组件均为零耦合设计,用户仅需完成组件本身的特性开发即可完成与框架的融合。
......@@ -64,7 +64,7 @@ bash script/convert_params.sh pretrain_model/bert/params
## DEMO1:单任务训练
接下来我们启动一个复杂的机器阅读理解任务的训练,我们在`data/mrqa`文件夹中提供了EMNLP2019 MRQA机器阅读理解评测的部分比赛数据。
框架支持对任何一个内置任务进行传统的单任务训练。接下来我们启动一个复杂的机器阅读理解任务的训练,我们在`data/mrqa`文件夹中提供了[EMNLP2019 MRQA机器阅读理解评测](https://mrqa.github.io/shared)的部分比赛数据。
用户可通过运行如下脚本一键开始本节任务的训练
......@@ -72,7 +72,6 @@ bash script/convert_params.sh pretrain_model/bert/params
bash run_demo1.sh
```
下面以该任务为例,讲解如何基于paddlepalm框架轻松实现该任务。
**1. 配置任务实例**
......@@ -147,7 +146,7 @@ mrqa: train finished!
mrqa: inference model saved at output_model/firstrun/infer_model
```
## DEMO2:主辅任务训练与目标任务预测
## DEMO2:多任务辅助训练与目标任务预测
本节我们考虑更加复杂的学习目标,我们引入一个问答匹配(QA Matching)任务来辅助MRQA任务的学习。在多任务训练结束后,我们希望使用训练好的模型来对MRQA任务的测试集进行预测。
......@@ -235,10 +234,26 @@ if __name__ == '__main__':
controller.pred('mrqa', inference_model_dir='output_model/secondrun/mrqa/infermodel')
```
### DEMO3: 多目标任务联合训练
## DEMO3: 多目标任务联合训练与任务层参数复用
框架内支持设定多个目标任务,当全局配置文件的`task_instance`字段指定超过一个任务实例时,**这多个任务实例默认均为目标任务(即`target_tag`字段被自动填充为全1)**。对于被设置成目标任务的任务实例,框架会为其计算预期的训练步数(详情见下一节《进阶篇》)并在达到预期训练步数后为其保存预测模型。
当框架存在多个目标任务时,全局配置文件中的`num_epochs`(训练集遍历次数)仅会作用于第一个出现的目标任务,称为主任务(main task)。框架会根据主任务的训练步数来推理其他目标任务的预期训练步数(可通过`mix_ratio`控制,详情见下一节《进阶篇》)。**注意,除了用来标记`num_epochs`的作用对象外,主任务与其他目标任务没有任何不同。**
*注意:在多目标任务训练时,依然可以使用DEMO2中的辅助任务来提升所有目标任务的测试集表现,但是要注意使用target_tag为引入的辅助任务打上辅助标记「0」*
例如我们有6个分类任务,均为目标任务(每个任务的模型都希望未来拿来做预测和部署),且我们希望任务1,2,5的任务输出层共享同一份参数,任务3、4共享同一份参数,任务6自己一份参数,即希望对6个任务实现如图所示的参数复用关系。
【图】
```yaml
task_instance: domain_cls, mrqa, senti_cls, mlm, qq_match
target_tag: 0, 1, 1, 0, 1
```
在上述的设置中,mrqa,senti_cls和qq_match这三个任务被标记成了目标任务(其中mrqa为主任务),domain_cls和mlm被标记为了辅助任务。辅助任务仅仅“陪同”目标任务训练,框架不会为其保存预测模型(inference_model),也不会计算预期训练步数。但包括辅助任务在内,各个任务的采样概率是可以被控制的,详情见下一小节。
*注意在多目标任务训练时,依然可以使用DEMO2中的辅助任务来提升所有目标任务的测试集表现,但是要注意使用target_tag为引入的辅助任务打上辅助标记*
```
Global step: 1. Task: cls4, step 1/15 (epoch 0), loss: 1.344, speed: 0.50 steps/s
......@@ -268,19 +283,12 @@ cls3: train finished!
cls3: inference model saved at output_model/thirdrun/infer_model
```
## 进阶篇
### 设置多个目标任务
框架内支持设定多个目标任务,当全局配置文件的`task_instance`字段指定超过一个任务实例时,这多个任务实例默认均为目标任务(即`target_tag`字段被自动填充为全1)。对于被设置成目标任务的任务实例,框架会为其计算预期的训练步数(详情见下一节)并在达到预期训练步数后为其保存预测模型。
## DEMO4: 单/多任务预训练
当框架存在多个目标任务时,全局配置文件中的`num_epochs`(训练集遍历次数)仅会作用于第一个出现的目标任务,称为主任务(main task)。框架会根据主任务的训练步数来推理其他目标任务的预期训练步数(可通过`mix_ratio`控制)。**注意,除了用来标记`num_epochs`的作用对象外,主任务与其他目标任务没有任何不同。**例如
pass
```yaml
task_instance: domain_cls, mrqa, senti_cls, mlm, qq_match
target_tag: 0, 1, 1, 0, 1
```
在上述的设置中,mrqa,senti_cls和qq_match这三个任务被标记成了目标任务(其中mrqa为主任务),domain_cls和mlm被标记为了辅助任务。辅助任务仅仅“陪同”目标任务训练,框架不会为其保存预测模型(inference_model),也不会计算预期训练步数。但包括辅助任务在内,各个任务的采样概率是可以被控制的,详情见下一小节。
## 进阶篇
本章节介绍一下
### 更改任务采样概率(期望的训练步数)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册