【NanoGPT】训练写唐诗的AI机器人
大家好,我是千与千寻,好久不见,每次在酝酿文章标题的时候,经常会借鉴一下ChatGPT大模型的意见。
ChatGPT的功能固然好用,但是我觉得有一个小缺点,就是反应的时间比较慢,原因是GPT-3.5/GPT-4.0的模型体积较大,比较占用内存空间。
同时大模型的运行实际上是在国外的主机上,在一定程度上网络传输也消耗时间。
今天给大家带来的项目是NanoGPT模型,可以理解为MinGPT模型的重写矿机,但是比MinGPT模型的体积更小,性能更好!

我们今天手动复现一下NanoGPT模型,可能说到现在,你可能有些一头雾水,千寻哥到底要做什么?
放心,程序员同行之间禁止废话
NanoGPT可以简单理解为构建ChatGPT的框架,我今天带领大家手把手使用NanoGPT框架,训练一个微型的ChatGPT,GPT的全称是“Generative Pre-trained Transformer”,就是文本预训练的生成模型。
NanoGPT代码地址:https://github.com/karpathy/nanoGPT
我们首先复现官方的Demo,训练一个在莎士比亚的作品上训练一个角色级别的GPT。
首先,我们将其下载莎士比亚的戏剧文本作为训练模型的数据集。
1、莎士比亚戏剧数据集的部分文本内容:
2、将训练数据集从原始文本(.txt)转换为一个大的整数流(.bin)
操作中,将数据集进行划分90%用于GPT模型的训练,10%的数据用于GPT模型在训练过程中的验证。
3、进行模型训练之前,进行训练环境的依赖包的安装
按照以上的指令,逐一安装就好。
4、配置模型训练的超参数
以上列举了部分超参数的设定,所谓“超参数”是深度学习上的一个术语。
超参数是指,无明确要求设定,无法精确选择的参数设定,比如,训练次数,可能训练100轮达到最优,也可能训练500轮达到最优效果。
所以综上所述,训练次数就是一个超参数。
5、进行模型训练,执行训练命令
部分训练截图:

6、进行模型的推理,进行莎士比亚戏剧的续写创作,检验效果,执行预测指令;

好的,本次分享到此结束。
什么?结束了?这可能吗?当然是不可能得了。
稚晖君曾说:我希望我每一次做的项目,都是迄今为止最复杂的项目。
向稚晖君学习,我自己也是这么学过来的,我在官方Demo的基础之上,做了一个使用NanoGPT训练一个写唐诗的机器人模型。
原有模型使用的莎士比亚的戏剧数据集,写唐诗机器人,自然而然需要使用唐诗的文本数据,那么怎么做呢?
经过多方调研,我找到了一个不错的唐诗,宋词数据的下载资源地址:
https://github.com/chinese-poetry/chinese-poetry

这个数据集里面包含搜集到的唐诗,宋词,元曲小说文本数据。
1、数据集中整理出具体的唐诗文本数据,在这里我们需要进行数据的预处理

存储形式:Json字符串形式存储,以python的字典形式进行存储。
我们需要把它进行处理为之前莎士比亚戏剧那种的文本txt文件。
编写核心处理的python代码:
处理之后的唐诗数据集格式存储如下所示:

同样进行文本数据的转换,执行转化命令,替换数据集读取路径:
执行官方Demo的预处理命令。完成唐诗数据集的预处理操作。
2、训练撰写唐诗的神经网络模型,修改配置如下,config文件夹下,新建gu_char.py代码文件
训练中显卡显存占用:

3、使用RTX 2080Ti 训练大概20分钟,完成模型训练。模型训练的最终loss损失。

4、唐诗生成效果检验
可以看出,模型训练的loss还算可以,用来进行样本的唐诗生成效果检验。
生成古诗样本1:

生成古诗样本2:

怎么样,生成的效果感觉还是不错的吧!还可以更换数据集,比如使用NanoGPT训练一个生成宋词,或者小说的生成器,效果也很酷炫!
现在已经是深夜凌晨了,这篇文章,写了太久太久,各位读者一定点个赞!
我是千与千寻,一个只讲干活的码农!我们下期再见~
