基于代码库 TC-Bot 和论文端到端任务完成神经对话系统。该存储库是 TC-Bot 的简化版本,尽管不能直接比较,但它的准确度水平相似。
这展示了如何使用简单的用户模拟器将具有深度强化学习的简单 DQN 代理训练为面向目标的聊天机器人。该代码是 MiuLab 的 TC-Bot 的简化版本,主要区别在于该代码不包含 NLG 或 NLU 组件,而仅训练对话管理器。 NL 组件不需要了解 GO 聊天机器人如何使用 DRL 进行训练,因此未实现。
下面是 TC-Bot 论文中的图表,除了 LU 和 NLG 组件之外,与该项目中使用的对话流程类似:
除了删除 NL 之外,还对成功条件、DQN 代理优化器和其他一些细微更改进行了更改。因此,不应直接比较 TC-Bot 和此存储库之间的准确性。
该数据库是电影票的数据库,与 TC-Bot 中使用的数据库相同。数据的 pickle 和文本版本都可以在数据目录中看到。
可以在此处的 Medium 上找到详细描述和详细介绍此代码的 5 部分教程系列!
您可以使用python train.py
从头开始训练代理。
在constants.json中,您可以更改超参数,包括“save_weights_file_path”和“load_weights_file_path”(都是相对路径)以分别保存和加载权重。例如,要使用权重文件夹中的预训练权重,请将“load_weights_file_path”的值设置为“weights/model.h5”。每次当前成功率达到新高时,都会保存目标 (tar) 和行为 (beh) keras 模型的权重。
您还可以使用python test.py
测试代理。但请确保通过将constants.json中的“load_weights_file_path”设置为具有行为和目标权重的相对路径来加载权重。
除了代理下的“vanilla”之外,所有常量都非常不言自明,这意味着 DQN(真)或 Double DQN(假)。默认为普通 DQN。
注意:如果在训练或测试中出现 unpickling 错误,请运行python pickle_converter.py
,这应该可以修复它
您可以通过将 Constants.json 中 run 下的“usersim”设置为 false,以用户身份输入您自己的操作(而不是使用用户 sim)来测试代理。您可以在控制台中输入一个事件/对话的每个步骤的操作和成功指示符。操作输入的格式为:意图/通知槽/请求槽。
操作输入示例:
此外,控制台将询问代理是否成功的指示符(除了在剧集的初始操作输入之后)。允许的输入为 -1 表示失败,0 表示尚未结果,1 表示成功。
使用constants.json 中的超参数。
剧集表(每 2000 集,共 40000 集),按周期/列车频率(每 100 集)的最大成功率计算,直至该集: