- PaddleNLP常见问题汇总(持续更新)
- 待学习 PaddleNLP教程文档 | PaddleNLP教程文档
- 待实践 PaddleNLP一键预测功能:Taskflow API | PaddleNLP 一键预测功能 Taskflow API 使用教程
- Github PaddleNLP
pip install paddlepaddle paddlepaddle-gpu
pip install paddlenlp
很难定义具体需要多少条样本,取决于具体的任务以及数据的质量。如果数据质量没问题的话,分类、文本匹配任务所需数据量级在百级别,翻译则需要百万级能够训练出一个比较鲁棒的模型。如果样本量较少,可以考虑数据增强,或小样本学习。
通过使用PaddleNLP提供的 load_dataset, MapDataset 和 IterDataset ,可以方便的自定义属于自己的数据集。
from paddlenlp.datasets import load_dataset
def read(data_path):
with open(data_path, 'r', encoding='utf-8') as f:
# 跳过列名
next(f)
for line in f:
words, labels = line.strip('\n').split('\t')
words = words.split('\002')
labels = labels.split('\002')
yield {'tokens': words, 'labels': labels}
# data_path为read()方法的参数
map_ds = load_dataset(read, data_path='train.txt', lazy=False)
iter_ds = load_dataset(read, data_path='train.txt', lazy=True)
import paddlenlp as ppnlp
from paddlenlp.datasets import load_dataset
train_ds, dev_ds, test_ds = load_dataset(
"chnsenticorp", splits=["train", "dev", "test"])
print(train_ds.label_list)
for data in train_ds.data[:5]:
print(data)
PaddleNLP提供了Data Augmentation数据增强API,可用于训练数据数据增强
其他:
保存
model.save_pretrained('./checkpoint')
tokenizer.save_pretrained('./checkpoint')
加载
model.from_pretrained("./checkpoint')
tokenizer.from_pretrained("./checkpoint')
# 加载
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
model = BertModel.from_pretrained("bert-base-uncased")
# 调用save_pretrained()生成 model_config.json、 tokenizer_config.json、model_state.pdparams、 vocab.txt 文件,保存到./checkpoint
tokenizer.save_pretrained("./checkpoint")
model.save_pretrained("./checkpoint")
# 修改model_config.json,tokenizer_config.json这两个配置文件,指定为自己的模型,之后通过from_pretrained()加载模型
tokenizer = BertTokenizer.from_pretrained("./checkpoint")
model = BertModel.from_pretrained("./checkpoint")
先将lr、 optimizer、model的参数保存下来
paddle.save(lr_scheduler.state_dict(), "xxx_lr")
paddle.save(optimizer.state_dict(), "xxx_opt")
paddle.save(model.state_dict(), "xxx_para")
加载lr、 optimizer、model参数即可恢复训练
lr_scheduler.set_state_dict(paddle.load("xxxx_lr"))
optimizer.set_state_dict(paddle.load("xxx_opt"))
model.set_state_dict(paddle.load("xxx_para"))
冻结训练其实也是迁移学习的思想,在目标检测任务中用得十分广泛。因为目标检测模型里,主干特征提取部分所提取到的特征是通用的,把backbone冻结起来训练可以加快训练效率,也可以防止权值被破坏。在冻结阶段,模型的主干被冻结了,特征提取网络不发生改变,占用的显存较小,仅对网络进行微调。在解冻阶段,模型的主干不被冻结了,特征提取网络会发生改变,占用的显存较大,网络所有的参数都会发生改变。
参考:
增加训练样本带来的效果是最直接的。此外,可以基于我们开源的预训练模型进行热启,再用少量数据集fine-tune模型。此外,针对分类、匹配等场景,小样本学习也能够带来不错的效果。
在动态图模式下开发,静态图模式部署。
动转静,即将动态图的模型转为可用于部署的静态图模型。 动态图接口更加易用,python 风格的交互式编程体验,对于模型开发更为友好,而静态图相比于动态图在性能方面有更绝对的优势。因此动转静提供了这样的桥梁,同时兼顾开发成本和性能。 可以参考官方文档 动态图转静态图文档,使用 paddle.jit.to_static
完成动转静。 另外,在 PaddleNLP 我们也提供了导出静态图模型的例子,可以参考 waybill_ie 模型导出。
动转静之后保存下来的模型可以借助Paddle Inference完成高性能推理部署。Paddle Inference内置高性能的CPU/GPU Kernel,结合细粒度OP横向纵向融合等策略,并集成 TensorRT 实现模型推理的性能提升。具体可以参考文档 Paddle Inference 简介。 为便于初次上手的用户更易理解 NLP 模型如何使用Paddle Inference,PaddleNLP 也提供了对应的例子以供参考,可以参考 /PaddleNLP/examples 下的deploy目录,如基于ERNIE的命名实体识别模型部署。
从工程角度,对于服务器端部署可以使用 Paddle Inference 高性能预测引擎进行预测部署。对于Transformer类模型的GPU预测还可以使用PaddleNLP中提供的FastGeneration功能来进行快速预测,其集成了NV FasterTransformer并进行了功能增强。
从模型策略角度,可以使用一些模型小型化技术来进行模型压缩,如模型蒸馏和裁剪,通过小模型来实现加速。PaddleNLP中集成了ERNIE-Tiny这样一些通用小模型供下游任务微调使用。另外PaddleNLP提供了模型压缩示例,实现了DynaBERT、TinyBERT、MiniLM等方法策略,可以参考对自己的模型进行蒸馏压缩。
参考:
- 医疗领域实体抽取:UIE Slim最新升级版含数据标注、serving部署、模型蒸馏等教学,助力工业应用场景快速落地
- 军事领域关系抽取:UIE Slim最新升级版含数据标注、serving部署、模型蒸馏等教学,助力工业应用场景快速落地
- 【Paddle打比赛】基于PaddleNLP的面向低资源和增量类型的命名实体识别
- PDF 基于ERNIELayout&pdfplumber-UIE的多方案学术论文信息抽取
- 重要 文本抽取任务UIE Taskflow使用指南
- 产业实践分享:基于UIE-X的医疗文档信息提取,少样本微调大幅提升抽取效果
- 简历信息提取(七):用ERNIE-Layout实现文档智能问答信息筛选
信息抽取应用 |
- 论文:Unified Structure Generation for Universal Information Extraction
- PaddleNLP之UIE信息抽取小样本进阶(二)[含doccano详解]
- 信息抽取UIE(二)--小样本快速提升性能(含doccona标注
- 通用信息抽取技术UIE产业案例解析,Prompt范式落地经验分享!
- 基于Label studio实现UIE信息抽取智能标注方案,提升标注效率!
- UIE与ERNIE-Layout:智能视频问答任务初探
- 跨模态文档通用信息抽取模型UIE-X来了
# 生成requirements.txt
pipreqs ./ --encoding=utf8 --proxy http://${host}:${port}
# 自动安装所有依赖
pip install -r requriements.txt
参考:
# 多行if
if cond1 == 'val1' and \
cond2 == 'val2' and \
cond3 == 'val3' and \
cond4 == 'val4':
do_something