Pydial使用方法简介
引言
Pydial是什么
作为一个基于Python的开源对话实验环境,剑桥的Pydial项目集成了从语音识别到自然语言生成、用户模拟的一系列基础设施。通过自行编写对应的模块实现相关的端口,可以较为轻松地将想法落地并测试其性能。
几个使用Pydial的理由
- 端到端的全套基础设施
- 完善的benchmark(HDC、GP、DQN等)
- 存在一些使用该工具的论文(可对比)
- 较为完善的日志系统(方便调试复盘)
相关资料
本文希望作为官方文档的精简和补充,能使读者基本了解、正确使用Pydial默认功能并学会添加自己编写的策略模块。
更多相关信息可参考下述内容:
如何安装
环境准备
- 操作系统:linux
- windows环境下由于tensorflow不可用(windows下tf只有Python3版本的,但Pydial使用Python2语法),故dqn等模块不可用会很麻烦
- 从下载地址克隆或下载项目
- Python:2.7
- 推荐使用conda建立虚拟环境(搜索引擎找conda python2.7即可)
- 安装pip(conda应该直接能用)
- 在pydial的根目录下调用
pip install -r requirements.txt --user
pip install matplotlib pandas --user
(或者其他提示错误的包,由于requirement里并没有覆盖所有使用到的包,所以如果使用某个特定模块时发现缺少的话再装即可)
- 在项目目录下输入
python2 pydial.py
若输出usage则证明一切正常可以开始使用了
- 如果需要经常使用可在bin添加软链接(不推荐)
chmod 700 pydial.py
sudo ln -s [pydial.py绝对路径] /usr/local/bin/pydial
- 结束后课直接通过
pydial
代替python2 pydial.py
使用对应功能
- 如果模块引用报错
- 目前在ubuntu18.04上发现部分文件绝对引用会出问题(原因不明),加了PYTHONPATH也没用。目前可行的处理方法是将报错的模块:
- 第一行通过
from __future__ import absolute_import
声明使用绝对import - 后面所有涉及到的相对import改为绝对的格式
- 第一行通过
- 目前在ubuntu18.04上发现部分文件绝对引用会出问题(原因不明),加了PYTHONPATH也没用。目前可行的处理方法是将报错的模块:
如何使用
关于shell中的调用语法
Pydial的使用语法默认为python2 pydial.py COMMAND ARGS
或pydial COMMAND ARGS
(若设置了软链接)
原理是其使用的Scriptine模块会把COMMAND对应到代码里COMMAND_command
的对应全局函数下,并把ARGS
传到函数的对应参数里。
关于config
在启动pydial进行测试或训练时,为了设置运行时使用的参数,pydial提供了config文件和命令行参数两套机制。从优先级角度讲即:命令行参数 > 文件中参数 > 默认参数。高优先级的设置会覆盖低优先级。
每次运行的最终实际参数会生成新的config文件放到临时目录(带下划线的目录)里。
配置文件不会改的话,可以去查config/OPTIONS.cfg
,其备注中有每个选项的详细说明。
如何测试直接交互
pydial chat config/Tut-hdc-CamInfo.cfg
开启一个自然语言的规则policy的直接交互。
在Pydial内除了用自然语言对话外,更多的会采用Dialogue Act对话(具体格式参加官方文档),实际测试自己的policy时更多的会采用这种方法。
如何进行训练
pydial train config/[some config]
即可开始训练,训练的结果将保存在临时目录(带下划线的目录)里。
目录下下划线开头的文件夹都是运行产生的结果(包含运行记录和结果数据)。
关于日志
根据使用的config中logger的设置不同,显示在终端里和存在文件中的内容也会不同:
注意:logger等级分为debug, info, warning, error, 额外有dial和result。用法是
-
utils.ContextLogger.getLogger('')
获取logger logger.dial("xxx")
(dial可替换成其他logger等级)- config中设置dial(25)级别可以看到具体的对话Act内容
- config中设置result(35)级别只会显示train和evaluation的结果(也就是绘图用到的数据,成功率,平均轮数,平均reward等等)
如何对训练结果绘图
pydial plot [记录相关文件夹]/*train*
通配符选中文件,每个文件会变成图中一条线;带train的和带eval的会自动分开。
如何修改
如何增加一个新的Pydial命令
- 在
pydial.py
里面def一个xxx_command
的函数(scriptine的用法)
如何增加一个新的Policy
-
【参考材料】下文中对应代码左侧资料中
- 在extension的policy里添加一个
XXXPolicy.py
的文件- 模板参见
ParrotPolicy.py
, 至少需要继承nextAction
方法
- 模板参见
- 在extension的config文件夹下添加一个
XXX.cfg
的文件- 模板参见
parrotPolicy.cfg
(Tutorial会教写),需要修改policy相关字段
- 模板参见
- 通过
python2 pydial.py chat config/XXX.cfg
测试你的policy - Belief State和System Acts的格式参见上面的参考资料
附:代码逻辑简要分析
以调用chat_command为例,整个运行过程大致如下: