任务型多轮对话系统概述

主要模块

任务型机器人核心模块主要包括三个模块:

  • 自然语言理解模块(NLU)
  • 对话管理模块
  • 自然语言生成模块(NLG)

img

自然语言理解模块

该模块一般包含以下三个模块:

  • 领域识别:即识别该语句是不是属于这个任务场景,一般有多个机器人集成时,如闲聊机器人,问答机器人等,领域识别应当在进入任务型机器人之前做判断与分发
  • 意图识别:即识别用户意图,细分该任务型场景下的子场景、
  • 语义槽填充:用于对话管理模块的输入

举例

假设Text=“人民币对美元的汇率是多少”;经过自然语言理解模块会解析为 act ( slot1 = value1, slot2 = value2 ……) 的形式,即意图,槽位,槽位信息三元组形式,即 Text会解析为“查询(槽位1=人民币,槽位2=美元)”这样的形式。

方法

基于规则理解方法

【优点】

  • 不需要大量训练数据

【缺点】

  • 容易出错
  • 调整规则费时费力,难以维护
统计方法(对齐)

基于词对齐数据的自然语言理解通常被看做一个序列标注问题。主要有以下两类方法:

  • 基于生成式模型
    • 随机有限状态机(FST)
    • 统计机器翻译(SMT)
    • 动态贝叶斯网络(DBN)
  • 基于判别式模型
    • CRF
    • SVM
    • MEMM
深度学习
  • BiLSTM+CRF
  • CNN:用于序列标注
  • Seq2Seq

对话管理模块

自然语言理解模块的三元组输出将作为对话管理系统的输入。它主要包括两部分:

  • 状态追踪模块
  • 对话策略模块

【状态追踪模块】

该模块在对话的每一轮次对用户的目标进行预估,管理每个回合的输入和对话历史,输出当前对话状态。

img

【对话策略模块】

该模块的主要功能是根据前面的对话状态决策采取的最优动作(如:提供结果,询问特定限制条件,澄清或确认需求等)从而最有效的辅助用户完成信息或服务获取的任务。该模块基于用户输入的语义表达和当前对话状态输出下一步的系统行为和更新的对话状态。

举例

text=“人民币对美元的汇率是多少”。“查询(槽位1=人民币,槽位2=美元)”这样的形式将作为对话管理模块的输入,这时候状态追踪模块就要根据前几轮的信息,结合该输入判断该轮的查询状态,确定查询的槽位,以及与数据库的交互。如得到想要查询的确实是人民币对美元的汇率信息。这时候,根据现有的对话策略判断当前的槽位状态,最后给出对话管理模块的输出,如查询结果(源货币=人民币,目标货币=美元,汇率=1:0.16)

自然语言生成模块

该模块主要任务是将对话策略输出的语义表达生成流畅可读的自然语言句子,反馈给用户。