(六)面向任务的对话系统实现-问询天气

以下内容总结自《自然语言处理实践与聊天机器人原理应用与实践》
本节主要介绍如何自主实现面向任务的对话系统,如算法 4-1 所示,整体流程由 4 个主要的模块构成,即 NLU、DST、DPL 和 NLG,伪代码的各行分别对各个主要模块的输入和输出进行了定义,例如 NLU 模块的输入为参数 sentence,输出为用户动作 userAct。算法4-1面向任务的对话系统整体流程
在这里插入图片描述
接下来将对 4 个主要模块分别进行详细描述,需要说明的是,我们仍然以「询问天气」为例演示任务对话系统的实现,并假设用户输入的 sentence 为「今天天气怎么样」。
我们已经知道 NLU 模块由意图识别和槽位填充构成,如算法 4-2 所示,在这里一般采用串行处理的方式,先进行意图识别,再利用意图识别的结果进行槽位填充。意图识别可采用分类算法进行具体的实现,如 SVM。在得到意图之后,槽位填充方法 slotFilling()首先需要获取意图对应的槽位定义,这里的「询问天气」定义了两个槽位,分别是「时间」和「地点」,然后可以采用序列标注法对槽位填充进行具体的实现,如 CRF。意图识别结果和槽位填充结果共同组成了 NLU 模块的输出 userAct。算法4-2NLU模块算法
在这里插入图片描述
DST 模块负责接收本轮的用户动作,并判断当前的对话状态。DST 模块在具体实现时认为对话状态同样是由意图和槽位构成的,读者可根据实际情况丰富对话状态的定义。当意图识别结果不为空时,即正确识别了用户意图时(采用概率的表示时为置信度较高的结果),意味着对话状态进入了一个新的有限状态自动机,即新一轮对话开始,因此对话状态会进行初始化,该示例中我们直接用第一轮对话得到的 userAct 对 dialogState 进行初始化。同时,读者会注意到算法 4-3 中有一个检查默认槽位设定的函数 checkDefaultSlot(),它的作用是对一些槽位进行默认或者个性化的填充。例如,某一用户的位置在上海,就可以将其询问天气的默认地点槽位个性化地设置为上海,这种设置方式符合人们日常的行为规律,也可有效地减少对话轮数,提高用户对该对话系统的使用体验。相反,如果意图识别结果为空,则有以下两种情况。(1)处于多轮对话中,意图和上一轮对话的意图相同。(2)无未完结的多轮对话,意图识别失败,置为 null。这种异常情况交由 getIntent()函数进行处理,该意图识别函数需要先考虑历史对话情况,再进行上述两种情况的判断。同时,当处于多轮对话状态时,槽位会被不断填充、更新,槽位更新的工作交由 updateDialogState()函数进行处理,即这个函数负责将本轮获取的槽位更新到整体的历史槽位中。DST模块算法在这里插入图片描述
DPL 模块根据当前的对话状态(dialogState)判断下一步的系统动作(systemAct)。如算法 4-4 所示,当对话的意图为「询问天气」时,我们按照算法 4-4 设计的有限状态自动机进行状态判断,分别执行「AskDate」、「AskLocation」和「AnswerWeather」3 项系统动作。其中,「AnswerWeather」为槽位填满时所执行的系统动作,这部分操作涉及与知识库的连接,并查询指定时间、地点的天气(getWeather()),我们将查询到的天气结果作为槽位填充到系统动作中。当意图为 null 时,系统抛出异常。此外,会话系统往往需要能够处理多项任务,因此可以设计其他意图对应的有限状态自动机并添加到「其他服务」的伪代码位置处。DPL模块算法
在这里插入图片描述
NLG 模块以套用 NLG 模板的方式实现,如算法 4-5 所示,每一个系统动作(systemAct)对应着一个自然语言表达,作为最后的系统回复输出给用户。这里,我们设计了 4 种系统动作对应的 NLG 模板。NLG模块算法
在这里插入图片描述
图 4-18 展示了以上任务对话系统实现后的效果,该示例中,时间、地点槽位均为空,因此系统分别进行了问询,读者可对应上述各模块的伪代码理解。图 4-19 展示了地点槽位为空的情况,系统因此只进行了一次问询。图 4-20 则应用了个性化技术,将地点槽位进行了个性化的默认填充,可以看出,这样的交互非常友善。图4-18系统显示1
在这里插入图片描述
图4-19系统显示2
在这里插入图片描述
图4-20系统展示3
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值