如何使用GPT2中文闲聊对话系统,机器人对话,自动对话!

2023-10-29

目录

目录结构:

运行环境:

首次运行:

如何训练自己的模型:

数据预处理:

训练模型:

如何确定这个--val_num数值:

​编辑​编辑最后说明:


打算做一个微博自动评论的一个模型,假象可以模拟回复粉丝,或者评论其他微博。

首先下载GPT2模型代码:

https://github.com/yangjianxin1/GPT2-chitchat 代码版权归原作者所有。

解压下载好的zip,并用pycharm打开

 目录结构:

打开README.md文件里面说明了目录结构:

 对应着左边的目录结构:

说明:data下的train.txt、train.pkl;model下的epoch40;sample是训练和预测了之后才会出现的,在下载时并没有这些文件,训练和预测下面会说。

运行环境:

 文件的原始运行环境:

 我的运行环境:

 python的版本号为:3.9.7

说明:如果配置了源文本的运行环境一定是跑的出来的,当时我因为已经早就下载好了pytorch,所以我就直接下载transformer发现能运行的出来,代码能执行就是好的。

pytorch的下载参考网上的资源,挺多的帖子。

首次运行:

下载好作者训练好了的模型:

链接:https://pan.baidu.com/s/1wu1C0izDNGp0TL0A2cAdCw 
提取码:20m7

说明:我只采用了百度网盘的下载,你们跟着就好了。没有用GoogleDrive下载

将下载好了的模型放入model文件下如图:

执行代码:

 说明: 我用的是第一条命令行, interact.py是执行的文件, --no_cuda是用cpu来跑, model_epoch40_50w是上面下载好了的模型

在终端执行以下命令:

python interact.py --no_cuda --model_path model/model_epoch40_50w

 注意:--model_path 不能对着README.md照抄,路径是会报错的,我上面的命令和原始文件的命令是有一点区别的。

原始文件是--model_path model_epoch40_50w

而我的是--model_path model/model_epoch40_50w

 执行之后的效果为:点击图片放大查看效果!!!

如何训练自己的模型:

数据预处理:

 说明:将语料放入data目录下,语料的第一行是自己说,第二行是机器人回应以此交互。中间的空白行表示一次对话结束,进行下一次的语料训练。

不同的语料训练出来的对话结果不同,区别是使用者偏向使模型想要说出自己想要的语句。

这里我提供我自己微博上爬取的语料:

链接:https://pan.baidu.com/s/1wYdH0YWJqaMukULH60LLsw 
提取码:mcqb

训练模型:

说明先将:train.txt转换成train.pkl

在终端运行:

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

 运行结果:

 在data下生成了train.pkl文件

开始训练自己的模型:

在终端运行:

python train.py --epochs 40 --batch_size 8 --no_cuda --train_path data/train.pkl --pretrained_model model/model_epoch40_50w --val_num 11200

说明:--val_num 14000 这里的意思是将train.txt这个分为训练集:验证集=7:3

           --pretrained_model 是预训练模型

如何确定这个--val_num数值:

打开train.txt文件: 数据集一共有47874行,而我的这个数据集每一次对话只有两行,再加一次空白行,那么47874/3约为16000个数据,训练集:验证集 = 7:3  得出训练集为 16000*0.7 =  11200

 训练过程:


最后说明:

每一次运行完一个epoch都会保存到model下面,在预测的时候直接调用model下面最后一个epoch就行,有问题可以发评论,我看见且我看得懂的话就会,哈哈哈

对python感兴趣的同学可以加我

qq进行讨论,qq:3149452335  记得备注CSDN嗷

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用GPT2中文闲聊对话系统,机器人对话,自动对话! 的相关文章

  • 用于将 cython 中的许多 C++ 类包装到单个共享对象的项目结构

    我在文档 邮件列表和这个问题在这里 https stackoverflow com questions 10300660 cython and distutils 但我想得到一个更直接的答案来解决我的具体情况 我正在通过尝试一点一点地包装我
  • Django 代理模型的继承和多态性

    我正在开发一个我没有启动的 Django 项目 我面临着一个问题遗产 我有一个大模型 在示例中简化 称为MyModel这应该代表不同种类的物品 的所有实例对象MyModel应该具有相同的字段 但方法的行为根据项目类型的不同而有很大差异 到目
  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • 通过最小元素比较对 5 个元素进行排序

    我必须在 python 中使用元素之间的最小比较次数来建模对 5 个元素的列表进行排序的执行计划 除此之外 复杂性是无关紧要的 结果是一个对的列表 表示在另一时间对列表进行排序所需的比较 我知道有一种算法可以通过 7 次比较 总是在元素之间
  • PyUSB 1.0:NotImplementedError:此平台不支持或未实现操作

    我刚刚开始使用 pyusb 基本上我正在玩示例代码here https github com walac pyusb blob master docs tutorial rst 我使用的是 Windows 7 64 位 并从以下地址下载 z
  • 如何从网页中嵌入的 Tableau 图表中抓取工具提示值

    我试图弄清楚是否有一种方法以及如何使用 python 从网页中的 Tableau 嵌入图形中抓取工具提示值 以下是当用户将鼠标悬停在条形上时带有工具提示的图表示例 我从要从中抓取的原始网页中获取了此网址 https covid19 colo
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • 如何在ipywidget按钮中显示全文?

    我正在创建一个ipywidget带有一些文本的按钮 但按钮中未显示全文 我使用的代码如下 import ipywidgets as widgets from IPython display import display button wid
  • Pygame:有没有简单的方法可以找到按下的任何字母数字的字母/数字?

    我目前正在开发的游戏需要让人们以自己的名义在高分板上计时 我对如何处理按键有点熟悉 但我只处理过寻找特定的按键 有没有一种简单的方法可以按下任意键的字母 而不必执行以下操作 for event in pygame event get if
  • 在f字符串中转义字符[重复]

    这个问题在这里已经有答案了 我遇到了以下问题f string gt gt gt a hello how to print hello gt gt gt f a a gt gt gt f a File
  • 每个 X 具有多个 Y 值的 Python 散点图

    我正在尝试使用 Python 创建一个散点图 其中包含两个 X 类别 cat1 cat2 每个类别都有多个 Y 值 如果每个 X 值的 Y 值的数量相同 我可以使用以下代码使其工作 import numpy as np import mat
  • 对年龄列进行分组/分类

    我有一个数据框说df有一个柱子 Ages gt gt gt df Age 0 22 1 38 2 26 3 35 4 35 5 1 6 54 我想对这个年龄段进行分组并创建一个像这样的新专栏 If age gt 0 age lt 2 the
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • Python:如何将列表列表的元素转换为无向图?

    我有一个程序 可以检索 PubMed 出版物列表 并希望构建一个共同作者图 这意味着对于每篇文章 我想将每个作者 如果尚未存在 添加为顶点 并添加无向边 或增加每个合著者之间的权重 我设法编写了第一个程序 该程序检索每个出版物的作者列表 并
  • Rocket UniData/UniVerse:ODBC 无法分配足够的内存

    每当我尝试使用pyodbc连接到 Rocket UniData UniVerse 数据时我不断遇到错误 pyodbc Error 00000 00000 Rocket U2 U2ODBC 0302810 Unable to allocate
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我
  • NotImplementedError:无法将符号张量 (lstm_2/strided_slice:0) 转换为 numpy 数组。时间

    张量流版本 2 3 1 numpy 版本 1 20 在代码下面 define model model Sequential model add LSTM 50 activation relu input shape n steps n fe

随机推荐