Skip to content

Commit d57e350

Browse files
authored
Merge pull request #3560 from westfish/qg-example
add qg models and update readme
2 parents 947007f + 295d68e commit d57e350

File tree

5 files changed

+144
-21
lines changed

5 files changed

+144
-21
lines changed

docs/model_zoo/taskflow.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1622,13 +1622,13 @@ from paddlenlp import Taskflow
16221622
</div></details>
16231623

16241624
### 问题生成
1625-
<details><summary>&emsp; 通过UNIMO-Text模型来根据上下文和答案生成问题 </summary><div>
1625+
<details><summary>&emsp; 基于百度自研中文预训练模型UNIMO-Text和大规模多领域问题生成数据集</summary><div>
16261626

16271627
#### 支持单条、批量预测
16281628

16291629
```python
16301630
>>> from paddlenlp import Taskflow
1631-
# 默认模型为 unimo-text-1.0-dureader_qg-template1
1631+
# 默认模型为 unimo-text-1.0-dureader_qg
16321632
>>> question_generator = Taskflow("question_generation")
16331633
# 单条输入
16341634
>>> question_generator([
@@ -1648,7 +1648,7 @@ from paddlenlp import Taskflow
16481648
```
16491649

16501650
#### 可配置参数说明
1651-
* `model`:可选模型,默认为unimo-text-1.0-dureader_qg-template1,支持的模型支持的模型有["unimo-text-1.0", "unimo-text-1.0-dureader_qg-template1", ]
1651+
* `model`:可选模型,默认为unimo-text-1.0-dureader_qg,支持的模型有["unimo-text-1.0", "unimo-text-1.0-dureader_qg", "unimo-text-1.0-question-generation", "unimo-text-1.0-question-generation-dureader_qg"]
16521652
* `device`:运行设备,默认为"gpu"。
16531653
* `template`:模版,可选项有[0, 1, 2, 3],1表示使用默认模版,0表示不使用模版。
16541654
* `batch_size`:批处理大小,请结合机器情况进行调整,默认为1。

examples/question_generation/unimo-text/README.md

Lines changed: 44 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
- [问题生成](#问题生成)
66
- [简介](#简介)
77
<!-- - [基于预训练语言模型的问题生成](#基于预训练语言模型的问题生成) -->
8-
<!-- - [效果展示](#效果展示)
9-
- [开箱即用](#开箱即用) -->
8+
<!-- - [效果展示](#效果展示) -->
9+
- [开箱即用](#开箱即用)
1010
- [训练定制](#训练定制)
1111
- [环境依赖](#环境依赖)
1212
- [代码结构说明](#代码结构说明)
@@ -27,6 +27,13 @@ Question Generation(QG),即问题生成,指的是给定一段上下文
2727

2828
问题生成技术在教育、咨询、搜索、推荐等多个领域均有着巨大的应用价值。具体来说,问题生成可广泛应用于问答系统语料库构建,事实性问题生成,教育行业题库生成,对话提问,聊天机器人意图理解,对话式搜索意图提问,闲聊机器人主动提问等等场景。
2929

30+
本项目是基于预训练语言模型UNIMO-Text的问题生成,具有以下优势:
31+
32+
- 效果领先。基于百度自研中文预训练语言模型UNIMO-Text,并提供基于模版策略和大规模多领域问题生成数据集训练的通用问题生成预训练模型`unimo-text-1.0-question-generation`
33+
- 开箱即用。本项目提供TaskFlow接口,无需训练,仅需几行代码便可预测。
34+
- 高性能推理。本项目基于FasterTransformer进行推理加速,能够提供更高性能的推理体验,优化后的推理模型在dureader_qg开发集的推理耗时缩短为优化前的1/5。
35+
- 训练推理部署全流程打通。本项目提供了全面的定制训练流程,从数据准备、模型训练预测,到模型推理部署,一应俱全。
36+
3037
<!-- ### 基于预训练语言模型的问题生成
3138
3239
基于预训练语言模型(Pretrained Language Models, PLMs)范式的问题生成是目前最常用、效果最好(SOTA)的方式。
@@ -40,10 +47,34 @@ model_name = "ernie-1.0"
4047
model = UNIMOLMHeadModel.from_pretrained(model_name)
4148
tokenizer = UNIMOTokenizer.from_pretrained(model_name)
4249
``` -->
43-
<!--
44-
## 效果展示
4550

46-
## 开箱即用 -->
51+
## 开箱即用
52+
PaddleNLP提供开箱即用的产业级NLP预置任务能力,无需训练,一键预测。
53+
#### 支持单条、批量预测
54+
```python
55+
>>> from paddlenlp import Taskflow
56+
# 默认模型为 unimo-text-1.0-dureader_qg
57+
>>> question_generator = Taskflow("question_generation")
58+
# 单条输入
59+
>>> question_generator([
60+
{"context": "奇峰黄山千米以上的山峰有77座,整座黄山就是一座花岗岩的峰林,自古有36大峰,36小峰,最高峰莲花峰、最险峰天都峰和观日出的最佳点光明顶构成黄山的三大主峰。", "answer": "莲花峰"}
61+
])
62+
'''
63+
['黄山最高峰是什么']
64+
'''
65+
# 多条输入
66+
>>> question_generator([
67+
{"context": "奇峰黄山千米以上的山峰有77座,整座黄山就是一座花岗岩的峰林,自古有36大峰,36小峰,最高峰莲花峰、最险峰天都峰和观日出的最佳点光明顶构成黄山的三大主峰。", "answer": "莲花峰"},
68+
{"context": "弗朗索瓦·韦达外文名:franciscusvieta国籍:法国出生地:普瓦图出生日期:1540年逝世日期:1603年12月13日职业:数学家主要成就:为近代数学的发展奠定了基础。", "answer": "法国"}
69+
])
70+
'''
71+
['黄山最高峰是什么', '弗朗索瓦是哪里人']
72+
'''
73+
```
74+
关键配置参数说明:
75+
* `model`:可选模型,默认为unimo-text-1.0-dureader_qg,支持的模型有["unimo-text-1.0", "unimo-text-1.0-dureader_qg", "unimo-text-1.0-question-generation", "unimo-text-1.0-question-generation-dureader_qg"]
76+
77+
具体参数配置可参考[Taskflow文档](../../../docs/model_zoo/taskflow.md)
4778

4879
## 训练定制
4980

@@ -83,7 +114,7 @@ tokenizer = UNIMOTokenizer.from_pretrained(model_name)
83114

84115
2. **模型训练**
85116

86-
- 数据准备完成后,可以开始使用我们的数据集对预训练模型进行微调训练。我们可以根据任务需求,调整可配置参数,选择使用GPU或CPU进行模型训练,脚本默认保存在开发集最佳表现模型。中文任务默认使用"unimo-text-1.0"模型,unimo-text-1.0还支持large模型,详见[UNIMO模型汇总](https://paddlenlp.readthedocs.io/zh/latest/model_zoo/transformers/UNIMO/contents.html)可以根据任务和设备需求进行选择
117+
- 数据准备完成后,可以开始使用我们的数据集对预训练模型进行微调训练。我们可以根据任务需求,调整可配置参数,选择使用GPU或CPU进行模型训练,脚本默认保存在开发集最佳表现模型。中文任务默认使用`unimo-text-1.0`模型,unimo-text-1.0还支持large模型。此外本项目还提供基于大规模多领域问题生成数据集训练的通用问题生成预训练模型`unimo-text-1.0-question-generation`,详见[UNIMO模型汇总](https://paddlenlp.readthedocs.io/zh/latest/model_zoo/transformers/UNIMO/contents.html)用户可以根据任务和设备需求进行选择
87118

88119

89120
3. **模型预测**
@@ -184,14 +215,15 @@ python -m paddle.distributed.launch --gpus "1,2" --log_dir ./unimo/finetune/log
184215

185216
关键参数释义如下:
186217
- `gpus` 指示了训练所用的GPU,使用多卡训练可以指定多个GPU卡号,例如 --gpus "0,1"。
187-
- `dataset_name` 数据集名称,默认为`dureader_qg`
218+
- `dataset_name` 数据集名称,`train_file``predict_file`为None时将加载`dataset_name`的训练集和开发集,默认为`dureader_qg`
188219
- `train_file` 本地训练数据地址,数据格式必须与`dataset_name`所指数据集格式相同,默认为None。
189220
- `predict_file` 本地测试数据地址,数据格式必须与`dataset_name`所指数据集格式相同,默认为None。
190221
- `model_name_or_path` 指示了finetune使用的具体预训练模型,可以是PaddleNLP提供的预训练模型,或者是本地的预训练模型。如果使用本地的预训练模型,可以配置本地模型的目录地址,例如: ./checkpoints/model_xx/,目录中需包含paddle预训练模型model_state.pdparams。如果使用PaddleNLP提供的预训练模型,可以选择下面其中之一。
191222
| 可选预训练模型 |
192223
|---------------------------------|
193224
| unimo-text-1.0 |
194225
| unimo-text-1.0-large |
226+
| unimo-text-1.0-question-generation |
195227

196228
<!-- | T5-PEGASUS |
197229
| ernie-1.0 |
@@ -233,11 +265,14 @@ python -m paddle.distributed.launch --gpus "1,2" --log_dir ./unimo/finetune/log
233265

234266
**NOTE:** 如需恢复模型训练,`model_name_or_path`配置本地模型的目录地址即可。
235267

236-
微调的baseline模型在dureader_qg验证集上有如下结果(指标为BLEU-4):
268+
微调的模型在dureader_qg验证集上有如下结果(指标为BLEU-4),其中`unimo-text-1.0-dureader_qg-w/o-template`表示不使用模版策略微调的结果,`unimo-text-1.0-large-dureader_qg`表示使用large模型微调的结果,`unimo-text-1.0-question-generation-dureader_qg`表示在通用问题生成预训练模型`unimo-text-1.0-question-generation`上微调的结果
237269

238270
| model_name | DuReaderQG |
239271
| :-----------------------------: | :-----------: |
240-
| unimo-text-1.0-dureader_qg-template1 | 41.08 |
272+
| unimo-text-1.0-dureader_qg-w/o-template | 39.61 |
273+
| unimo-text-1.0-dureader_qg | 41.08 |
274+
| unimo-text-1.0-large-dureader_qg | 41.51 |
275+
| unimo-text-1.0-question-generation-dureader_qg | 44.02 |
241276

242277
### 模型预测
243278

paddlenlp/taskflow/taskflow.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -457,15 +457,25 @@
457457
"task_class": QuestionGenerationTask,
458458
"task_flag": "question_generation-unimo-text-1.0",
459459
},
460-
"unimo-text-1.0-dureader_qg-template1": {
460+
"unimo-text-1.0-dureader_qg": {
461+
"task_class": QuestionGenerationTask,
462+
"task_flag": "question_generation-unimo-text-1.0-dureader_qg",
463+
},
464+
"unimo-text-1.0-question-generation": {
465+
"task_class":
466+
QuestionGenerationTask,
467+
"task_flag":
468+
"question_generation-unimo-text-1.0-question-generation",
469+
},
470+
"unimo-text-1.0-question-generation-dureader_qg": {
461471
"task_class":
462472
QuestionGenerationTask,
463473
"task_flag":
464-
"question_generation-unimo-text-1.0-dureader_qg-template1",
474+
"question_generation-unimo-text-1.0-question-generation-dureader_qg",
465475
},
466476
},
467477
"default": {
468-
"model": "unimo-text-1.0-dureader_qg-template1"
478+
"model": "unimo-text-1.0-dureader_qg"
469479
}
470480
},
471481
}

paddlenlp/transformers/unimo/modeling.py

Lines changed: 66 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,64 @@ class UNIMOPretrainedModel(PretrainedModel):
114114
"eos_token_id": 3,
115115
"mask_token_id": 3,
116116
},
117-
"unimo-text-1.0-dureader_qg-template1": {
117+
"unimo-text-1.0-dureader_qg": {
118+
"vocab_size": 18000,
119+
"hidden_size": 768,
120+
"num_hidden_layers": 12,
121+
"num_attention_heads": 12,
122+
"intermediate_size": 3072,
123+
"hidden_act": "relu",
124+
"hidden_dropout_prob": 0.1,
125+
"attention_probs_dropout_prob": 0.1,
126+
"normalize_before": False,
127+
"max_position_embeddings": 513,
128+
"type_vocab_size": 4,
129+
"initializer_range": 0.02,
130+
"unk_token_id": 17963,
131+
"pad_token_id": 0,
132+
"bos_token_id": 1,
133+
"eos_token_id": 3,
134+
"mask_token_id": 3,
135+
},
136+
"unimo-text-1.0-question-generation": {
137+
"vocab_size": 18000,
138+
"hidden_size": 768,
139+
"num_hidden_layers": 12,
140+
"num_attention_heads": 12,
141+
"intermediate_size": 3072,
142+
"hidden_act": "relu",
143+
"hidden_dropout_prob": 0.1,
144+
"attention_probs_dropout_prob": 0.1,
145+
"normalize_before": False,
146+
"max_position_embeddings": 513,
147+
"type_vocab_size": 4,
148+
"initializer_range": 0.02,
149+
"unk_token_id": 17963,
150+
"pad_token_id": 0,
151+
"bos_token_id": 1,
152+
"eos_token_id": 3,
153+
"mask_token_id": 3,
154+
},
155+
"unimo-text-1.0-question-generation-full_domain": {
156+
"vocab_size": 18000,
157+
"hidden_size": 768,
158+
"num_hidden_layers": 12,
159+
"num_attention_heads": 12,
160+
"intermediate_size": 3072,
161+
"hidden_act": "relu",
162+
"hidden_dropout_prob": 0.1,
163+
"attention_probs_dropout_prob": 0.1,
164+
"normalize_before": False,
165+
"max_position_embeddings": 513,
166+
"type_vocab_size": 4,
167+
"initializer_range": 0.02,
168+
"unk_token_id": 17963,
169+
"pad_token_id": 0,
170+
"bos_token_id": 1,
171+
"eos_token_id": 3,
172+
"mask_token_id": 3,
173+
},
174+
"unimo-text-1.0-question-generation-dureader_qg": {
118175
"vocab_size": 18000,
119176
"hidden_size": 768,
120177
"num_hidden_layers": 12,
@@ -144,8 +201,14 @@ class UNIMOPretrainedModel(PretrainedModel):
144201
"https://bj.bcebos.com/paddlenlp/models/transformers/unimo/unimo-text-1.0-large.pdparams",
145202
"unimo-text-1.0-summary":
146203
"https://bj.bcebos.com/paddlenlp/models/transformers/unimo/unimo-text-1.0-summary.pdparams",
147-
"unimo-text-1.0-dureader_qg-template1":
148-
"https://bj.bcebos.com/paddlenlp/models/transformers/unimo/unimo-text-1.0-dureader_qg-template1.pdparams"
204+
"unimo-text-1.0-dureader_qg":
205+
"https://bj.bcebos.com/paddlenlp/models/transformers/unimo/unimo-text-1.0-dureader_qg.pdparams",
206+
"unimo-text-1.0-question-generation":
207+
"https://bj.bcebos.com/paddlenlp/models/transformers/unimo/unimo-text-1.0-question-generation.pdparams",
208+
"unimo-text-1.0-question-generation-v2":
209+
"https://bj.bcebos.com/paddlenlp/models/transformers/unimo/unimo-text-1.0-question-generation-full_domain.pdparams",
210+
"unimo-text-1.0-question-generation-dureader_qg":
211+
"https://bj.bcebos.com/paddlenlp/models/transformers/unimo/unimo-text-1.0-question-generation-dureader_qg.pdparams",
149212
}
150213
}
151214
base_model_prefix = "unimo"

paddlenlp/transformers/unimo/tokenizer.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,13 @@ class UNIMOTokenizer(PretrainedTokenizer):
9393
"https://bj.bcebos.com/paddlenlp/models/transformers/unimo/unimo-text-1.0-large-vocab.txt",
9494
"unimo-text-1.0-summary":
9595
"https://bj.bcebos.com/paddlenlp/models/transformers/unimo/unimo-text-1.0-vocab.txt",
96-
"unimo-text-1.0-dureader_qg-template1":
96+
"unimo-text-1.0-dureader_qg":
97+
"https://bj.bcebos.com/paddlenlp/models/transformers/unimo/unimo-text-1.0-vocab.txt",
98+
"unimo-text-1.0-question-generation":
99+
"https://bj.bcebos.com/paddlenlp/models/transformers/unimo/unimo-text-1.0-vocab.txt",
100+
"unimo-text-1.0-question-generation-full_domain":
101+
"https://bj.bcebos.com/paddlenlp/models/transformers/unimo/unimo-text-1.0-vocab.txt",
102+
"unimo-text-1.0-question-generation-dureader_qg":
97103
"https://bj.bcebos.com/paddlenlp/models/transformers/unimo/unimo-text-1.0-vocab.txt",
98104
}
99105
}
@@ -110,9 +116,18 @@ class UNIMOTokenizer(PretrainedTokenizer):
110116
"unimo-text-1.0-summary": {
111117
"do_lower_case": True
112118
},
113-
"unimo-text-1.0-dureader_qg-template1": {
119+
"unimo-text-1.0-dureader_qg": {
114120
"do_lower_case": True
115-
}
121+
},
122+
"unimo-text-1.0-question-generation": {
123+
"do_lower_case": True
124+
},
125+
"unimo-text-1.0-question-generation-full_domain": {
126+
"do_lower_case": True
127+
},
128+
"unimo-text-1.0-question-generation-dureader_qg": {
129+
"do_lower_case": True
130+
},
116131
}
117132
max_model_input_sizes = PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES
118133

0 commit comments

Comments
 (0)