Skip to content

Commit a576004

Browse files
authored
Add uie-mini, uie-micro and uie-nano for UIE (#2604)
* add uie-mini, uie-micro and uie-nano * update README.md * Update README.md
1 parent dbf57dd commit a576004

File tree

6 files changed

+221
-48
lines changed

6 files changed

+221
-48
lines changed

docs/model_zoo/taskflow.md

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -768,19 +768,22 @@ from paddlenlp import Taskflow
768768

769769
| 模型 | 结构 |
770770
| :---: | :--------: |
771-
| `uie-tiny`| 6-layers, 768-hidden, 12-heads |
772771
| `uie-base` (默认)| 12-layers, 768-hidden, 12-heads |
773772
| `uie-medical-base` | 12-layers, 768-hidden, 12-heads |
773+
| `uie-medium`| 6-layers, 768-hidden, 12-heads |
774+
| `uie-mini`| 6-layers, 384-hidden, 12-heads |
775+
| `uie-micro`| 4-layers, 384-hidden, 12-heads |
776+
| `uie-nano`| 4-layers, 312-hidden, 12-heads |
774777

775-
- 使用`UIE-Tiny`进行预测
778+
- 使用`UIE-Nano`进行预测
776779

777780
```python
778781
>>> from paddlenlp import Taskflow
779782

780783
>>> schema = ['时间', '选手', '赛事名称']
781-
>>> ie = Taskflow('information_extraction', schema=schema, model="uie-tiny")
784+
>>> ie = Taskflow('information_extraction', schema=schema, model="uie-nano")
782785
>>> ie("2月8日上午北京冬奥会自由式滑雪女子大跳台决赛中中国选手谷爱凌以188.25分获得金牌!")
783-
[{'时间': [{'text': '2月8日上午', 'start': 0, 'end': 6, 'probability': 0.9492842181233527}], '选手': [{'text': '谷爱凌', 'start': 28, 'end': 31, 'probability': 0.7277186614493836}], '赛事名称': [{'text': '北京冬奥会自由式滑雪女子大跳台决赛', 'start': 6, 'end': 23, 'probability': 0.8751028059367947}]}]
786+
[{'时间': [{'text': '2月8日上午', 'start': 0, 'end': 6, 'probability': 0.6513581678349247}], '选手': [{'text': '谷爱凌', 'start': 28, 'end': 31, 'probability': 0.9819330659468051}], '赛事名称': [{'text': '北京冬奥会自由式滑雪女子大跳台决赛', 'start': 6, 'end': 23, 'probability': 0.4908131110420939}]}]
784787
```
785788

786789
#### 定制训练
@@ -792,15 +795,18 @@ from paddlenlp import Taskflow
792795
<table>
793796
<tr><th row_span='2'><th colspan='2'>金融<th colspan='2'>医疗<th colspan='2'>互联网
794797
<tr><td><th>0-shot<th>5-shot<th>0-shot<th>5-shot<th>0-shot<th>5-shot
795-
<tr><td>uie-tiny<td>41.11<td>64.53<td>65.40<td>75.72<td>78.32<td>79.68
796798
<tr><td>uie-base<td>46.43<td>70.92<td>71.83<td>85.72<td>78.33<td>81.86
799+
<tr><td>uie-medium<td>41.11<td>64.53<td>65.40<td>75.72<td>78.32<td>79.68
800+
<tr><td>uie-mini<td>37.04<td>64.65<td>60.50<td>78.36<td>72.09<td>76.38
801+
<tr><td>uie-micro<td>37.53<td>62.11<td>57.04<td>75.92<td>66.00<td>70.222
802+
<tr><td>uie-nano<td>38.94<td>66.83<td>48.29<td>76.74<td>62.86<td>72.35
797803
</table>
798804

799805
0-shot表示无训练数据直接通过```paddlenlp.Taskflow```进行预测,5-shot表示基于5条标注数据进行模型微调。
800806

801807
#### 可配置参数说明
802808
* `batch_size`:批处理大小,请结合机器情况进行调整,默认为1。
803-
* `model`:选择任务使用的模型,默认为`uie-base`,可选有`uie-tiny``uie-base``uie-medical-base`
809+
* `model`:选择任务使用的模型,默认为`uie-base`,可选有`uie-base`, `uie-medium`, `uie-mini`, `uie-micro`, `uie-nano``uie-medical-base`
804810
* `schema`:定义任务抽取目标,可参考示例中对于不同信息抽取任务的schema配置自定义抽取目标。
805811
* `position_prob`:模型对于span的起始位置/终止位置的结果概率0~1之间,返回结果去掉小于这个阈值的结果,默认为0.5,span的最终概率输出为起始位置概率和终止位置概率的乘积。
806812
* `precision`:选择模型精度,默认为`fp32`,可选有`fp16``fp32``fp16`推理速度更快。如果选择`fp16`,请先确保机器正确安装NVIDIA相关驱动和基础软件,**确保CUDA>=11.2,cuDNN>=8.1.1**,初次使用需按照提示安装相关依赖(主要是**确保安装onnxruntime-gpu**)。其次,需要确保GPU设备的CUDA计算能力(CUDA Compute Capability)大于7.0,典型的设备包括V100、T4、A10、A100、GTX 20系列和30系列显卡等。更多关于CUDA Compute Capability和精度支持情况请参考NVIDIA文档:[GPU硬件与支持精度对照表](https://docs.nvidia.com/deeplearning/tensorrt/archives/tensorrt-840-ea/support-matrix/index.html#hardware-precision-matrix)

model_zoo/uie/README.md

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -316,24 +316,27 @@ UIE不限定行业领域和抽取目标,以下是一些零样本行业示例
316316

317317
| 模型 | 结构 |
318318
| :---: | :--------: |
319-
| `uie-tiny`| 6-layers, 768-hidden, 12-heads |
320319
| `uie-base` (默认)| 12-layers, 768-hidden, 12-heads |
321320
| `uie-medical-base` | 12-layers, 768-hidden, 12-heads |
321+
| `uie-medium`| 6-layers, 768-hidden, 12-heads |
322+
| `uie-mini`| 6-layers, 384-hidden, 12-heads |
323+
| `uie-micro`| 4-layers, 384-hidden, 12-heads |
324+
| `uie-nano`| 4-layers, 312-hidden, 12-heads |
322325

323-
- 使用`UIE-Tiny`进行预测
326+
- 使用`UIE-Nano`进行预测
324327

325328
```python
326329
>>> from paddlenlp import Taskflow
327330

328331
>>> schema = ['时间', '选手', '赛事名称']
329-
>>> ie = Taskflow('information_extraction', schema=schema, model="uie-tiny")
332+
>>> ie = Taskflow('information_extraction', schema=schema, model="uie-nano")
330333
>>> ie("2月8日上午北京冬奥会自由式滑雪女子大跳台决赛中中国选手谷爱凌以188.25分获得金牌!")
331-
[{'时间': [{'text': '2月8日上午', 'start': 0, 'end': 6, 'probability': 0.9492842181233527}], '选手': [{'text': '谷爱凌', 'start': 28, 'end': 31, 'probability': 0.7277186614493836}], '赛事名称': [{'text': '北京冬奥会自由式滑雪女子大跳台决赛', 'start': 6, 'end': 23, 'probability': 0.8751028059367947}]}]
334+
[{'时间': [{'text': '2月8日上午', 'start': 0, 'end': 6, 'probability': 0.6513581678349247}], '选手': [{'text': '谷爱凌', 'start': 28, 'end': 31, 'probability': 0.9819330659468051}], '赛事名称': [{'text': '北京冬奥会自由式滑雪女子大跳台决赛', 'start': 6, 'end': 23, 'probability': 0.4908131110420939}]}]
332335
```
333336

334337
#### 可配置参数说明
335338
* `batch_size`:批处理大小,请结合机器情况进行调整,默认为1。
336-
* `model`:选择任务使用的模型,默认为`uie-base`,可选有`uie-tiny``uie-base``uie-medical-base`
339+
* `model`:选择任务使用的模型,默认为`uie-base`,可选有`uie-base`, `uie-medium`, `uie-mini`, `uie-micro`, `uie-nano``uie-medical-base`
337340
* `schema`:定义任务抽取目标,可参考示例中对于不同信息抽取任务的schema配置自定义抽取目标。
338341
* `position_prob`:模型对于span的起始位置/终止位置的结果概率0~1之间,返回结果去掉小于这个阈值的结果,默认为0.5,span的最终概率输出为起始位置概率和终止位置概率的乘积。
339342
* `precision`:选择模型精度,默认为`fp32`,可选有`fp16``fp32``fp16`推理速度更快。如果选择`fp16`,请先确保机器正确安装NVIDIA相关驱动和基础软件,**确保CUDA>=11.2,cuDNN>=8.1.1**,初次使用需按照提示安装相关依赖。其次,需要确保GPU设备的CUDA计算能力(CUDA Compute Capability)大于7.0,典型的设备包括V100、T4、A10、A100、GTX 20系列和30系列显卡等。更多关于CUDA Compute Capability和精度支持情况请参考NVIDIA文档:[GPU硬件与支持精度对照表](https://docs.nvidia.com/deeplearning/tensorrt/archives/tensorrt-840-ea/support-matrix/index.html#hardware-precision-matrix)
@@ -419,22 +422,22 @@ python doccano.py \
419422

420423
#### 模型微调
421424

422-
通过运行以下命令进行模型微调
425+
通过运行以下命令,使用GPU0卡进行模型微调
423426

424427
```shell
425-
python finetune.py \
426-
--train_path ./data/train.txt \
427-
--dev_path ./data/dev.txt \
428-
--save_dir ./checkpoint \
429-
--learning_rate 1e-5 \
430-
--batch_size 16 \
431-
--max_seq_len 512 \
432-
--num_epochs 100 \
433-
--model uie-base \
434-
--seed 1000 \
435-
--logging_steps 10 \
436-
--valid_steps 100 \
437-
--device gpu
428+
python -u -m paddle.distributed.launch --gpus "0" finetune.py \
429+
--train_path ./data/train.txt \
430+
--dev_path ./data/dev.txt \
431+
--save_dir ./checkpoint \
432+
--learning_rate 1e-5 \
433+
--batch_size 16 \
434+
--max_seq_len 512 \
435+
--num_epochs 100 \
436+
--model uie-base \
437+
--seed 1000 \
438+
--logging_steps 10 \
439+
--valid_steps 100 \
440+
--device gpu
438441
```
439442

440443
可配置参数说明:
@@ -446,7 +449,7 @@ python finetune.py \
446449
- `batch_size`: 批处理大小,请结合机器情况进行调整,默认为16。
447450
- `max_seq_len`: 文本最大切分长度,输入超过最大长度时会对输入文本进行自动切分,默认为512。
448451
- `num_epochs`: 训练轮数,默认为100。
449-
- `model`: 选择模型,程序会基于选择的模型进行模型微调,可选有`uie-base``uie-tiny`,默认为`uie-base`
452+
- `model`: 选择模型,程序会基于选择的模型进行模型微调,可选有`uie-base`, `uie-medium`, `uie-mini`, `uie-micro``uie-nano`,默认为`uie-base`
450453
- `seed`: 随机种子,默认为1000.
451454
- `logging_steps`: 日志打印的间隔steps数,默认10。
452455
- `valid_steps`: evaluate的间隔steps数,默认100。
@@ -498,7 +501,7 @@ python evaluate.py \
498501
- `test_path`: 进行评估的测试集文件。
499502
- `batch_size`: 批处理大小,请结合机器情况进行调整,默认为16。
500503
- `max_seq_len`: 文本最大切分长度,输入超过最大长度时会对输入文本进行自动切分,默认为512。
501-
- `model`: 选择所使用的模型,可选有`uie-base``uie-tiny`,默认为`uie-base`
504+
- `model`: 选择所使用的模型,可选有`uie-base`, `uie-medium`, `uie-mini`, `uie-micro``uie-nano`,默认为`uie-base`
502505
- `debug`: 是否开启debug模式对每个正例类别分别进行评估,该模式仅用于模型调试,默认关闭。
503506

504507
#### 定制模型一键预测
@@ -538,8 +541,11 @@ python evaluate.py \
538541
<table>
539542
<tr><th row_span='2'><th colspan='2'>金融<th colspan='2'>医疗<th colspan='2'>互联网
540543
<tr><td><th>0-shot<th>5-shot<th>0-shot<th>5-shot<th>0-shot<th>5-shot
541-
<tr><td>uie-tiny<td>41.11<td>64.53<td>65.40<td>75.72<td>78.32<td>79.68
542544
<tr><td>uie-base<td>46.43<td>70.92<td>71.83<td>85.72<td>78.33<td>81.86
545+
<tr><td>uie-medium<td>41.11<td>64.53<td>65.40<td>75.72<td>78.32<td>79.68
546+
<tr><td>uie-mini<td>37.04<td>64.65<td>60.50<td>78.36<td>72.09<td>76.38
547+
<tr><td>uie-micro<td>37.53<td>62.11<td>57.04<td>75.92<td>66.00<td>70.222
548+
<tr><td>uie-nano<td>38.94<td>66.83<td>48.29<td>76.74<td>62.86<td>72.35
543549
</table>
544550

545551
0-shot表示无训练数据直接通过```paddlenlp.Taskflow```进行预测,5-shot表示基于5条标注数据进行模型微调。实验表明UIE在垂类场景可以通过少量数据(few-shot)进一步提升效果。

model_zoo/uie/finetune.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ def do_train():
165165
parser.add_argument("--logging_steps", default=10, type=int, help="The interval steps to logging.")
166166
parser.add_argument("--valid_steps", default=100, type=int, help="The interval steps to evaluate model performance.")
167167
parser.add_argument('--device', choices=['cpu', 'gpu'], default="gpu", help="Select which device to train model, defaults to gpu.")
168-
parser.add_argument("--model", choices=["uie-base", "uie-tiny"], default="uie-base", type=str, help="Select the pretrained model for few-shot learning.")
168+
parser.add_argument("--model", choices=["uie-base", "uie-tiny", "uie-medium", "uie-mini", "uie-micro", "uie-nano"], default="uie-base", type=str, help="Select the pretrained model for few-shot learning.")
169169
parser.add_argument("--init_from_ckpt", default=None, type=str, help="The path of model parameters for initialization.")
170170

171171
args = parser.parse_args()

model_zoo/uie/utils.py

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,11 @@
2323
from paddlenlp.utils.log import logger
2424

2525
MODEL_MAP = {
26+
# vocab.txt/special_tokens_map.json/tokenizer_config.json are common to the default model.
2627
"uie-base": {
2728
"resource_file_urls": {
2829
"model_state.pdparams":
29-
"https://bj.bcebos.com/paddlenlp/taskflow/information_extraction/uie_base_v0.1/model_state.pdparams",
30+
"https://bj.bcebos.com/paddlenlp/taskflow/information_extraction/uie_base_v1.0/model_state.pdparams",
3031
"model_config.json":
3132
"https://bj.bcebos.com/paddlenlp/taskflow/information_extraction/uie_base/model_config.json",
3233
"vocab_file":
@@ -37,6 +38,63 @@
3738
"https://bj.bcebos.com/paddlenlp/taskflow/information_extraction/uie_base/tokenizer_config.json"
3839
}
3940
},
41+
"uie-medium": {
42+
"resource_file_urls": {
43+
"model_state.pdparams":
44+
"https://bj.bcebos.com/paddlenlp/taskflow/information_extraction/uie_medium_v1.0/model_state.pdparams",
45+
"model_config.json":
46+
"https://bj.bcebos.com/paddlenlp/taskflow/information_extraction/uie_medium/model_config.json",
47+
"vocab_file":
48+
"https://bj.bcebos.com/paddlenlp/taskflow/information_extraction/uie_base/vocab.txt",
49+
"special_tokens_map":
50+
"https://bj.bcebos.com/paddlenlp/taskflow/information_extraction/uie_base/special_tokens_map.json",
51+
"tokenizer_config":
52+
"https://bj.bcebos.com/paddlenlp/taskflow/information_extraction/uie_base/tokenizer_config.json"
53+
}
54+
},
55+
"uie-mini": {
56+
"resource_file_urls": {
57+
"model_state.pdparams":
58+
"https://bj.bcebos.com/paddlenlp/taskflow/information_extraction/uie_mini_v1.0/model_state.pdparams",
59+
"model_config.json":
60+
"https://bj.bcebos.com/paddlenlp/taskflow/information_extraction/uie_mini/model_config.json",
61+
"vocab_file":
62+
"https://bj.bcebos.com/paddlenlp/taskflow/information_extraction/uie_base/vocab.txt",
63+
"special_tokens_map":
64+
"https://bj.bcebos.com/paddlenlp/taskflow/information_extraction/uie_base/special_tokens_map.json",
65+
"tokenizer_config":
66+
"https://bj.bcebos.com/paddlenlp/taskflow/information_extraction/uie_base/tokenizer_config.json"
67+
}
68+
},
69+
"uie-micro": {
70+
"resource_file_urls": {
71+
"model_state.pdparams":
72+
"https://bj.bcebos.com/paddlenlp/taskflow/information_extraction/uie_micro_v1.0/model_state.pdparams",
73+
"model_config.json":
74+
"https://bj.bcebos.com/paddlenlp/taskflow/information_extraction/uie_micro/model_config.json",
75+
"vocab_file":
76+
"https://bj.bcebos.com/paddlenlp/taskflow/information_extraction/uie_base/vocab.txt",
77+
"special_tokens_map":
78+
"https://bj.bcebos.com/paddlenlp/taskflow/information_extraction/uie_base/special_tokens_map.json",
79+
"tokenizer_config":
80+
"https://bj.bcebos.com/paddlenlp/taskflow/information_extraction/uie_base/tokenizer_config.json"
81+
}
82+
},
83+
"uie-nano": {
84+
"resource_file_urls": {
85+
"model_state.pdparams":
86+
"https://bj.bcebos.com/paddlenlp/taskflow/information_extraction/uie_nano_v1.0/model_state.pdparams",
87+
"model_config.json":
88+
"https://bj.bcebos.com/paddlenlp/taskflow/information_extraction/uie_nano/model_config.json",
89+
"vocab_file":
90+
"https://bj.bcebos.com/paddlenlp/taskflow/information_extraction/uie_base/vocab.txt",
91+
"special_tokens_map":
92+
"https://bj.bcebos.com/paddlenlp/taskflow/information_extraction/uie_base/special_tokens_map.json",
93+
"tokenizer_config":
94+
"https://bj.bcebos.com/paddlenlp/taskflow/information_extraction/uie_base/tokenizer_config.json"
95+
}
96+
},
97+
# Rename to `uie-medium` and the name of `uie-tiny` will be deprecated in future.
4098
"uie-tiny": {
4199
"resource_file_urls": {
42100
"model_state.pdparams":

0 commit comments

Comments
 (0)