diff --git a/README_zh.md b/README_zh.md
index e1f68891bd32f9098442979204271b07952309fd..06da939b490ff265d9396a3acd764e066269629c 100644
--- a/README_zh.md
+++ b/README_zh.md
@@ -13,7 +13,7 @@ PaddlePALM (PArallel Learning from Multi-tasks) 是一个灵活,通用且易
-除了降低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`中找到。
@@ -106,9 +106,9 @@ PaddlePALM (PArallel Learning from Multi-tasks) 是一个灵活,通用且易
-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.MuiliHeadTrainer** | 核心单位开始多任务训练/预测会议。一个多教练是建立在几个Trainer的基础上。在继承Trainer的基础上,实现了模型主干网络跨任务复用,训练器采用多任务学习,多任务推理,来保证更有效的评估和预测。|
+| **paddlepalm.MultiHeadTrainer** | 进行多任务训练/预测的核心模块。一个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:
diff --git a/examples/multi-task/predict-intent.py b/examples/multi-task/predict-intent.py
index cb4d6d8a582e7cc5f536df3715dc934704cca5f4..19203e77536420740e1c8cde1ea8006aed4fdc25 100644
--- a/examples/multi-task/predict-intent.py
+++ b/examples/multi-task/predict-intent.py
@@ -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']
diff --git a/examples/multi-task/predict-slot.py b/examples/multi-task/predict-slot.py
index f1c860e7f44559be51a91d974b21127604ba45ec..01667ae8b28f3c68f4007fe48a45fa3253eaccbf 100644
--- a/examples/multi-task/predict-slot.py
+++ b/examples/multi-task/predict-slot.py
@@ -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']
diff --git a/paddlepalm/head/cls.py b/paddlepalm/head/cls.py
index 3342dcc371b5778812329e27754db69c44d7a74e..499c0f77d82f36872b745f94b94bd7ef89bf1727 100644
--- a/paddlepalm/head/cls.py
+++ b/paddlepalm/head/cls.py
@@ -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
diff --git a/paddlepalm/reader/match.py b/paddlepalm/reader/match.py
index f39338179cec6b3facca99f77d00a74dd85c0b38..d62644a9b295cdf4b9495812288c75112e6e0627 100644
--- a/paddlepalm/reader/match.py
+++ b/paddlepalm/reader/match.py
@@ -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: