论文:ITERATIVE POLICY LEARNING IN END-TO-END TRAINABLE TASK-ORIENTED NEURAL DIALOG MODELS
贡献:
- 构建Dialog agent 和 user simulator 联合建模训练的方法。
- 可以与KB交互
- 端到端的训练,槽位提取等都建模进去
见解可优化地方:
- 更符合应用到检索领域,领域有限
- 槽位、动作等都是固定的,迁移性不太好
- 用户目标是固定的,但是现实往往是在对话过程中是动态的
简述:
本文提出了一个端到端任务的对话系统,将Dialog agent 和 user simulator 联合建模,对话策略迭代的优化的深度强化学习框架。
dialog agent:
模型结构图如下
端到端的LSTM 模型
dialog agent干的事:
- 对话状态跟踪
- 向知识库发出API调用
- 得到对话一致的系统动作
- 根据查询结果进行响应
模型输入,k轮中:
- 上一个agent 输出编码
- 用户输出编码
- KB 检索结果
- 上一个agent 状态
模型输出:
- 最新agent状态
- 系统动作
- belief state估计,类似于状态估计
- KB搜索结果实体的指针
- 最终送到NLG生成回应
Utterance Encoding:
用双向LSTM 进行编码,为双向的级联。
Action Modeling:
根据当前的状态
Belief Tracking:
类似于对话跟踪,持续跟踪用户的目标。用户目标用一系列的槽位值来表达。本部分建模概率分布
KB Operation:
Dialog agent 可以发出API调用与KB或数据库交互来访问外部信息。将API调用认为是agent生成的对话行为。首先生成API调用命令模板,将slot 部分可以用slot token 标识,然后用Belief Tracking中的槽位值进行补全。
第k轮中,KB输入encode
Response Generation:
采用模板的NLG模块(输入系统动作、槽位值、KB entity 值)
user simulator:
模型结构如下图:
在对话开始,采样一个随机的用户目标。
模型输入:
- 用户目标编码
- 上一个用户输出
- 当前轮系统输出
- 上一个用户状态
输出侧:
- 更新当前状态
- 根据当前状态,更新当前动作
,(用户动作定义是更细粒度的“req_addr”)
- 根据用户动作,和用户状态输出一系列的槽位值
(Area slot/Food slot)
- 最终将用户动作和一系列的槽位值输入NLG中,得到
用户目标:
- treat informable slot as discrete type of inputs that can take multiple values,
- treat requestable slots as inputs that take binary values (i.e. a slot is either requested or not).
Action Selection:
与dialog agent 类似:
每个informable slot 是由当前动作和状态共同决定的:
强化学习策略优化
模型结构:
在预训练之后进行的
采用策略梯度算法(policy gradient),定义:state, action, reward。
state:user simulator 和dialog agent的 dialog-level级别的状态
action: user simulator 和dialog agent的 动作
reward:回报函数,
Policy Gradient
RL采用策略梯度算法(policy gradient),优于Q-learning,因为策略函数的网络参数可以天然的用
对于Dialog agent 部分策略梯度:
对于user simulator部分:
不过这里存在潜在问题是,策略梯度优化可能具有很高的方差,因为agent在对话过程中会产生多轮。采用A2C算法,使用一个前馈神经网络来近似一个State-value function。
在模型训练过程中,我们对Dialog agent 和user simulator 都使用
实验:
数据集:
采用的是 Dialog State Tracking Challenge (DSTC2)
调整数据集到需要的格式,增加了API call commands和对应的KB 查询,user simulator 就是基于真实的KB查询结果,这样会使得agent 更接近于实际应用的情况。
动作采用真实动作,也就是 "confirm_food"这种更细粒度的格式(而不是像“confirm(food = italian)” 这种将动作类型和槽位剥离的情况)。
训练过程:
在监督预训练阶段,dialog agent 和 user simulator 分别针对各自对话语料库进行训练。这两个模型参数是一致的。dialog-level LSTM 和 utterance-level LSTM 都设置为150。优化器用Adam。初始化学习率1e-3,dropout=0.5.
在RL训练阶段,policy network parameters用有监督训练得到的参数初始化。A2C中的State-value function 参数是随机初始化的。
为了改善联合训练的非平稳性(non-stationarity)问题,在RL训练中,迭代的更新两个agent。以100个episodes 作为一个RL训练周期,此时固定一个agent,只更新另一个agent,并在下一个周期切换训练,直到收敛。
在对话模拟中,如果对话长度超过最大轮数(实验中为20轮),或者用户模拟器发出对话结束动作,则结束对话。
结果与分析:
评估系统的任务成功率、平均奖励值和平均对话长度。
如果agent的belief tracking 输出完全匹配用户目标 informable 的 slot 值,并且所有用户目标中的 requestable slot 都已完成,则认为对话成功。
本文的Dialog Agent 和user simulator 都是端到端的模型,以带有噪声的utterance为输入,直接生成最终的Dialog act 输出。
没有在user simulator 上使用贪婪策略,采用
REINFORCE-joint 的 平均 回报比 A2C-joint 要高,REINFORCE-joint 在失败对话中获得奖励的表现更好。使用A2C训练的user simulator 的 softmax 的概率分布更尖锐,这会导致但凡陷入错误状态时,比较难跳出来。