[征文] 对话式AI专栏: Chatbot对话管理篇

楼主: lion741205 (狮子)   2020-03-30 02:29:27
年初决定写个对话式AI专栏,把个人在业界的开发经验写下来,到目前为止已经有七篇文
章了,详述了聊天机器人框架的方方面面;第八篇文章还在拖稿时,碰到Soft Job版征文
活动,觉得本系列非常契合活动的技术与实务经验分享宗旨,相关知识也不是随便就能取
得的,就趁今晚打着夜灯,熬夜把它给写完了,在此分享给各位业界先进。
【阅读本文前建议先看】
http://www.lionethan.com/Chatbot的类型与对比/
http://www.lionethan.com/Chatbot的阅读能力-自然语言理解篇/
【什么是对话管理】
聊天机器人的对话管理(Dialogue Management)是为了根据目前的对话状态,决定系统应
该做些什么。通常分为两个子模组,负责更新对话状态的“对话状态追踪”(
Dialogue State Tracking),其输入自然语言理解模组所得到的使用者动作,以及过往的
对话历史,输出对话状态;以及决定系统动作的“对话策略学习”(Dialogue Policy
Learning),其输入对话状态,输出系统动作。上述的“使用者动作、对话状态、系统动
作”皆可用一个意图与一组槽位值表示。
【对话状态追踪】
目的是透过“使用者动作”及“对话历史”更新对话状态,其对话历史可能隐含着因资讯
不足,经过系统反问使用者后,产生的“多轮对话内容”;有些需求还会参考使用者画像
(User Profile),以补足必要的“个性化资讯”。透过推理和总结上述内容,转换成简
单的对话状态(一个意图与一组槽位值),系统可以将当前的对话状态映射成更完整的表
示(Representation)。为了考虑自然语言的模棱两可,语音辨识或自然语言理解模组所
产生的失误,根据可能正确的使用者动作数量,可进一步分成只考虑置信度最高的1-Best
,以及考虑多个使用者动作与置信度的N-Best方法。
【对话策略学习】
目的是透过“对话状态”决定系统该做些什么,如果对话状态的意图在系统能够提供的服
务项目之内,系统会检查槽位值是否齐全,然后使用其内容查询服务API,以得到关键答
案或内容;若对话状态的意图不明,或其符合特定服务但槽位值有缺失,系统应该主动向
使用者提问,透过多轮对话及对话状态追踪来蒐集足够的资讯。最后将关键答案或内容封
装到系统动作中,以一个意图及一组槽位值代表,提供给自然语言生成模组(Natural
Language Generation)。
【对话管理的实作方法】
基于规则( Rule-based )的方法,透过编写明确的规则,来建立各种槽位状态下,使用
者动作所对应的系统动作,此种方法无法处理不确定的状态,且需要手工编写规则,仅适
合特定领域的简单场景。
基于有限状态机(Finite-State Machine, FSM),此种方法又可分为“以点代表槽位状态
,以边代表系统动作”,以及“以点代表系统动作,以边代表槽位状态”两种方案;槽位
状态可分为有或无,系统动作则是询问槽位或最后回答两种,为避免置信度过低,也可以
增加动作请使用者二次确认。由于前者在槽位增加时,会使状态数量急遽增多,只适合资
料驱动的方式;若要以手工建置会建议采用后者。采用有限状态机的优点在于实作简单,
且容易理解,缺点是每个状态和动作都要手工设计,不利于复杂场景。
基于统计(Statistical-based)的方法,通常采用马可夫链(Markov Chain)将对话过
程表示成决策过程,而系统在每个对话状态中决定下一步动作。采用马可夫链的优点在于
只需要在决策过程中定义槽位状态与系统动作,就可以自动学习到状态的移转关系,也可
在过程中导入强化学习(Reinforcement Learning)与线上学习(Online Learning),缺
点是同样需要手工设计,不利于复杂场景。
基于深度学习(Deep Learning)的方法,输入使用者动作及相关特征,输出对应的系统
动作,以训练深度类神经网络模型。基于深度学习的方法需要大量训练资料才能够取得效
果,目前实际应用上还难以满足此须求。
【对话管理的具体流程】
1.自然语言理解模组取得使用者对话“推荐我一家台北的餐厅”,此时会侦测使用者意图及
识别命名实体,并将结果封装成使用者动作(意图=推荐餐厅, 地点=台北),得以将自然
语言映射成简单的语意表示。
2.对话状态追踪模组透过使用者动作(意图=推荐餐厅, 地点=台北)更新当前的对话状态,
然后在地点填充常用的默认值,并透过使用者画像补充用餐的个性化资讯,最后输出对话
状态(意图=推荐餐厅, 地点=台北公馆, 口味=喜欢吃辣)。
3.对话策略学习模组得到对话状态后,发现其意图在系统能够提供的服务项目之内,但还缺
少了用餐时间,系统应该反问使用者;所以输出系统动作(意图=对空白槽位提问, 地点=
台北公馆, 口味=喜欢吃辣, 时间=Null)。
4.自然语言生成模组执行系统动作,产生问句向使用者提问欲用餐的时间“你想在什么时
间用餐呢?”。
5.自然语言理解模组取得次轮的使用者对话“明天中午”,再次侦测意图及识别命名实体,
得到使用者动作(意图=不明, 时间=2020年3月30日12点)。
6.对话状态追踪模组参考使用者动作及对话历史,更新当前的对话状态(意图=推荐餐厅,
地点=台北公馆, 口味=喜欢吃辣, 时间=2020年3月30日12点)。
7.对话策略学习模组利用使用者动作及对话历史,蒐集餐厅推荐服务的必要资讯,透过查询
服务API得到答案后,封装成系统动作(意图=推荐餐厅, 地点=台北公馆, 口味=喜欢吃辣
, 时间=2020年3月30日12点, 餐厅=右手餐厅, 类型=泰式料理)。
8.自然语言生成模组执行系统动作,产生具体答案“建议你明天中午可以到台北公馆的右手
餐厅享用酸辣的泰式料理”。
【未来的发展方向】
为了解决基于深度学习的对话管理方法,在训练资料上普遍不足的问题,业界已尝试使用
N-Shot Learning在小样本下进行训练,以及使用Zero-Shot Learning在没有任何训练
资料的情况下,进行现有模型的迁移与补全,以及在马可夫链决策过程中,导入强化学习
与线上学习,建立奖惩与持续学习的机制;也有学者将GAN应用在自然语言处理上,透过
SeqGAN让两个模型相互博弈, 以学习最强的对话策略。
【参考文献】
POMDP-based Statistical Spoken Dialogue Systems: a Review
http://mi.eng.cam.ac.uk/~sjy/papers/ygtw13.pdf
Maximum Entropy Markov Models for Information Extraction and Segmentation
http://www.ai.mit.edu/courses/6.891-nlp/READINGS/maxent.pdf
Reinforcement Learning
https://en.wikipedia.org/wiki/Reinforcement_learning
One-Shot Learning
https://en.wikipedia.org/wiki/One-shot_learning
Zero-Shot Leaning
https://en.wikipedia.org/wiki/Zero-shot_learning
SeqGAN: Sequence Generative Adversarial Nets with Policy Gradient
https://arxiv.org/abs/1609.05473
【其他对话式AI专栏文章】
http://www.lionethan.com/Chatbot的类型与对比/
http://www.lionethan.com/基于知识库的问答系统实作方法/
http://www.lionethan.com/模组化的任务导向对话系统实作方法/
http://www.lionethan.com/Chatbot的阅读能力-自然语言理解篇/
http://www.lionethan.com/Chatbot的记忆与决策-对话管理篇/
http://www.lionethan.com/Chatbot的写作能力-自然语言生成篇/ (预计四月完成)
http://www.lionethan.com/预训练语言模型比较(elmo、bert、gpt-2)/
http://www.lionethan.com/Chatbot的挑战与发展趋势/
http://www.lionethan.com/AI研发部门与开发流程介绍/
作者: hentai (^^)   2020-03-30 10:13:00
感谢分享
作者: ian90911 (xopowo)   2020-03-30 10:45:00
感谢分享
作者: SuperSunny (超级桑尼)   2020-03-30 13:16:00
感谢大神分享
作者: vvind (wind)   2020-03-30 14:18:00
作者: qrtt1 (有些事,有时候。。。)   2020-03-30 16:49:00
有看有推
作者: single4565 (leekdumpling韭菜水饺)   2020-03-30 19:25:00
作者: DrTech (竹科管理处网军研发人员)   2020-04-02 12:37:00
学术文章翻译,实际上跟工业界结合落差蛮大的建议附上一些学术文章的参考文献来源。尊重一下原作者。
作者: tommykang   2020-04-02 15:47:00
推狮子大神 谢谢分享业界经验DrTech不懂装懂
作者: a2551127 (点子绿)   2020-04-02 17:41:00
lion大的文笔真的很好 我不懂nlp所以看不懂有关文献无法入门 但是这系列写的很全面又好懂 推推 希望之后能继续以实务的角度对每项技术深入说明
作者: tommykang   2020-04-02 18:56:00
我的意思是DrTech前几篇连Chatbot不代表闲聊都不懂还在学术界工业界落差大 别来乱好吗?软工版不适合打高空
作者: DrTech (竹科管理处网军研发人员)   2020-04-03 09:00:00
不贴原始论文打脸啦。只是提醒而,继续抄当作自己发表我也没意见。另外,本人nlp几年了,论文也有几篇,专利超过40篇。那些说我不专业的,或者学术定义的chatbot不专业的,真没必要,互相尊重吧。此行业已经很少人做了,没必要拉仇恨。真的只是提醒引用原文让大家有更多参考而已。我们都是知识工作者,用别人的成果注明出处很平常吧。
作者: jimmy55311 (jimmy55311)   2020-04-03 11:26:00
推热心助人的狮子大大 猛猛der 别管Dr.了啦 这种人很爱贬低别人提高自己 只要有写错他就骂死你 写得好他就说你是翻译的 不是翻译的他就说你抄没附来源 让他去吠根本没人想理他
作者: tommykang   2020-04-03 11:38:00
不能同意jimmy更多
作者: SuperSunny (超级桑尼)   2020-04-03 22:43:00
又不是在写论文,还要人家附参考文献,笑死推L大的逻辑和文笔,还有态度
作者: wili06543 (升燕)   2020-04-04 15:35:00
感谢分享
作者: May75504 (nay)   2020-04-06 15:33:00
感谢狮子大神分享实务心得,软件工作版应该少点酸民多鼓励这些愿意花时间分享经验的高手专家
作者: jing8281 (来下棋吧^^)   2020-04-10 10:40:00
推这篇

Links booklink

Contact Us: admin [ a t ] ucptt.com