Dialog System and Chatbots —— DA学习笔记4

二、对话状态:解释对话行为

对话状态包括到当时节点为止框架的整个状态,需要总结用户的整体限制条件(constraint)

对于如何判断用户的输入是一个question、statement还是一个suggest,一个稍简单的方法是对于yes-no类问题可使用语法原则aux-inversion(即助动词出现在主语之前多为yes-no类问题),但是对于用yes-no问题包装起来的请求(一种较为polite的说法)使之表面上看起来像个question但实质上是一个quest,同时也存在用statement包装起来的question的情况,如check问题,这些都属于是非直接的speech act。上述这些是属于确定对话行为的function的问题。有一种解决方式是利用语音输入时的语调来进行辅助判断


1. 对话行为解释算法

一般来说,对话行为检测和填槽操作是联合在一起进行操作的。一个对话行为解释算法首先用一个分类器来确定句子的function到底是什么,是一个监督分类问题,训练语料的特征包含很多unigram和bigram特征、语调特征、标点符号特征、对话上下文等。第二个分类器是用于决定那个slot需要填,如用CRF或者基于IOB标签的RNN算法。同时,由于问题域已经确定,所以slot-value对的数量是有限的,因此也可以使用多分类算法。


总体来说,对话行为解释算法是由两个分类器组成,可以使用传统的多分类模型(如LR、SVM等),如果训练数据较为充分,也可使用端到端神经网络模型。


2. Detecting correction acts

有一些用户输入是非常重要的,对于这类输入如果对话系统理解错误,用户会通过重述来纠正错误,这种操作叫correction act。对话系统很有必要来对这类correction act进行检测。但是通常这类act很难检测出来!!虽然可以从用户输入的语调上提取出一些特征,但是这样同时会使一些非correction act的输入误判。这类correction act的特点是:要么完全重复,要么在原话的基础上省略几个词。对于这类act的检测可以用分类器,一些常用的特征如lexical特征、语义特征、语音特征、语调特征等。


三、对话策略(即基于整个对话状态来决定给用户回复什么)

1.生成对话行为:确认或者拒绝

需要对用户输入的解释正确性进行确认,通常有两种方法:跟用户确认一下理解是否正确(confirming)和拒绝(rejecting)。rejecting就是回复比如说“没听明白”这类的东西。


对于第一种方法(confirming),可以用显性确认策略,就是系统直接用一个yes-no类的问题对用户进行提问。比如U说I'm leaving from Baltimore. 然后A就说Let's see then. I have you leaving from Baltimore. Is that correct? 也可以用隐性的确认策略,如在接下来的提问中重复一下系统对刚才对话的解释。比如U: I want to travel to Berlin. A: When do you want to travel to Berlin?

这两种方法各有利弊,显性确认策略可使用户更方便地纠正系统的误理解,因为用户可以直接回复一个yes或者no来进行确认,但这种方法比较尬,不自然,而且增加了对话的长度。隐性确认更加自然一些。


另一种方法(rejecting),即类似于I'm sorry, I didn't understand you.这类的回复。当系统拒绝用户输入是,通常跟着一个需要确认detail的问题,一个更加detail的问题,类似于是一个guide,告诉用户明确回答什么。或者用一种rapid reprompting的方式,就是直接说"I'm sorry?"或者"What was that?",用户一般对这种说法比较接受。


可以用很多特征来决定是用显性确认、隐性确认策略还是拒绝来回复用户,如ASR系统中的置信度或cost of making an error,设几个阈值来确定各个回复策略的边界。


2. 一个simple policy

对于整个对话状态的跟踪,可以直接简单地将用户输入的slot-fillers都结合到一起,然后训练一个分类器来得出概率。但是这种需要积累大量用户数据,这是非常困难的!!


3.MDP

前边说的方法是只基于过去的对话内容,完全忽略了所进行的action是否会带来成功的outcome(对于基于task的对话系统来说,就是指订票成功等行为),但是只有在经历了较多轮对话之后才能知道是不是一个成功的outcome。对于这种情况,可以用RL来解决,RL意在是future reward最大化。马可洛夫决策过程就是其中非常基础的部分。


在对话系统环境下的MDP,我们假设一个状态集S,表示agent可采取的对话状态,动作集A表示agent可采取的对话行为,回报r(a,s)表示agent在一个状态s中采取行为a获得的回报,通过使回报最大化来确定应该给用户反馈什么。这里的动作集中包含诸如speech act、查询数据库、询问问题、终止对话等行为。


原则上,一个MDP的状态可包含对话的任何可能的信息,如整个对话历史,但是这样会使可能的对话状态数量变得特别特别多,为了简化,可采用一些和最近相关的行为,如当前对话行为的slot值、最近问用户的一个问题、ASR置信度等。比如对于Day-and-Month这个问题来说,一共有411个状态,其中包含既有月又有日的状态(366个)、只含月的状态(12个)、只含日的状态(31个)、一个初始状态再加上一个最终的状态。需要明确用户的目标是什么,然后最有效地完成该目标(轮数少、错误少),确定回报函数。


一个directive的行为不易出错,但是对话进度较慢,一个稍open-prompt的问题虽然轮数少,但是容易出错。因此,最佳的策略需要依回报函数中的各个权重w和ASR组件的错误率来决定。如何计算一个给定状态序列的期望回报?可以用discounted rewards,就是对各个状态的回报加权衰减进行累加,引入一个值为0~1之间的衰减因子,是agent更关注当前的回报而不是future回报。用这个discounted reward构成的Bellman equation,可以计算任意状态任意动作的期望累积回报。Bellman equation的含义是,一个给定状态/行为对的期望累计回报Q(s,a),等于当前状态的回报 + 所有可能的下个状态、下个动作的回报的衰减期望之和。可用value iteration算法来计算Bellman equation并确定合适的Q值。


MDP只对很小的example上有用,在现实的对话系统中没有直接用这个的,一般都是用POMDP。在POMDP中,加入了隐变量来表示对真实对话状态的不确定性。对于MDP和POMDP来说,都存在计算复杂度的问题,因为各种状态的获得都是靠模拟用户产生的,不是真实的用户行为。近期的一些研究把RL加入到神经网络中来建立真实的基于任务的对话系统。


三、NLG

在information-state框架通常分为两个阶段,content planning(说什么)和sentence realization(怎么说)。这里先假设在dialog policy阶段已经完成了content planning的部分了。这里关注sentence realization的部分。这部分分为两步,首先是生成一个delexicalized string,即把特定的词用一个通用的representation来代替,可以是slot名字,这个是较容易生成的。一旦生成了这个delexicalized string,可以用从用户输入中得到的信息填进去,也就是relexicalize。为了生成delexicalized string,需要从大量任何人之间真实交流的对话进行训练。


可以用n-gram模型来对对话行为进行训练逐个生成单词,最后形成整个句子。对于语料中的句子还要一定的处理,如基于规则来给句子打分,惩罚过长和过短的句子。近期的工作将这种简单的n-gram方法替换掉了,替换为神经网络模型。同时,也可以设计NLG算法来处理特定的对话行为,如生成clarification question等。这种对话行为可以用rejecting来实现,但是现实生活中人们多用clarification question来重新得到误理解的元素。这些clarification question可以用规则生成,也可以建立分类器来猜句子中那个slot可能被misrecognized。

猜你喜欢

转载自blog.csdn.net/katherine_cai_7/article/details/78978206