多轮对话-2020:DialoGPT【生成式多轮对话模型】( 二 )


我们来测试一下我们的训练结果 。
>>> print(.([u'我最近天天吃火锅']))火锅好吃啊>>> print(.([u'我最近天天吃火锅']))我也是>>> print(.([u'我最近天天吃火锅']))哈哈哈哈哈哈我最近一周吃了两顿火锅>>> print(.([u'我最近天天吃火锅']))我也是 , 每次都吃的撑>>> print(.([u'我最近天天吃火锅']))吃火锅不长胖>>> print(.([u'我最近天天吃火锅']))火锅好啊>>> print(.([u'我最近天天吃火锅']))你们那边有这种火锅?>>> print(.([u'我最近天天吃火锅']))火锅好吃吗?我也想吃>>> print(.([u'我最近天天吃火锅']))吃吧 , 吃了就开心了>>> print(.([u'我最近天天吃火锅']))我也想天天吃火锅!>>> print(.([u'我最近天天吃火锅']))火锅吃不了多久的 。>>> print(.([u'你那天气好吗']))还好 , 不热 , 有点冷>>> print(.([u'你那天气好吗', u'还好 , 不热 , 有点冷', u'那你得穿多厚的衣服']))我穿了两件

多轮对话-2020:DialoGPT【生成式多轮对话模型】

文章插图
对比分析
CDial-GPT也开源了自己训练的预训练模型 , 笔者也将它转换为能加载的格式了 , CDial-GPT-tf[2] , 读者也可以测试比对一下 。从训练上来看 , CDial-GPT使用实现的模型 , 基本结构是GPT Base , 使用了4张 , 总为32 , 累积梯度64步 , 论文说训练了30个epoch , 总步数约2100万步(笔者的两倍) , 因此大概相当于为2048训练了33万步 。
在输入设计上 , CDial-GPT也有所不同 , 如下图:
如图所示 , CDial-GPT跟我们前述设计的主要不同是多轮对话之间的拼接方式 , 我们之前是直接用[SEP]连接 , 它是用[]、[](图中简记为S1、S2)这样的角色标记来连接 , 最后才用一个[SEP]表示回复结束 。这样一来 , 由于预测部分的格式跟历史的格式不一样 , 因此每次只能训练一句回复 , 多轮对话要拆分为多个样本来训练 , 理论上是增加了训练复杂性的(要训练多步才能把一个多轮对话样本训练完) 。
至于效果上 , 个人测试的感觉是两者没什么明显差别 。有兴趣的读者也可以自行比较测试 。
文章总结
本文主要分享了一次对话模型实践 , 基于开源的LCCC闲聊语料库 , 利用语言模型(GPT)对多轮对话进行生成式建模 , 得到了一个相对通用的闲聊对话模型 , 最后将本文的思路与CDial-GPT本身开源的模型进行了比较 。
参考文献:
【多轮对话-2020:DialoGPT【生成式多轮对话模型】】[1]《从语言模型到:如戏 , 全靠Mask》: [2] CDial-GPT-tf: