参考 文献 End-to-End Task-Completion Neural Dialogue Systems和 A User Simulator for Task-Completion Dialogues. 本文档描述了如何运行仿真和不同对话代理(基于规则,命令行,强化学习),更多代理和用户模拟设置方法在文献的Recipe章节。
所有的数据都存放在该文件下: ./src/deep_dialog/data
-
电影知识库
movie_kb.1k.p
: 94%(foruser_goals_first_turn_template_subsets.v1.p
)
movie_kb.v2.p
: 36%(foruser_goals_first_turn_template_subsets.v1.p
) -
用户目标
user_goals_first_turn_template.v2.p
--- user goals extracted from the first user turn
user_goals_first_turn_template.part.movie.v1.p
--- a subset of user goals [Please use this one, the upper bound success rate on movie_kb.1k.json is 0.9765.] -
NLG规则模板
dia_act_nl_pairs.v6.json
:用户模拟器和代理的一些预定义NLG规则模板 -
Intent分类
dia_acts.txt
-
Slot分类
slot_set.txt
--agt
:代理Id
--usr
: 用户(或模拟器)Id
--max_turn
: 对话最大轮数
--episodes
: 对话迭代次数
--slot_err_prob
: slot错分概率
--slot_err_mode
: slot错分为哪个mode
--intent_err_prob
: intent错分概率
--movie_kb_path
:代理方面电影的kb路径
--goal_file_path
: 用户目标路径
--dqn_hidden_size
: DQN代理隐藏层层数t
--batch_size
: DQN训练的batch大小
--simulation_epoch_size
: 每一次迭代,对话仿真次数
--warm_start
: use rule policy to fill the experience replay buffer at the beginning
--warm_start_epochs
: 热启动运行对话数量
--run_mode
: 0 (NL)运行模式; 1(Dia_Act)debug模式; 2(Dia_Act and NL)debug模式; 3(training或者predict)非运行模式
--act_level
: 0(Dia_Act级别用户模拟器); 1(NL级别用户模拟器)
--auto_suggest
: 0 (no auto_suggest); 1(auto_suggest)
--cmd_input_mode
: 0(输入方式NL); 1(输入方式Dia_Act). (这个参数只针对代理模式为AgentCmd模式时设置)
--write_model_dir
:写入模型的目录
--trained_model_path
: 训练RL代理模型的目录,也是预测时加载模型的目录.
--learning_phase
: train/test/all, 默认是all。拆分用户目标集为训练集和测试集,不要全部拆分; 我们引入一些随机因子,We introduce some randomness at the first sampled user action, even for the same user goal, the generated dialogue might be different.
主程序run.py
(1)初始化 Agent、User、NLU、NLG、对话管理DialogManager、对话参数设置。
(2)run_episodes()生成每轮对话,如果agt == 9 warm_start_simulation(),迭代episode_over, reward = dialog_manager.next_turn(),如果agt=9,没有trained_model_path,则训练网络模型并保存。
python run.py --agt 5(RequestBasicsAgent代理) --usr 1(使用模拟器) --max_turn 40
--episodes 150
--movie_kb_path ./deep_dialog/data/movie_kb.1k.p
--goal_file_path ./deep_dialog/data/user_goals_first_turn_template.part.movie.v1.p
--intent_err_prob 0.00
--slot_err_prob 0.00
--episodes 500
--act_level 0
NL输入
python run.py --agt 0(AgentCmd代理) --usr 1(使用模拟器) --max_turn 40
--episodes 150
--movie_kb_path ./deep_dialog/data/movie_kb.1k.p
--goal_file_path ./deep_dialog/data/user_goals_first_turn_template.part.movie.v1.p
--intent_err_prob 0.00
--slot_err_prob 0.00
--episodes 500
--act_level 0(Dia_Act级别用户模拟器)
--run_mode 0(NL)运行模式
--cmd_input_mode 0
Dia_Act输入
python run.py --agt 0(AgentCmd代理) --usr 1(使用模拟器) --max_turn 40
--episodes 150
--movie_kb_path ./deep_dialog/data/movie_kb.1k.p
--goal_file_path ./deep_dialog/data/user_goals_first_turn_template.part.movie.v1.p
--intent_err_prob 0.00
--slot_err_prob 0.00
--episodes 500
--act_level 0(Dia_Act级别用户模拟器)
--run_mode 0 (NL)运行模式
--cmd_input_mode 1
没有NLU和NLG模块训练End2End RL代理(NLU模块模拟噪声)
python run.py --agt 9(DQN代理) --usr 1(使用模拟器) --max_turn 40
--movie_kb_path ./deep_dialog/data/movie_kb.1k.p
--dqn_hidden_size 80
--experience_replay_pool_size 1000
--episodes 500
--simulation_epoch_size 100
--write_model_dir ./deep_dialog/checkpoints/rl_agent/
--run_mode 3 (training或者predict)非运行模式
--act_level 0(Dia_Act级别用户模拟器)
--slot_err_prob 0.00
--intent_err_prob 0.00
--batch_size 16
--goal_file_path ./deep_dialog/data/user_goals_first_turn_template.part.movie.v1.p
--warm_start 1
--warm_start_epochs 120
有NLU和NLG模块训练End2End RL代理
python run.py --agt 9 (DQN) --usr 1(使用模拟器) --max_turn 40
--movie_kb_path ./deep_dialog/data/movie_kb.1k.p
--dqn_hidden_size 80
--experience_replay_pool_size 1000
--episodes 500
--simulation_epoch_size 100
--write_model_dir ./deep_dialog/checkpoints/rl_agent/
--run_mode 3 (training或者predict)非运行模式
--act_level 1(NL级别用户模拟器)
--slot_err_prob 0.00
--intent_err_prob 0.00
--batch_size 16
--goal_file_path ./deep_dialog/data/user_goals_first_turn_template.part.movie.v1.p
--warm_start 1
--warm_start_epochs 120
基于N轮对话测试Rl代理:
python run.py --agt 9 (DQN)--usr 1(使用模拟器) --max_turn 40
--movie_kb_path ./deep_dialog/data/movie_kb.1k.p
--dqn_hidden_size 80(DQN隐藏层层数)
--experience_replay_pool_size 1000
--episodes 300
--simulation_epoch_size 100
--write_model_dir ./deep_dialog/checkpoints/rl_agent/
--slot_err_prob 0.00
--intent_err_prob 0.00
--batch_size 16
--goal_file_path ./deep_dialog/data/user_goals_first_turn_template.part.movie.v1.p
--trained_model_path ./deep_dialog/checkpoints/rl_agent/noe2e/agt_9_478_500_0.98000.p
--run_mode 3(training或者predict)非运行模式
为了评估代理的性能,三个重要指标:成功率、平均价值和平均轮数。
- 画学习曲线
python draw_learning_curve.py --result_file ./deep_dialog/checkpoints/rl_agent/noe2e/agt_9_performance_records.json
- 在Excel表格中画学习曲线
主要参考文献
@inproceedings{li2017end,
title={End-to-End Task-Completion Neural Dialogue Systems},
author={Li, Xuijun and Chen, Yun-Nung and Li, Lihong and Gao, Jianfeng and Celikyilmaz, Asli},
booktitle={Proceedings of The 8th International Joint Conference on Natural Language Processing},
year={2017}
}
@article{li2016user,
title={A User Simulator for Task-Completion Dialogues},
author={Li, Xiujun and Lipton, Zachary C and Dhingra, Bhuwan and Li, Lihong and Gao, Jianfeng and Chen, Yun-Nung},
journal={arXiv preprint arXiv:1612.05688},
year={2016}
}