littleRound 小园香径 - lxy的个人博客

Pydial使用方法简介

2019-01-25
littleRound

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也没用。目前可行的处理方法是将报错的模块:
      1. 第一行通过from __future__ import absolute_import声明使用绝对import
      2. 后面所有涉及到的相对import改为绝对的格式

如何使用

关于shell中的调用语法

Pydial的使用语法默认为python2 pydial.py COMMAND ARGSpydial 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命令

如何增加一个新的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为例,整个运行过程大致如下:

logic


相关文章

评论区(DISQUS)