我正在使用 Q-Learning 来训练基于 MDP 的表单填写对话管理器。现在它在一个近乎玩具的设置中运行,共有 210 个状态(通常对应于表单填写进度)和 6 个可用操作(例如问候、询问信息、确认信息)。
学习本质上是一个简单的用户模拟器的反复试验,该模拟器可以回答代理的请求(确定性地,没有错误)。自己亲手制作的奖励函数,每轮对话只有-1(如果没有其他适用),填表进度(槽值填写/确认)+1,达到目标+1000,打招呼-1000不合时机。我使用 PyBrain RL 框架来实现。
所以,问题是,在一般的 100000 次交互集之后,Q-Learning 似乎没有找到最优策略。在学习之后,它的行为有些欠佳,随机进行 -1 动作并避免 -1000 的主要痛苦,但在成功对话结束时追求 1000 的奖励似乎无济于事。
对于 1-slot 形式的情况,完美的动作奖励序列是:
greet -1 --> askSlotValue -1 --> fillSlot +1 --> askConfirmation -1 --> confirmSlot +1 --> quitDialogue +1000。
那么,在这种情况下,为了实际获得最优策略,我应该学习什么?我是要以某种方式调整奖励功能,还是改用预先编写好的对话来学习?
我相信即使是基于模拟的基本试错方法也可以处理这种规模的问题。合理吗?