读完这三篇论文,我的模型学会多样回复了
The following article is from NLP情报局 Author Toby
例如用户发送“我真的想吃饭”,模型倾向于选择简单的响应,如“没问题”,而不是使用更复杂的句子,如推荐和建议。
下面分享3篇针对生成多样性回复的顶会论文,经过专门训练,模型输出会明显丰富多彩。
DialogGPT
论文标题
DialoGPT: Large-Scale Generative Pre-training for Conversational Response Generation
链接
https://arxiv.org/abs/1911.00536
DialogGPT旨在解决“安全回复”的问题。论文假定对于(Source, Target),优质、多样性好的回复相对于通用回复更能体现source的特征,基于该假定,论文提出了利用最大互信息(MMI)来约束并筛选回复。
模型结构与策略
使用两个同样的GPT-2模型,二者不共享参数,一个用于生成回复语句,一个用于计算P(Source|Hypothesis),筛选候选回复。
训练策略
针对生成模型,训练任务为基于上下文信息(Source)生成回复语句(Target);
针对MMI模型,训练任务为基于回复语句生成上下文信息。
inference策略
1. 使用生成模型+Top-K sampling策略生成K个候选回复
2. 将候选回复依次与上下文信息输入MMI模型,根据输出概率计算出互信息
3. 基于互信息进行Re-ranking,输出回复
实验效果
项目地址
https://github.com/yangjianxin1/GPT2-chitchat
PLATO
论文标题
PLATO: Pre-trained Dialogue Generation Model withDiscrete Latent Variable
链接
https://aclanthology.org/2020.acl-main.9/
该模型主要解决开放域对话中Post->Response面临的“一对多”问题,即一个上下文可以有多个回复;但是由于训练时没有区分,多个回复“平均”后可能就变成了安全回复。例如:
A:今天好冷啊,外面风好大。
B可以回复:
1) 是啊,天气预报说今天气温骤降10度呢。
2) 好期待下雪啊,这样就可以堆雪人了。
3) 刚在外面走了一会,发型都被吹乱了。
“平均”后B的回复:是的
主要贡献
1. 引入flexible self-attention机制,对于生成过程中的response采用单向attention,对于其他采用双向attention机制
2. 引入离散隐变量,达到策略选择的效果,通过不同的离散值影响模型的生成结果
模型结构
训练策略
一共使用三个Loss:NLL Loss , BOW Loss以及RS Loss
- NLL Loss用于训练常规的对话生成任务
- BOW Loss用于强化针对latent discrete variable的表达
- RS Loss用于对候选回复进行选择,同时可以训练隐变量的估计
训练步骤
每一个训练step需要过两次模型
1) Latent Act Recognition: 估计后验分布p(z|c, r),计算RS Loss
2)Response Generation: 对离散变量 z∼p(z|c, r)进行采样,进行生成任务,计算NLL和BOW Loss
3)Optimization: 计算梯度,反向传播
Inference策略
1. Candidate Response Generation: 通过外部控制离散隐变量z,生成候选回复集合
2. Response Selection: 通过回复筛选流程(RS Loss训练)选择最终的回复
实验效果
论文标题
PLATO-2: Towards Building an Open-Domain Chatbot viaCurriculum Learning
链接
https://arxiv.org/abs/2006.16779
与前作面向的问题类似,该模型依旧致力于解决开放域对话中Post->Response面临的“一对多”问题。
主要贡献
在PLATO的基础上新增了两阶段训练,在第二阶段中使用双向一致性判断来选择回复,在中文对话中超过了小冰、DialoGPT、Meena、Blender等模型
模型结构
采用LM前置的Transformer结构,与前作一样采用flexible attention mechanism。
训练策略
采用了课程学习(两阶段任务学习)
第一阶段:采用标准的one-to-one的对话回复生成任务,使用NLL Loss优化模型参数
第二阶段:分别对模型进行多样性回复生成任务以及回复判别任务;
多样性回复任务
与PLATO保持一致,首先添加[M]在句首预测出z~p(z|c, r),然后根据z和context进行response生成任务的训练,使用BOW Loss和NLL Loss。
回复判别任务
此处的RCE = PLATO RS Loss,与PLATO的不同点在于:
1. 没有统一两个任务的输入,此处将关键字改回了CLS
2. 在RCE外新增了MLM强化回复判别任务的学习
实验效果
在线体验
https://ai.baidu.com/unit/v2/static/socialbot
- END -
关于AINLP
AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。
阅读至此了,分享、点赞、在看三选一吧🙏