有监督预训练!文本生成又一探索!
© 作者 | 唐天一
机构 | 中国人民大学
研究方向 | 自然语言处理
本文提出了针对文本生成的多任务有监督的预训练模型MVP。不同于先前无(自)监督预训练的模型,本文收集了有标签的生成数据集来预训练模型MVP,同时为不同的任务进一步训练了连续提示来激发模型在特定任务的能力。实验证明我们模型的有效性和通用性,超越了生成任务基线模型BART,在12个数据集上取得了SOTA效果。
文章也同步发布在 AI Box 知乎专栏(知乎搜索 AI Box 专栏),欢迎大家在知乎专栏的文章下方评论留言,交流探讨!
作者:唐天一,中国人民大学硕士生一年级,导师为赵鑫教授,研究方向为自然语言处理。
题目:MVP: Multi-task Supervised Pre-training for Natural Language Generation
下载地址:https://arxiv.org/abs/2206.12131
本文的代码,模型,中间结果均已开源
GitHub主页,一站式微调、评测代码,中间结果
https://github.com/RUCAIBox/MVP
MVP模型
https://huggingface.co/RUCAIBox/mvp
MVP变体
https://huggingface.co/models?filter=mvp
说明文档
https://huggingface.co/docs/transformers/main/en/model_doc/mvp
本文收集了7种代表性生成任务的45个有标签数据集,共计3200千万条样本(23GB),来作为预训练语料。第一阶段,使用这些语料训练一个标准的Transformer,即MVP;第二阶段,冻结住MVP,利用每个任务的数据训练任务特定的连续型提示(即7组提示)。
随后,为了测试模型的有效性,本文在这7个任务的常见数据集上进行了测试。相较于无监督预训练的BART,有监督预训练的MVP有明显提示。在没有使用任务技巧的情况下,我们的通用模型在15个数据集上有10个取得了SOTA效果。本文还在生成基准GEM上进行了测试,效果全面优于ExT5。
最后,为了测试模型的通用性,本文还在预训练阶段未知的生成任务和自然语言理解基准GLUE上进行了测试,在未知生成任务取得了SOTA效果,在GLUE上也优于基线BART。
本文共在11个生成任务和GLUE上进行了测试,具体如下:
摘要:CNN/Daily Mail,XSum,SAMSum和WLE。
开放域对话:PersonaChat,DailyDialog,DSTC7-AVSD和SGD。
数据到文本生成:WebNLG v2.1,WebNLG v3.0,WikiBio,E2E,DART和ToTTo。
问题生成:SQuAD和CoQA。
故事生成:ROCStories和WritingPrompts。
问答:SQuAD和CoQA。
任务型对话:MultiWOZ 2.0。
常识生成:CommonGen。
文本简化:WikiAuto + Turk/ASSET。
复述:Quora。
文本风格迁移:GYAFC-E&M和F&R。
文本分类:CoLA和SST-2。
自然语言推理:MNLI,QNLI和RTE。
释义检测:MRP,CQQP和STS-B。
代码示例
from transformers import MvpTokenizer, MvpForConditionalGeneration
tokenizer = MvpTokenizer.from_pretrained("RUCAIBox/mvp")
model = MvpForConditionalGeneration.from_pretrained("RUCAIBox/mvp")
inputs = tokenizer(
"Summarize: You may want to stick it to your boss and leave your job, but don't do it if these are your reasons.",
return_tensors="pt",
)
generated_ids = model.generate(**inputs)
tokenizer.batch_decode(generated_ids, skip_special_tokens=True)
["Why You Shouldn't Quit Your Job"]
inputs = tokenizer(
"Describe the following data: Iron Man | instance of | Superhero [SEP] Stan Lee | creator | Iron Man",
return_tensors="pt",
)
generated_ids = model.generate(**inputs)
tokenizer.batch_decode(generated_ids, skip_special_tokens=True)
['Stan Lee created the character of Iron Man, a fictional superhero appearing in American comic']
更多推荐
KDD 2022 | 我们离通用预训练推荐模型还有多远?推荐系统的通用序列表示学习模型 UniSRec
- 点击下方“阅读原文”前往知乎专栏