基于GPT2的中文闲聊机器人/GPT2 for Chinese chitchat

机器学习AI算法工程

共 3819字,需浏览 8分钟

 ·

2020-08-27 02:24


向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:




阅读过本文的人还看了以下文章:


TensorFlow 2.0深度学习案例实战


基于40万表格数据集TableBank,用MaskRCNN做表格检测


《基于深度学习的自然语言处理》中/英PDF


Deep Learning 中文版初版-周志华团队


【全套视频课】最全的目标检测算法系列讲解,通俗易懂!


《美团机器学习实践》_美团算法团队.pdf


《深度学习入门:基于Python的理论与实现》高清中文PDF+源码


特征提取与图像处理(第二版).pdf


python就业班学习视频,从入门到实战项目


2019最新《PyTorch自然语言处理》英、中文版PDF+源码


《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码


《深度学习之pytorch》pdf+附书源码


PyTorch深度学习快速实战入门《pytorch-handbook》


【下载】豆瓣评分8.1,《机器学习实战:基于Scikit-Learn和TensorFlow》


《Python数据分析与挖掘实战》PDF+完整源码


汽车行业完整知识图谱项目实战视频(全23课)


李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材


笔记、代码清晰易懂!李航《统计学习方法》最新资源全套!


《神经网络与深度学习》最新2018版中英PDF+源码


将机器学习模型部署为REST API


FashionAI服装属性标签图像识别Top1-5方案分享


重要开源!CNN-RNN-CTC 实现手写汉字识别


yolo3 检测出图像中的不规则汉字


同样是机器学习算法工程师,你的面试为什么过不了?


前海征信大数据算法:风险概率预测


【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类


VGG16迁移学习,实现医学图像识别分类工程项目


特征工程(一)


特征工程(二) :文本数据的展开、过滤和分块


特征工程(三):特征缩放,从词袋到 TF-IDF


特征工程(四): 类别特征


特征工程(五): PCA 降维


特征工程(六): 非线性特征提取和模型堆叠


特征工程(七):图像特征提取和深度学习


如何利用全新的决策树集成级联结构gcForest做特征工程并打分?


Machine Learning Yearning 中文翻译稿


蚂蚁金服2018秋招-算法工程师(共四面)通过


全球AI挑战-场景分类的比赛源码(多模型融合)


斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)


python+flask搭建CNN在线识别手写中文网站


中科院Kaggle全球文本匹配竞赛华人第1名团队-深度学习与特征工程



不断更新资源

深度学习、机器学习、数据分析、python

 搜索公众号添加: datayx  



机大数据技术与机器学习工程

 搜索公众号添加: datanlp

长按图片,识别二维码


浏览 80
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报