Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >基于GPT2制作一个chatbot

基于GPT2制作一个chatbot

原创
作者头像
大鹅
修改于 2021-09-18 16:07:16
修改于 2021-09-18 16:07:16
2.2K0
举报

1. 背景

想必大家都有经历,处于多种原因有个很好的朋友不再跟你聊天了,那么可不可以用他的微信聊天记录来大致还原一下这个人的聊天习惯语气甚至是喜欢发的表情包等等呢?

这篇博客基于GPT2-Chinese大概讲述如何使用朋友的聊天记录训练一个聊天机器人,不过最终效果还是取决于训练的语料是否足够,以及模型的选取,参数调整等等,能运行成功不难,但是调试能很好的模仿就比较难了,大家有兴趣可以多多尝试其他建模方式或者语料选取。

后半篇会大概尝试讲述一下GPT2的原理以及调优。

话不多说,先来把这篇文章可能是最复杂的部分,开发与运行环境给准备好差不多完成demo一半了。

2. GPT-2原理简述

在之前的博客可以复习一下transformer BERT GPT等模型

GPT-2 是使用「transformer 解码器模块」构建的,而 BERT 则是通过「transformer 编码器」模块构建的。这里需要指出的是,二者一个很关键的不同之处在于:GPT-2 就像传统的语言模型一样,一次只输出一个单词(token)

3. 环境准备

运行环境参考:

centOS7 python3.6

运行以下命令

代码语言:txt
AI代码解释
复制
yum -y install python36-devel
代码语言:txt
AI代码解释
复制
git clone
代码语言:txt
AI代码解释
复制
cd gpt2-chatbot
代码语言:txt
AI代码解释
复制
pip3 install -r requirements.txt

4.1 语料准备与预处理

在项目根目录下的data文件夹,将原始训练语料命名为train.txt,存放在该目录下。train.txt的格式如下,每段闲聊之间间隔一行,格式如下:

训练语料下载可以使用

https://github.com/codemayq/chinese_chatbot_corpus

代码语言:txt
AI代码解释
复制
真想找你一起去看电影
突然很想你
我也很想你

想看你的美照
亲我一口就给你看
我亲两口
讨厌人家拿小拳拳捶你胸口

将同事所有的聊天记录处理并复制append到训练文件中(不知道是否可以适当样本加权)

运行preprocess.py,对data/train.txt对话语料进行tokenize,然后进行序列化保存到data/train.pkl。train.pkl中序列化的对象的类型为List,记录对话列表中,每个对话包含的token。

python3 preprocess.py --train_path data/train.txt --save_path data/train.pkl

4.2 训练模型

运行train.py,使用预处理后的数据,对模型进行自回归训练,模型保存在根目录下的model文件夹中。

在训练时,可以通过指定patience参数进行early stop。当patience=n时,若连续n个epoch,模型在验证集上的loss均没有下降,则进行early stop,停止训练。当patience=0时,不进行early stop。

python3 train.py --epochs 40 --batch_size 8 --device 0,1 --train_path data/train.pkl

5. 其他

其实后续可完善部分还是很多的,项目代码还没怎么看明白。随意写几个以后有时间再玩玩:

  • 在线学习
  • 尝试其他预训练模型
  • 每天对微博热搜进行时评

能完善这些估计群会稍微不这么安静了吧。

Ref

  1. https://zhuanlan.zhihu.com/p/96755231
  2. https://github.com/yangjianxin1/GPT2-chitchat
  3. https://github.com/sfyc23/EverydayWechat
  4. https://github.com/Morizeyao/GPT2-Chinese
  5. https://zhuanlan.zhihu.com/p/57251615
  6. paper https://d4mucfpksywv.cloudfront.net/better-language-models/language-models.pdf
  7. https://github.com/openai/gpt-2
  8. 机器之心解读模型 https://www.sohu.com/a/336262203_129720

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Github】GPT2-Chinese:中文的GPT2训练代码
Chinese version of GPT2 training code, using BERT tokenizer.
AINLP
2019/08/28
10.3K0
用了这个技术,我让模型训练和推理快了好几倍
Transformer系列模型都在用吧? Hugging Face都在用吧? Fairseq都在用吧?
godweiyang
2022/11/14
7840
用了这个技术,我让模型训练和推理快了好几倍
17.1K star!两小时就能训练出专属于自己的个性化小模型,这个开源项目让AI触手可及!
嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法
小华同学ai
2025/03/26
670
17.1K star!两小时就能训练出专属于自己的个性化小模型,这个开源项目让AI触手可及!
GPT/GPT2/DialoGPT 详解对比与应用-文本生成与对话
GPT 的全名:Generative Pre-Training,其论文标题是 Improving Language Understanding by Generative Pre-Training。
大鹅
2021/09/15
9.1K0
【序列到序列学习】生成古诗词
生成古诗词 序列到序列学习实现两个甚至是多个不定长模型之间的映射,有着广泛的应用,包括:机器翻译、智能对话与问答、广告创意语料生成、自动编码(如金融画像编码)、判断多个文本串之间的语义相关性等。 在序列到序列学习任务中,我们首先以机器翻译任务为例,提供了多种改进模型供大家学习和使用。包括:不带注意力机制的序列到序列映射模型,这一模型是所有序列到序列学习模型的基础;使用Scheduled Sampling改善RNN模型在生成任务中的错误累积问题;带外部记忆机制的神经机器翻译,通过增强神经网络的记忆能力,来完
用户1386409
2018/04/02
1.5K1
[文本纠错] pycorrector框架训练
通过以上两种方法的任何一种完成安装都可以。如果不想安装,可以下载github源码包,安装下面依赖再使用。
MachineLP
2020/10/29
2.3K0
Keras-TextClassification 文本分类工具包
https://github.com/yongzhuo/Keras-TextClassification
致Great
2020/12/14
9820
[干货] 一文介绍如何训练GPT2,让自己的数据会说话
作为ChatGPT之前的版本,GPT-2是由OpenAI于2019年发布的人工智能技术,它可以自动生成文本,理解语言并生成连贯的文本回应。它可以用于各种文本生成任务,如文章创作、对话生成和翻译等。它是一个在github的开源项目。
数智圈
2023/10/02
1.8K1
[干货] 一文介绍如何训练GPT2,让自己的数据会说话
新网杯top1方案:手把手构建中文语音合成模型!
Parakeet 旨在为开源社区提供灵活、高效和最先进的文本转语音工具包。它建立在 PaddlePaddle 动态图上,包括许多有影响力的 TTS 模型。
Datawhale
2021/12/09
1.5K0
新网杯top1方案:手把手构建中文语音合成模型!
开源 | 基于会话的最优推荐模型:SR-GNN的PaddlePaddle实现
相较于之前通过循环神经网络(RNN)来对会话进行序列化建模导致的不能够得到用户的精确表征以及忽略了items中复杂的转换特性,SR-GNN通过将序列化的问题转换为图的问题,对所有的会话序列通过有向图进行建模,然后通过图神经网络(GNN)来学习每个item的隐向量表示,进而通过一个注意力网络(Attention Network)架构模型来捕捉用户的短期兴趣,以达到捕获长期与短期兴趣共存的向量表示。
量子位
2019/05/15
6510
PaddlePaddle升级解读 | 基于会话的最优推荐模型SR-GNN
PaddlePaddle于近期开源了基于会话(session-based)的推荐系统模型(SR-GNN)。
用户1386409
2019/06/06
7650
PaddlePaddle升级解读 | 基于会话的最优推荐模型SR-GNN
小破本也能炼GPT!300行代码搞定,GitHub获6k星,来自特斯拉前AI总监
詹士 发自 凹非寺 量子位 | 公众号 QbitAI 训练/微调中型GPT,最简单最快的库来了! 其名为:NanoGPT。 从名字就能看出是个“纳米武器”,据作者介绍,该库代码简单易读,2个仅300行代码的文件。 现已基于OpenWebText重现 GPT-2 (124M),在单个8XA100 40GB节点上,训练时间为38小时。 值得一提的是,该库发布者是前特斯拉AI总监,李飞飞高徒,Andrej Karpathy。此次发布的NanoGPT,正是他2年前MinGPT的升级版。 目前,此项目在GitHub
量子位
2023/02/28
7510
小破本也能炼GPT!300行代码搞定,GitHub获6k星,来自特斯拉前AI总监
GPT-2生成《神奇宝贝》动漫台词
Ludicolo was a salsa master, he would teach Ash how to move like a god. He would make fun of Ash for being unable to move so quickly, and would even attack him for being weak.
代码医生工作室
2019/11/12
8370
开发 | Facebook开源 PyTorch版 fairseq,准确性最高、速度比循环神经网络快9倍
AI科技评论按:今年5月,FacebookAI研究院(FAIR)发表了他们的研究成果fairseq,在fairseq中,他们使用了一种新型的卷积神经网络来做语言翻译,比循环神经网络的速度快了9倍,而且准确性也是现有模型中最高的。此外,他们在GitHub公布了fair序列建模工具包的源代码和训练好的系统,其他的研究者可以在此基础上建立自己的关于翻译、文本总结和其他任务的模型。 详情可参见:快9倍!Facebook开源机器学习翻译项目fairseq 一文。 日前,FacebookAI研究团队又在GitHub上开
AI科技评论
2018/03/14
1.6K0
开发 | Facebook开源 PyTorch版 fairseq,准确性最高、速度比循环神经网络快9倍
PaddleNLP基于ERNIR3.0文本分类以中医疗搜索检索词意图分类(KUAKE-QIC)为例【多分类(单标签)】
相关项目链接: Paddlenlp之UIE模型实战实体抽取任务【打车数据、快递单】 Paddlenlp之UIE分类模型【以情感倾向分析新闻分类为例】含智能标注方案) 应用实践:分类模型大集成者[Pad
汀丶人工智能
2022/11/03
6220
PaddleNLP基于ERNIR3.0文本分类以中医疗搜索检索词意图分类(KUAKE-QIC)为例【多分类(单标签)】
本项目链接: PaddleNLP基于ERNIR3.0文本分类任务详解【多分类(单标签)】
汀丶人工智能
2022/12/21
6870
DeepSpeed结合Megatron-LM训练GPT2模型笔记(上)
本文基于DeepSpeedExamples仓库中给出的Megatron相关例子探索一下训练GPT2模型的流程。主要包含3个部分,第一个部分是基于原始的Megatron如何训练GPT2模型,第二个部分是如何结合DeepSpeed的特性进行训练Megatron GPT2,由于篇幅原因这篇文章只写了第一部分,主要是非常细致的记录了跑起来Megatron GPT2训练流程碰到的一些问题和如何解决的。本文主要以 https://github.com/microsoft/DeepSpeedExamples/tree/bdf8e59aede8c8e0577e8d4d557298ca8515268f 这里的codebase展开写作。
BBuf
2023/08/22
2.3K0
DeepSpeed结合Megatron-LM训练GPT2模型笔记(上)
做一个基于 chatterbot 的聊天机器人
基于以上几点,可用基于现有的一些算法来训练自己的模型,当然也可用通过开源的框架来搭建,下面我们就先来实践下基于开源框架的实现。
周萝卜
2019/07/17
5.9K0
做一个基于 chatterbot 的聊天机器人
Facebook开源PyTorch版本fairseq翻译模型,训练速度提高50%
【新智元导读】FAIR的开源序列到序列(sequence-to-sequence)引擎现在可以在PyTorch使用了。FAIR今天发布了fairseq-py,这是一个用PyTorch实现的卷积seq2seq模型。fairseq-py是语言翻译以及其他 seq2seq 的NLP任务的一个很好的模型,新的工具包比以前的更高效率:生成翻译的速度比以前的提高了80%,训练速度提高了50%。 今年5月10日,Facebook AI 研究实验室(FAIR)发布了一项使用创新性的、基于卷积神经网络的方法来进行语言翻译的最
新智元
2018/03/22
2.2K0
Facebook开源PyTorch版本fairseq翻译模型,训练速度提高50%
GitHub超1.5万星NLP团队热播教程:使用迁移学习构建顶尖会话AI
了解NLP的读者应该对Hugging Face这个名字非常熟悉了。他们制作了Transformers(GitHub超1.5万星)、neuralcoref、pytorch-pretrained-BigGAN等非常流行的模型。
新智元
2019/10/21
1.2K0
GitHub超1.5万星NLP团队热播教程:使用迁移学习构建顶尖会话AI
推荐阅读
相关推荐
【Github】GPT2-Chinese:中文的GPT2训练代码
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档