该存储库包含代码来开发聊天机器人,该聊天机器人可以采用16种Myers-Briggs个性类型之一。
聊天机器人使用属于相应的子reddit的帖子和评论对每个个性进行微调(例如, INFJ类型的R/INFJ)。
reddit_scraper.py包含脚本以刮擦给定的子reddit。要执行它,您首先需要一个MySQL数据库的实例。您还需要与Reddit帐户和MySQL数据库关联的一些参数:按照config.example.py的架构,所有这些都需要插入config.py文件中。
该脚本将首先将所有帖子加载在名为posts的表中,然后将其注释在称为comments的表中加载。尽管已应用并行化,但第二部分将需要数小时。这就是为什么,一旦您下载了通过主脚本(〜20分钟)感兴趣的帖子,则可以使用脚本comments_scraper.py下载关联的注释。如果您中断它,下次运行它时,脚本将从您离开的位置开始。
为了训练该模型,我首先将数据报告为conversational dataset format ,即具有以下结构的CSV表。
| ID | 回复 | 语境 | 上下文/0 | ... | 上下文/n |
|---|---|---|---|---|---|
| S892NN | 我很好 | 没关系。你呢? | 生活怎么样? | ... | 你好! |
在这里,上下文/n代表对话的开头,转到最近的交流(在上下文/0 ,上下文和响应中显示,这是对话中的最新句子)。可以通过覆盖config.py文件中的NUMBER_OF_CONTEXTS参数来更改上下文的基数。
脚本create_conversational_dataset.py从在刮擦阶段创建的SQL表开始生成CSV,将其保存到数据文件夹中的泡菜文件中。对话是由帖子和其直接评论之一或帖子,评论及其评论链进行的。
脚本的执行是并行化的,因此它在n个不同的csvs上写入 - n,具体取决于NUMBER_OF_PROCESSES参数 - 最终被串联以创建所得的泡菜文件。
笔记本training.py包含对话数据上对话DialoGPT-medium语言模型的微调,并且主要是您在this notebook中可以找到的代码的改编。
执行demo.py将开始对话。
要在呼吸道中运行所有代码,您可以创建一个虚拟环境并运行以下命令。
virtualenv venv
source ./venv/bin/activate
pip install -r requirements.txt