PALM文本生成模型介绍
PALM模型是一个通用的预训练生成模型,可以用于解决下游各种类型的生成任务。模型利用大量无监督数据,通过结合自编码和自回归任务进行预训练。可以用于解决文本生成相关的任务包含:文本摘要、问题生成、data-to-text等。此处我们提供PALM的一个base backbone模型,可用于下游生成任务的fine-tune。
模型描述
针对实际场景中常见的文本生成需求,自主研发了PALM预训练语言生成模型。该模型通过在大规模文本上预训练得到,可作为下游自然语言生成任务的模型参数输入,以帮助提升下游任务的生成效果。PALM具有以下特点:
- 理解能力更强:为conditional generation特别设计了预训练任务,增强模型对上下文的理解能力。
- 所需标注更少:模型在海量文本语料上预训练,大大减少下游生成任务所需的标签数据量。
- 性能优良:中英文模型均使用大规模数据训练得到,且采用自研适应NLG任务的预训练目标。
- 适应各类生成任务:PALM可用于各类不同的生成任务,如摘要、问题生成、paraphrasing等等。
- 方便易用:下游使用方便,基于生成的传统encoder-decoder框架。
本模型是PALM通用预训练生成模型,在中文LCSTS数据集上进行finetune得到的文本摘要生成模型。PALM模型介绍,详见:PALM:Pre-training an Autoencoding&Autoregressive Language Model for Context-conditioned Generation
期望模型使用方式以及适用范围
本模型主要用于多种下游生成场景。用户可以自行构造生成的输入输出训练数据。具体调用方式请参考代码示例。
如何使用
在安装完成MaaS-lib之后即可使用text-generation的能力
代码范例
请参考ModelScope的通用finetune流程流程
模型局限性以及可能的偏差
模型在数据集上训练,有可能产生一些偏差,请用户自行评测后决定如何使用。
训练数据介绍
本模型是由大量中文无监督数据训练而成,在中文的下游多个生成任务上取得SOTA。
模型训练流程
数据集预处理
训练数据的输入输出均为文本,需要将数据集预处理为输入为 srctxt,输出为 tgttxt 的格式:
from modelscope.msdatasets import MsDataset
dataset_dict = MsDataset.load('<dataset name>')
train_dataset = dataset_dict['train'].to_hf_dataset() \
.rename_columns({'text1': 'src_txt', 'text2': 'tgt_txt'})
eval_dataset = dataset_dict['validation'].to_hf_dataset() \
.rename_columns({'text1': 'src_txt', 'text2': 'tgt_txt'})
训练
模型采用2张NVIDIA V100机器训练, 超参设置如下:
train_epochs=15
max_sequence_length=512
batch_size=32
learning_rate=1e-3
optimizer=Adam
训练相关配置可见于模型文件中 configuration.json,如需在训练代码中修改训练参数,可以编写 cfgmodifyfn 函数输入到 Trainer 中,以下给出在代码中使用 cfgmodifyfn 函数将 lrlambda 更改为 noamlambda 并使用 modelscope 中的 trainer 进行训练的一个例子:
def noam_lambda(current_step: int):
current_step += 1
return min(current_step**(-0.5),
current_step * num_warmup_steps**(-1.5))
def cfg_modify_fn(cfg):
cfg.train.lr_scheduler = {
'type': 'LambdaLR',
'lr_lambda': noam_lambda,
'options': {
'by_epoch': False
}
}
return cfg
kwargs = dict(
model='damo/nlp_palm2.0_pretrained_chinese-base',
train_dataset=train_dataset,
eval_dataset=eval_dataset,
work_dir=self.tmp_dir,
cfg_modify_fn=cfg_modify_fn)
trainer = build_trainer(
name=Trainers.nlp_base_trainer, default_args=kwargs)
trainer.train()
数据评估及结果
相关论文以及引用信息
如果我们的模型对您有帮助,请您引用我们的文章:
@inproceedings{bi-etal-2020-palm,
title = "{PALM}: Pre-training an Autoencoding & Autoregressive Language Model for Context-conditioned Generation",
author = "Bi, Bin and
Li, Chenliang and
Wu, Chen and
Yan, Ming and
Wang, Wei and
Huang, Songfang and
Huang, Fei and
Si, Luo",
booktitle = "Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing (EMNLP)",
month = nov,
year = "2020",
address = "Online",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/2020.emnlp-main.700",
doi = "10.18653/v1/2020.emnlp-main.700",
pages = "8681--8691"}
评论