(一)对话机器人概述
共 2210字,需浏览 5分钟
·
2021-09-11 20:14
作者简介
作者:孟繁中 (北京邮电大学 计算机科学与技术硕士)
原文:https://zhuanlan.zhihu.com/p/331791105
转载者:杨夕
面筋地址:https://github.com/km1994/NLP-Interview-Notes
个人笔记:https://github.com/km1994/nlp_paper_study
现在越来越多的场景需要对话机器人,有纯文本对话的各种助手,如医院导诊的助手,购物网站的智能导购,智能客服,证券领域智能投顾等等,也有语音对话机器人,如智能语音外呼系统,智能语音客服系统等。对话机器人因为不同功能场景,不同的应用领域有着各种各样的分类,虽然背后的技术支撑都是NLP,但在具体工程实践中又有一定差别。
按照知识领域分类
面向限定领域的问答系统
机器人回答的内容是有限领域的有限场景,用户会受机器人的引导而回答限定领域的问题。比如智能语音外呼系统就是典型的限定域问答系统,机器人给用户拨打电话的时候,已经有了非常明确的目的性,用户跟随机器人的思路完成问答,一旦用户挑战机器人,机器人都可以用安全话术去回复或者结束对话。医院导诊也属于限定域问答系统,只限定于医疗领域,但是它的知识服务范围大于外呼系统,它是限定了一个领域,但是场景不像智能外呼系统那么封闭。
面向开放领域的问答系统
机器人并不限定服务领域,用户可以和机器人聊任何内容。例如微软小冰,图灵机器人等属于此类。这类机器人有着非常广泛的话术资源,所以话术多为NLG生成的。
面向常用问题集的问答系统
机器人
,例如IBM的Waston,此类机器人介于开放域和限定域之间,机器人可以回答的问题取决于知识库的内容。
答案来源分类
基于结构化的问答系统
简称KBQA系统。问答的来源来自一个知识库,这个知识库可以是图数据库,可以是RDF三元组,也可以Mysql等结构化存储。问题的答案基于知识库推理而得。例如,医院导诊系统,后台是一个医生及擅长领域的知识库,用户的问题是疾病名称,问答系统根据疾病名称从知识库中检索匹配的医生,并给出回答。
基于文档的问答系统
在NLP领域称阅读理解任务,如SQuAD阅读理解问答,常见Facebook DrQA、CoQA等算法。假如说,给定一个文档,如果人工从文档中提取问题和答案对,建立问答知识库,那将是非常复杂的一个工作,但是如果有了阅读理解系统,则可以根据用户的问题,从文档中自动检索答案返回。最简单的例子,在保险机器人中,给定一个保险的保单,机器人就可以回答关于一些保险条款的问题。
基于问答对的问答系统
系统保存大量的问题和答案组,当用户的问题在给定的问答集中,则将答案返回。称为检索型机器人。此类问答库非常庞大,多采用分级检索方式,并配合搜索引擎一同工作。检索算法如百度的Simnet。
答案反馈机制分类
基于检索式的问答系统
答案的来源是人工编写的模板,根据用户的问题,通过一系列算法找到对应的答案模板,返回给用户。此类问答多是专业领域的系统,如金融投顾系统,医院导诊系统,有严格的语义要求,因此答案采用人工编写。
基于生成式的问答系统
答案通过NLG技术生成,此类系统多为闲聊系统,如微软小冰等。此类系统因为回答话术非常多样,但是专业程度并不高,因此特别适合自动生成。
根据任务类型分类
问答机器人
多为一问一答的系统,多轮对话之间没有特定关系,用户问一个问题,得到一个答案就结束了。基于FAQ的系统,KBQA的系统等多属于这种。
任务机器人
多轮交互式系统,以最终完成某个任务为对话结束,每轮交互时与上文有关系,整个问答流程类似一个软件流程图。如自动订餐机器人就属于此类。
闲聊机器人
本身没有目的性,聊天多为兴趣爱好等闲聊,如图灵机器人和微软小冰等
机器人的实现技术
机器人实现技术有多种多样,但是从整个应用系统架构上分为end-to-end模式和pipeline模式。end-to-end模式从用户输入到系统输入作为一个整体去训练,希望训练一个从用户端自然语言输入到机器端自然语言输出的整体映射关系,具有灵活性强、可拓展性高的特点,减少了设计过程中的人工成本,打破了传统模块之间的隔离,也不存在偏置误差,但是中间的模型过于庞大,端到端模型对数据的数量和质量要求很高,训练困难,并且对于填槽、API 调用等过程的建模不够明确,修改任何一个功能,都需要重新训练整个模型。目前大的问答系统很少有才有这种方式,仍处在探索中。
pipeline模式,从input->NLU->DST->DPL->NLG->output,一个对话从输入像流水线一样经过系统,最终得到答案输出给用户。pipeline非常灵活,可解释性强,易于落地,各个模块都可以采用不同的技术去替换,模块相互之间可以通过参数传递共享上一轮成果。但是其缺点是不够灵活,各个模块之间相对独立,难以联合调优,并且由于模块之间的误差会层层累积。即使这样,考虑到pipeline模式的优点和end-to-end的缺点,目前多数生产中的系统多采用此方式,包括下文我们重点要说的RASA系统。