基于GPT2的中文闲聊机器人/GPT2 for Chinese chitchat
向AI转型的程序员都关注了这个号???
机器学习AI算法工程 公众号:datayx
项目描述
本项目使用GPT2模型对中文闲聊语料进行训练,使用 HuggingFace的transformers实现GPT2模型的编写与训练。
在闲暇时间用 GPT2-Chinese模型训练了几个长文本的生成模型,并且精读了一遍作者的源码,获益匪浅,加深了自己对GPT2生成模型的一些理解,于是将GPT2模型用于闲聊对话的生成,非常感谢作者的分享。
本项目中沿用了原项目中的部分结构和一些命名方式,同时也对很多代码细节做出了自己实现。
解码器的逻辑使用了Temperature、Top-k Sampling和Nucleus Sampling等,可参考论文The Curious Case of Neural Text Degeneration
根据微软的DialoGPT的思想,在项目中添加了互信息。训练了两个模型:Dialogue Model与MMI Model(maximum mutual information scoring function)。首先使用Dialogue Model生成多个候选response,然后使用MMI Model从候选response中,选取loss最小的作为最终的response
代码中给出了许多详细的中文注释,方便大家更好地理解代码
代码 以及运行教程 获取:
关注微信公众号 datayx 然后回复 闲聊 即可获取。
AI项目体验地址 https://loveai.tech
运行环境
python3.6、 transformers2.1.1、pytorch1.3.1
项目结构
config:存放GPT2模型的参数的配置文件
data
train.txt:默认的原始训练集文件,存放闲聊语料
train_tokenized.txt:对原始训练语料进行顺序tokenize之后的文件,用于dialogue model的训练
train_mmi_tokenized.txt:对原始训练语料进行逆序tokenize之后的文件,用于mmi model的训练
dialogue_model:存放对话生成的模型
mmi_model:存放MMI模型(maximum mutual information scoring function),用于预测P(Source|response)
sample:存放人机闲聊生成的历史聊天记录
vocabulary:存放GPT2模型的字典
train.py:训练代码
interact.py:人机交互代码
Dialogue Model
Dialogue Model是基于GPT2模型的生成模型,对每条训练数据进行"顺序"拼接,然后将其输入到网络中,进行训练(此处的"顺序"是相对于MMI Model的"逆序")
例如存在如下多轮闲聊训练数据,在训练Dialogue Model时,将上述训练数据进行如下拼接:"[CLS]想看你的美照[SEP]亲我一口就给你看[SEP]我亲两口[SEP]讨厌人家拿小拳拳捶你胸口[SEP]"。然后将上述拼接结果作为Dialogue Model的输入,对模型进行训练
MMI Model
MMI Model的思想基于微软的论文DialoGPT:Large-Scale Generative Pre-training for Conversational Response Generation
MMI Model也是一个基于GPT2的生成模型,将每条训练数据进行"逆序"拼接,然后输入到网络中。该模型主要用于计算Dialogue Model生成的所有候选response相对于dialogue history的loss。
训练时,将一条训练语料进行逆序拼接,如 “[CLS]讨厌人家拿小拳拳捶你胸口[SEP]我亲两口[SEP]亲我一口就给你看[SEP]想看你的美照[SEP]”,并作为MMI Model的输入进行训练
response生成步骤
假设当前dialogue history=[“你好”,“你好呀”,“你在干嘛呢”]
首先使用Dialogue Model根据dialogue history生成n个候选response:[“在看电视”,“我在上课啊”,“人家在想你啊”,“我不知道”]
使用MMI Model将每个候选response分别与dialogue history进行逆序拼接,如 "[CLS]在看电视[SEP]你在干嘛呢[SEP]你好呀[SEP]你好[SEP]"
将上述拼接结果作为MMI Model的输入,计算每个response的loss
选择loss最小的response作为最终的结果进行回复
闲聊语料分享
常见中文闲聊
包含小黄鸡语料、豆瓣语料、电视剧对白语料、贴吧论坛回帖语料、微博语料、PTT八卦语料、青云语料等
https://github.com/codemayq/chinese_chatbot_corpus
50w中文闲聊语料
由作者GaoQ1提供的比较高质量的闲聊数据集,整理出了50w个多轮对话的语料
【提取码:jk8d】
https://pan.baidu.com/s/1mkP59GyF9CZ8_r1F864GEQ
50w中文闲聊语料的内容样例如下:
模型分享
闲聊语料大小为67M,包含50w个多轮对话。使用该语料训练了两个模型dialogue_model与mmi_model
dialogue_model
使用闲聊语料训练了40个epoch,最终loss在2.0左右,继续训练的话,loss应该还能继续下降。
【提取码:osi6】
https://pan.baidu.com/s/1qDZ24VKLBU9GKARX9Ev65g
mmi_model
以dialogue_model作为预训练模型,使用上述闲聊语料,训练了40个epoch,最终loss在1.8-2.2之间,继续训练的话,loss也能继续下降。
【提取码:1j88】
https://pan.baidu.com/s/1ubXGuEvY8KmwEjIVTJVLww
interact.py生成样例
Sample 2:
Sample 3:
Sample 4:
Sample 5:
Sample 6:
阅读过本文的人还看了以下文章:
基于40万表格数据集TableBank,用MaskRCNN做表格检测
《深度学习入门:基于Python的理论与实现》高清中文PDF+源码
2019最新《PyTorch自然语言处理》英、中文版PDF+源码
《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码
PyTorch深度学习快速实战入门《pytorch-handbook》
【下载】豆瓣评分8.1,《机器学习实战:基于Scikit-Learn和TensorFlow》
李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材
【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类
如何利用全新的决策树集成级联结构gcForest做特征工程并打分?
Machine Learning Yearning 中文翻译稿
斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)
中科院Kaggle全球文本匹配竞赛华人第1名团队-深度学习与特征工程
不断更新资源
深度学习、机器学习、数据分析、python
搜索公众号添加: datayx
机大数据技术与机器学习工程
搜索公众号添加: datanlp
长按图片,识别二维码