基于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:


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

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

长按图片,识别二维码

# 说明 该库是对目前市面上已有的开源中文聊天语料的搜集和系统化整理工作 该库搜集了包含 - chatterbot - 豆瓣多轮 - PTT八卦语料 - 青云语料 - 电视剧对白语料 - 贴吧论坛回帖语料 - 微博语料 - 小黄鸡语料 共8个公开闲聊常用语料和短信,白鹭时代问答等语料。 并对8个常见语料的数据进行了统一化规整和处理,达到直接可以粗略使用的目的。 **使用该项目,即可对所有的聊天语料进行一次性的处理和统一下载,不需要到处自己去搜集下载和分别处理各种不同的格式。* # 环境 python3 # 处理过程 将各个来源的语料按照其原格式进行提取,提取后进行繁体字转换,然后统一变成一轮一轮的对话。 # 使用方法 将解压后的raw_chat_corpus文件夹放到当前目录下 目录结构为 ``` raw_chat_corpus -- language -- process_pipelines -- raw_chat_corpus ---- chatterbot-1k ---- douban-multiturn-100w ---- .... -- main.py -- ... ``` 执行命令即可 ```bash python main.py ``` 或者 ```bash python3 main.py ``` # 生成结果 每个来源的语料分别生成一个独立的*.tsv文件,都放在新生成的clean_chat_corpus文件夹下。 生成结果格式为 tsv格式,每行是一个样本,先是query,再是answer ``` query \t answer ``` # 结果的使用 这个就根据每个人不同的情况自主使用即可 个人对于聊天机器人方向实践也不是很多,以下一篇之前写的知乎专栏供参考 **《从产品完整性的角度浅谈chatbot》** 文章粗略讲解了如下一些方面,介绍了聊天机器人在实际产品化过程中可能遇到的问题和解决办法。 1. chatbot自身人格的设置 1. 产品上线需要考虑的敏感词处理 1. 文本检索模型的使用 1. 文本生成模型的使用 1. 回答打分机制 1. 万能回答的使用策略 1. 多媒体消息的处理 1. 产品模型部署的问题 # 版权说明 本项目为非商业项目,为纯搜集和汇总资料,如有侵权,请在issue下留言。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值