问答学习系列(一)—— 对话系统入门总结
一、写在前面的话
对话系统一直是NLP落地的重要方向,所以在这方面的工作也比较多,相关的综述性的博客和论文也比较多,这里推荐这篇文章:对话系统综述:新进展新前沿。接下来,本文更多会以自己的理解做个总结,刚入门,有错的地方也请大家多包涵。
二、难以绕开的选择
对于对话系统,从自己的理解出发,更喜欢将其分成query和answer两部分,从这一点出发,就可以延伸出对话系统的分类:
-
是否要将query和answer分开处理——流水线方法(pipeline) OR 端到端方法(end-to-end)
-
query的目的——任务导向型 OR 非任务导向型(也称为聊天机器人)
-
获取answer的方法——生成 OR 检索
-
query和answer的形式——单轮和多轮
将以上几种方式相互组合,也就形成今天各种关于对话系统的方法。
三、pipeline OR end-to-end
3.1 pipeline
pipeline主要是指将整个对话系统拆分成几个子任务:
- 自然语言理解(Natural Language Understanding,NLU)
NLU可以拆解成用户意图识别(也就是一个分类任务)和槽嵌入(也就是命名实体识别和槽填充),这一部分主要的作用是将query解析为预定义的语义槽
-
对话状态跟踪(Dialogue State Tracker,DST)
-
对话策略学习(Dialogue policy learning)
-
自然语言生成(Natural Language Generation,NLG)
ps: 个人感觉最后一个可以改成answer的获取,感觉用检索的方法也没问题
3.2 end-to-end
这一块其实就是试图使用NN直接获得从query到answer的映射
四、任务导向型 OR 非任务导向型(也称为聊天机器人)
任务导向型和非任务导向型在多轮时才有意义,与任务导向型所需求的精确相比,非任务导向型的难点更多在于对话的话题切换跨度更大、回复需要多样性等。
五、生成 OR 检索
基于检索的系统通常可以给出一个精准但是不流利的方法,而基于生成的系统则倾向于给出一个流利但是没有什么意义的回复。结合生成方法和基于检索的方法可以显著提高性能。
六、单轮和多轮
单轮对话与传统的问答系统相类似,是智能对话系统的初级应用。一般表现为一问一答的形式,用户提出问题或前发出请求,系统识别用户意图,做出回答或执行特定操作。单轮对话也强调自然语言理解,但一般不涉及上下文、指代、省略或隐藏信息,相对来说实现难度更低,产品的应用也更加成熟可靠。
多轮对话一般是任务驱动的多轮对话,用户是带着明确的目的的,如订餐,订票,叫车,寻找音乐、电影或某种商品等比较复杂的需求来,而这中间有很多限制条件,用户并不能一次将任务所需的关键信息一次性说完,说清楚,因此就要分多轮进行QA问答一方面,用户在对话过程中,可以不断修正和完善自己的需求;另一方方面,当用户在陈述需求不够具体和明确时,机器人可以通过询问,澄清和确认来帮助用户寻找满意的结果,并且在任务的驱动下与用户完成日常的交互,以此不断完善对于用户需求的满足。因此,任务驱动的多轮对话不是一个简单的自然语言理解加信息检索的过程,而是一个决策过程,需要机器在对话过程中不断根据当前的状态决策下一步应该采取的最优动作(如:提供结果,询问特定限制条件,澄清或确认需求,等等)从而最有效的辅助用户完成信息或服务获取的任务。