通过微调GPT-2我自己的聊天机器人介绍什么是rinna流程让我们谈谈模型结论
(2022 年 2 月 20 日更新)
简介
在这篇文章中,我将对 GPT-2 进行微调,尤其是 rinna 的,它是日本 GPT-2 模型之一。我是日本人,我的大部分聊天记录都是日文的。因此,我将微调“日语”GPT-2。
GPT-2 代表 Generative pre-trained transformer 2,它生成句子,如名称所示。我们可以通过使用少量训练数据微调预训练模型来构建聊天机器人。
我不会详细介绍 GPT-2。我强烈推荐 dev.to 上的文章How to Build an AI Text Generator: Text Generation with a GPT-2 Model以了解什么是 GPT-2 以及什么是语言模型。
git 仓库:聊天机器人_with_gpt2
我将感谢以下两篇文章的作者。
-
我尝试用 GPT-2 复制和与朋友互动
-
如何构建 AI 文本生成器:使用 GPT-2 模型生成文本
感谢第一作者,我可以构建我的聊天机器人模型。我的 git 存储库中的源代码几乎都是用他的代码构建的。我只是总结了它们。感谢第二作者,我可以通过 GPT-2。
什么是rinna
rinna 是 rinna Co., Ltd. 提供的会话预训练模型,2022 年 2 月 19 日在拥抱脸[rinna Co., Ltd.] 上提供了五个预训练模型。 rinna 有点在日本很有名,因为他们在日本最受欢迎的 SNS 应用程序之一 LINE 上发布了 rinna AI。她是一名初中女生。我们可以在 LINE 上进行对话。
我不确定模型什么时候发布在拥抱脸上,但无论如何,模型现在都可以买到。我会微调参数个数较少的rinna/japanese-gpt2-small
。顺便说一句,我想用rinna/japanese-gpt-1b
,它的参数个数在十亿左右,但由于google colab的内存容量,我不能。
进程
我假设您有一个 google 和 git 帐户,并且可以使用 google colab。
此外,我将使用 LINE 上的聊天记录。如果您在该应用程序上没有帐户,那没关系。您所要做的就是准备聊天记录并修改数据。我知道这些过程是最困难和最烦人的事情。如果您拥有该帐户,则以下过程将起作用。请注意,如果您的 LINE 设置语言是日语,则应将其更改为英语,直到导出聊天记录为止,因为以下过程假设设置语言(不是消息语言)为英语。
准备环境
在此过程结束时,您的谷歌驱动器构建如下。
MyDrive ---- chatbot_with_gpt2.ipynb
|
|- config
| |- general_config.yaml
|
|- data
|- chat_history.txt
进入全屏模式 退出全屏模式
- 1:在本地机器上克隆聊天机器人_with_gpt2存储库。
它是通过在 git bash 上运行以下命令来完成的。
git clone https://github.com/ksk0629/chatbot_with_gpt2
进入全屏模式 退出全屏模式
-
2:上传
chatbot_with_gpt2/chatbot_with_gpt2.ipynb
到google驱动。 -
3:在你的 google 驱动器上创建一个名为
config
的目录,并在 config 文件夹中创建general_config.yaml
。
general_config.yaml
如下。
github:
username: your_github_username
email: your_email
token: your_access_token
ngrok:
token: anything
进入全屏模式 退出全屏模式
ngrok
块是不需要的,但需要它来避免下面的错误。
- 4:从LINE获取聊天记录。
我们可以按照官方公告[【帮助中心-聊天记录](https://help.line.me/line/android/?contentId=20007388#:~:text=1.,want%20to%20send%20the%20file.)\】获取历史记录。
- 5:在你的 google 驱动器上创建一个名为
data
的目录,并将聊天记录移动到该目录。
准备训练数据并建立模型
-
1:在google colaboratory上打开
chatbot_with_gpt2.ipynb
。 -
2:运行准备块中的单元格。
环境已准备好通过运行单元获取训练数据并构建模型。
- 3:更改
chatbot_with_gpt2/pre_processor_config.yaml
。
初始 yaml 文件如下。
line:
initial:
input_username: "input_username"
output_username: "output_username"
target_year_list: "[2016,2017,2018,2019,2020,2021,2022]"
path:
input_path: "/content/gdrive/MyDrive/data/chat_history.txt"
output_path: "chat_history_cleaned.pk"
进入全屏模式 退出全屏模式
您必须至少更改初始块。每一行的含义如下。
-
input_username:要输入到模型中的消息的用户名
-
output_username:您希望模型输出的消息的用户名
-
target\year\list:你想用来训练模型的年份
-
input_path:原始聊天记录的路径
-
output_path:经过以下过程得到的清洗后数据的路径
请注意,如果您不更改 output_path,则关闭笔记本后您的训练数据将不可用。当然,它在笔记本工作时可用。
- 4:运行预处理数据块中的单元格。
数据在单元格中被清理。
- 5:改变
chatbot_with_gpt2/model_config.yaml
。
初始 yaml 文件如下。
general:
basemodel: "rinna/japanese-gpt2-xsmall"
dataset:
input_path: "chat_history_cleaned.pk"
output_path: "gpt2_train_data.txt"
train:
epochs: 10
save_steps: 10000
save_total_limit: 3
per_device_train_batch_size: 1
per_device_eval_batch_size: 1
output_dir: "model/default"
use_fast_tokenizer: False
进入全屏模式 退出全屏模式
您必须将数据集块中的 input_path 更改为已清理数据的路径,该路径在pre_processor_config.yaml
中指定。您可以将 basemodel 更改为 rinna/japanese-gpt2-small,但其他(中型和 1b)由于缺少 GPU 内存而无法工作,正如我在什么是 rinna 部分中提到的那样。
- 6:运行训练数据准备和构建模型块中的单元格。
就这些!运行此单元后,您所要做的就是等待一段时间。您将在model_config.yaml
中指定的目录中看到您的模型文件。
聊聊模特
同样,您所要做的就是在 Talking with the model 块中运行唯一的一个单元格。然后,源代码正在运行,您可以与模型对话,如下所示。
结论
我用我在 LINE 上的聊天记录对 GPT-2 进行了微调。我当然做到了,但是您可以在“让我们谈谈模型”部分中看到以下问题。
-
每次对话都有多余的一行
Setting 'pad_token_id' to 'eos_token_id':2 for open-end generation.
。 -
有一些记号,如
<br:
、[<unk>hoto]<br///
和<br/ゥ>
,会扰乱连贯的句子。 -
模型回复不好。
第一反应
帰ったんか
おつかれさま!
进入全屏模式 退出全屏模式
看起来相当不错,因为“おっす”的意思是“嘿”,而回复的意思是“你在家。你必须筋疲力尽”。像这样的东西。但其他人看起来不对劲。为了改进模型,我可以更多地清理训练数据,并且我需要了解 GPT-2 和源代码。
如果您对本文有任何建议、意见或问题,请在下方发表评论。我会很感激的。
更多推荐
所有评论(0)