背景
对话领域是当前最热门的一个NLP的方向之一,无论在学术界还是在工业界。由此衍生出来的产品包括通用形态的苹果siri,微软小冰,小米的小爱同学等,以及各个行业领域的智能助手,智能客服等。 这些产品基本可以看成下一代人机自然语言交互的雏形。
具体而言人机对话又可以拆分为以下几种形式:
(1) FAQ-Bot: 基于常见问答对的问答,也是运用最为广泛的智能问答技术,可以认为是最朴素的一种对话。抽象出来是一个信息检索的问题,给定用户的问题,在由{问答:答案}组成的知识库中检索相似的问题,最后将与用户相似问法问题的答案作为结果返回给用户。
(2) MRC-Bot: 基于机器阅读的智能问答,一般运用在开放域的问答中。给定用户的问题,具体分成召回和机器阅读两个阶段,先从知识库中检索出可能存在答案的文档,再针对文档做机器阅读确定答案。在实际落地中也很有前景,相比FAQ-Bot用户不需要耗费很大力气构建知识库,只需要上传产品文档即可。但是目前机器阅读的准确性还不够,效果不稳定,还不能直接将机器阅读的结果作为答案返回给用户。
(3)KG-Bot: 基于知识图谱的问答,一般用于解答属性型的问题,比如“北京的市长是谁”。给定用户的问题,需要先解析成知识图谱查询语句,再到知识图谱中检索答案。这种问答一般回答的准确率非常高,但是能回答的问题也非常局限,同时构建知识图谱非常耗费人力。
(4)Task-Bot: 任务型对话,是面向特定场景的多轮对话,比如“查天气”,“订机票”。"Task oriented dialogue"在学术和工业界都已经有了很深入的研究,分成pipeline和end-to-end两种思路。在实地落地过程中,难得是如何让用户自主的灵活配置一个任务型对话场景,训练语料可能只有一两条,如何训练出一个NER的槽位?
(5)Chat-Bot: 闲聊对话,一般用于提高机器人的趣味性,比如“你是谁?”,“你是机器人吗?”等。在学术上一般基于end-to-end的方案,可以支持多轮,但是回复结果不可控。所以在实际落地中还是会转换成FAQ-Bot,预先构建一个寒暄库,转换成检索的任务。
机器人类型 | 知识库结构 | 核心技术 | 落地难度 |
---|---|---|---|
FAQ-Bot | {问题:答案} | 信息检索 | 低 |
MRC-Bot | 文档 | 信息检索+机器阅读 | 中 |
KG-Bot | 知识三元组 | 知识图谱构建/检索 | 高 |
Task-Bot | 槽位/对话策略 | 对话状态跟踪/管理 | 高 |
Chat-Bot | {寒暄语:回复} | 信息检索 | 低 |
总结:目前最简单最切合实际的落地方式还是基于FAQ-Bot,而目前“智能客服”等产品采用的技术也大都基于此。
所以本系列文章将系统分享FAQ-Bot是如何进行产品化落地,在实际落地过程中踩过的坑以及我们自己的一些微创新。
这是本系列的第一篇文章,Elasticsearch的调教~
Elasticsearch的搭建
基于FAQ的智能问答,本质是一个信息检索任务,而Elasticsearch真是这个领域的必备的工具!