读文章笔记(一):动手做个DialoGPT:生成式多轮对话模型
公众号AINLP文章链接: 动手做个DialoGPT:生成式多轮对话模型。.
https://mp.weixin.qq.com/s/U_S5hKYnGcjYBRG2nr3_Gg
论文名称:
《A Large-Scale Chinese Short-Text Conversation Dataset》
论文链接:
https://arxiv.org/abs/2008.03946
项目地址:
https://github.com/thu-coai/CDial-GPT
文章进行:一次对话模型实践,基于开源的LCCC(Large-scale Cleaned Chinese Conversation)闲聊语料库数据集,利用语言模型(GPT)对多轮对话进行生成式建模,得到了一个相对通用的闲聊对话模型,最后将本文的思路与CDial-GPT本身开源的模型进行了比较。
一:LCCC数据集分析
二:模型设计:需要做的就是训练一个模型,预测下一个该回复什么,模型也要支持多轮对话。
从形式上来看我们应该用Seq2Seq模型,给定一些输入(把“直到当前句的所有历史对话”都拼接成单句文本,来作为模型的输入信息),预测一个输出:
- 标准的Seq2Seq一般用于:形式比较固定的输入输出,比如输入的文本长度应该是集中在某个范围内,不宜变化太大。
- 但考虑多轮对话的话,理论上我们也不知道前面有多少轮对话,因此原则上输入文本长度是无限制的。
- 用Seq2Seq的话,还有训练效率低的问题,每轮对话每次我们只能训练一句回复,如果一个多轮对话有n句回复,那么就要拆分为n个样本来训练了。
因此,我们需要一个长度能相当自由地变化的、同时能预测整个多轮对话的模型,实现这个需求的比较适当的选择就是单向语言模型(LM、GPT),如下图:
主流的Transformer模型,按照BERT的常规输入格式,将每句对话用[SEP]拼接起来,然后就训练一个从左往右的单向语言模型。为了区分不同的说话角色,我们对不同的说话者用不同的Segment Id区分。此外,考虑到BERT和GPT都是用了绝对位置编码,可处理的文本长度存在一个上限,而对话轮数理论上是无限的,所以这里我们采用了相对位置编码的NEZHA作为基本结构,并使用NEZHA的预训练权重作为模型的初始化权重。