Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PALM
提交
ecc2e083
P
PALM
项目概览
PaddlePaddle
/
PALM
通知
4
Star
3
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PALM
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
ecc2e083
编写于
3月 05, 2020
作者:
X
Xiaoyao Xi
提交者:
GitHub
3月 05, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #67 from wangxiao1021/api
fix bugs
上级
3effde37
65688371
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
13 addition
and
29 deletion
+13
-29
README_zh.md
README_zh.md
+12
-12
examples/multi-task/predict-intent.py
examples/multi-task/predict-intent.py
+0
-2
examples/multi-task/predict-slot.py
examples/multi-task/predict-slot.py
+0
-2
paddlepalm/head/cls.py
paddlepalm/head/cls.py
+0
-12
paddlepalm/reader/match.py
paddlepalm/reader/match.py
+1
-1
未找到文件。
README_zh.md
浏览文件 @
ecc2e083
...
...
@@ -13,7 +13,7 @@ PaddlePALM (PArallel Learning from Multi-tasks) 是一个灵活,通用且易
</p>
</p>
除了降低NLP研究成本以外,PaddlePALM已被应用于“百度搜索引擎”,有效
的
提高了用户查询的理解准确度和挖掘出的答案质量,具备高可靠性和高训练/推理性能。
除了降低NLP研究成本以外,PaddlePALM已被应用于“百度搜索引擎”,有效
地
提高了用户查询的理解准确度和挖掘出的答案质量,具备高可靠性和高训练/推理性能。
#### 特点:
...
...
@@ -21,9 +21,9 @@ PaddlePALM (PArallel Learning from Multi-tasks) 是一个灵活,通用且易
-
**支持多任务学习**
:
*6个步骤*
即可实现多任务学习任务。
-
**支持大规模任务和预训练**
:可自动利用多gpu加速训练和推理。集群上的分布式训练需要较少代码。
-
**流行的NLP骨架和预训练模型**
:内置多种最先进的通用模型架构和预训练模型(如BERT、ERNIE、RoBERTa等)。
-
**易于定制**
:支持任何组件的定制开发(
e。g,
主干网络,任务头,读取工具和优化器)与预定义组件的复用,这给了开发人员高度的灵活性和效率,以适应不同的NLP场景。
-
**易于定制**
:支持任何组件的定制开发(
例如:
主干网络,任务头,读取工具和优化器)与预定义组件的复用,这给了开发人员高度的灵活性和效率,以适应不同的NLP场景。
你可以很容易地用较
小的代码重新得到很好的结果
,涵盖了大多数NLP任务,如分类、匹配、序列标记、阅读理解、对话理解等等。更多细节可以在
`examples`
中找到。
你可以很容易地用较
少的代码复现出很好的性能
,涵盖了大多数NLP任务,如分类、匹配、序列标记、阅读理解、对话理解等等。更多细节可以在
`examples`
中找到。
<table>
<tbody>
...
...
@@ -106,9 +106,9 @@ PaddlePALM (PArallel Learning from Multi-tasks) 是一个灵活,通用且易
</p>
PaddlePALM是一个设计良好的高级NLP框架。基于PaddlePALM的轻量级代码可以高效实现
**监督学习、非监督/自监督学习、多任务学习和迁移学习**
。在PaddlePALM架构中有三层,
即从下到上依次是component层、trainer层
high-level trainer层。
PaddlePALM是一个设计良好的高级NLP框架。基于PaddlePALM的轻量级代码可以高效实现
**监督学习、非监督/自监督学习、多任务学习和迁移学习**
。在PaddlePALM架构中有三层,
从下到上依次是component层、trainer层、
high-level trainer层。
在组件层,PaddlePALM提供了6个
**解耦的**
组件来实现NLP任务。每个组件包含丰富的预定义类和一个基
本
类。预定义类是针对典型的NLP任务的,而基类是帮助用户开发一个新类(基于预定义类或基类)。
在组件层,PaddlePALM提供了6个
**解耦的**
组件来实现NLP任务。每个组件包含丰富的预定义类和一个基类。预定义类是针对典型的NLP任务的,而基类是帮助用户开发一个新类(基于预定义类或基类)。
训练器层是用选定的构件建立计算图,进行训练和预测。该层描述了训练策略、模型保存和加载、评估和预测过程。一个训练器只能处理一个任务。
...
...
@@ -125,7 +125,7 @@ PaddlePALM是一个设计良好的高级NLP框架。基于PaddlePALM的轻量级
|
**paddlepalm.optimizer**
| 优化器的集合。|
|
**paddlepalm.downloader**
| 预训练模型与配置和vocab文件的下载模块。|
|
**paddlepalm.Trainer**
| 单一任务训练/预测。一个训练器是建立计算图,管理训练和评估过程,实现模型/检查点保存和pretrain_model/检查点加载。|
|
**paddlepalm.Mu
iliHeadTrainer**
| 核心单位开始多任务训练/预测会议。一个多教练是建立在几个Trainer的基础上。在继承Trainer的基础上,实现了模型主干网络跨任务复用,训练器
采用多任务学习,多任务推理,来保证更有效的评估和预测。|
|
**paddlepalm.Mu
ltiHeadTrainer**
| 进行多任务训练/预测的核心模块。一个MultiHeadTrainer建立在几个Trainer的基础上。在继承Trainer的基础上,实现了模型主干网络跨任务复用,
采用多任务学习,多任务推理,来保证更有效的评估和预测。|
## 安装
...
...
@@ -150,7 +150,7 @@ cd PALM && python setup.py install
### 下载预训练模型
我们
合并
了许多预训练的模型来初始化模型主干网络参数。用预先训练好的模型训练大的NLP模型,如12层Transformer,实际上比用随机初始化的参数更有效。要查看所有可用的预训练模型并下载,请在python解释器中运行以下代码(在shell中输入命令
`python`
):
我们
提供
了许多预训练的模型来初始化模型主干网络参数。用预先训练好的模型训练大的NLP模型,如12层Transformer,实际上比用随机初始化的参数更有效。要查看所有可用的预训练模型并下载,请在python解释器中运行以下代码(在shell中输入命令
`python`
):
```
python
>>>
from
paddlepalm
import
downloader
...
...
@@ -185,10 +185,10 @@ Available pretrain items:
8个步骤开始一个典型的NLP训练任务。
1.
使用
`paddlepalm.reader`
要
为数据集加载和输入特征生成创建一个
`reader`
,然后调用
`reader.load_data`
方法加载训练数据。
1.
使用
`paddlepalm.reader`
为数据集加载和输入特征生成创建一个
`reader`
,然后调用
`reader.load_data`
方法加载训练数据。
2.
使用
`paddlepalm.load_data`
创建一个模型
*主干网络*
来提取文本特征(例如,上下文单词嵌入,句子嵌入)。
3.
通过
`reader.register_with`
将
`reader`
注册到主干网络上。在这一步之后,reader能够使用主干网络产生的输入特征。
4.
使用
`paddlepalm.head`
。创建一个任务
输出
*head*
。该头
可以为训练提供任务损失,为模型推理提供预测结果。
4.
使用
`paddlepalm.head`
。创建一个任务
*head*
,
可以为训练提供任务损失,为模型推理提供预测结果。
5.
使用
`paddlepalm.Trainer`
创建一个任务
`Trainer`
,然后通过
`Trainer.build_forward`
构建包含主干网络和任务头的前向图(在步骤2和步骤4中创建)。
6.
使用
`paddlepalm.optimizer`
(如果需要,创建
`paddlepalm.lr_sched`
)来创建一个
*优化器*
,然后通过
`train.build_back`
向后构建。
7.
使用
`trainer.fit_reader`
将准备好的reader和数据(在步骤1中实现)给到trainer。
...
...
@@ -207,7 +207,7 @@ Available pretrain items:
多任务学习模式下运行:
1.
重复创建组件(每个任务按照上述第1~5步执行)。
2.
创建空的
训练器(每个训练器
对应一个任务),并通过它们创建一个
`MultiHeadTrainer`
。
2.
创建空的
`Trainer`
(每个
`Trainer`
对应一个任务),并通过它们创建一个
`MultiHeadTrainer`
。
3.
使用
`multi_head_trainer.build_forward`
构建多任务前向图。
4.
使用
`paddlepalm.optimizer`
(如果需要,创建
`paddlepalm.lr_sched`
)来创建一个
*optimizer*
,然后通过
` multi_head_trainer.build_backward`
创建反向。
5.
使用
`multi_head_trainer.fit_readers`
将所有准备好的读取器和数据放入
`multi_head_trainer`
中。
...
...
@@ -222,10 +222,10 @@ multi_head_trainer的保存/加载和预测操作与trainer相同。
#### 设置saver
在训练时保存 models/checkpoints 和 logs,
调用
`trainer.set_saver`
方法。更多实现细节见
[
这里
](
https://github.com/PaddlePaddle/PALM/tree/master/examples
)
。
在训练时保存 models/checkpoints 和 logs,调用
`trainer.set_saver`
方法。更多实现细节见
[
这里
](
https://github.com/PaddlePaddle/PALM/tree/master/examples
)
。
#### 评估/预测
训练结束后进行预测和评价, 只需创建额外的reader, backbone和head
示例
(重复上面1~4步骤),注意创建时需设
`phase='predict'`
。 然后使用trainer的
`predict`
方法进行预测(不需创建额外的trainer)。更多实现细节请见
[
这里
](
https://github.com/PaddlePaddle/PALM/tree/master/examples/predict
)
。
训练结束后进行预测和评价, 只需创建额外的reader, backbone和head(重复上面1~4步骤),注意创建时需设
`phase='predict'`
。 然后使用trainer的
`predict`
方法进行预测(不需创建额外的trainer)。更多实现细节请见
[
这里
](
https://github.com/PaddlePaddle/PALM/tree/master/examples/predict
)
。
#### 使用多GPU
如果您的环境中存在多个GPU,您可以通过环境变量控制这些GPU的数量和索引
[
CUDA_VISIBLE_DEVICES
](
https://devblogs.nvidia.com/cuda-pro-tip-control-gpu-visibility-cuda_visible_devices/
)
。例如,如果您的环境中有4个gpu,索引为0、1、2、3,那么您可以运行以下命令来只使用GPU2:
...
...
examples/multi-task/predict-intent.py
浏览文件 @
ecc2e083
...
...
@@ -18,8 +18,6 @@ if __name__ == '__main__':
pred_output
=
'./outputs/predict-intent/'
save_type
=
'ckpt'
random_seed
=
0
pre_params
=
'./pretrain/ERNIE-v2-en-base/params'
config
=
json
.
load
(
open
(
'./pretrain/ERNIE-v2-en-base/ernie_config.json'
))
input_dim
=
config
[
'hidden_size'
]
...
...
examples/multi-task/predict-slot.py
浏览文件 @
ecc2e083
...
...
@@ -19,8 +19,6 @@ if __name__ == '__main__':
pred_output
=
'./outputs/predict-slot/'
save_type
=
'ckpt'
random_seed
=
0
pre_params
=
'./pretrain/ERNIE-v2-en-base/params'
config
=
json
.
load
(
open
(
'./pretrain/ERNIE-v2-en-base/ernie_config.json'
))
input_dim
=
config
[
'hidden_size'
]
...
...
paddlepalm/head/cls.py
浏览文件 @
ecc2e083
...
...
@@ -25,7 +25,6 @@ class Classify(Head):
"""
classification
"""
# def __init__(self, config, phase, backbone_config=None):
def
__init__
(
self
,
num_classes
,
input_dim
,
dropout_prob
=
0.0
,
\
param_initializer_range
=
0.02
,
phase
=
'train'
):
...
...
@@ -91,17 +90,6 @@ class Classify(Head):
self
.
_preds
.
extend
(
logits
.
tolist
())
self
.
_probs
.
extend
(
probs
.
tolist
())
def
epoch_postprocess
(
self
,
post_inputs
,
output_dir
=
None
):
# there is no post_inputs needed and not declared in epoch_inputs_attrs, hence no elements exist in post_inputs
if
not
self
.
_is_training
:
if
output_dir
is
None
:
for
p
in
self
.
_preds
:
print
(
p
)
else
:
with
open
(
os
.
path
.
join
(
output_dir
,
'predictions.json'
),
'w'
)
as
writer
:
for
p
in
self
.
_preds
:
writer
.
write
(
str
(
p
)
+
'
\n
'
)
print
(
'Predictions saved at '
+
os
.
path
.
join
(
output_dir
,
'predictions.json'
))
def
epoch_postprocess
(
self
,
post_inputs
,
output_dir
=
None
):
# there is no post_inputs needed and not declared in epoch_inputs_attrs, hence no elements exist in post_inputs
...
...
paddlepalm/reader/match.py
浏览文件 @
ecc2e083
...
...
@@ -45,7 +45,7 @@ class MatchReader(Reader):
"""
def
__init__
(
self
,
vocab_path
,
max_len
,
tokenizer
=
'wordpiece'
,
lang
=
'en'
,
seed
=
None
,
\
do_lower_case
=
False
,
learning_strategy
=
'pointwise'
,
phase
=
'train'
,
dev_count
=
1
,
print_prefix
=
''
):
# 需要什么加什么
do_lower_case
=
False
,
learning_strategy
=
'pointwise'
,
phase
=
'train'
,
dev_count
=
1
,
print_prefix
=
''
):
"""Create a new Reader for classification task data.
Args:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录