举例,一组单任务多轮对话,处理框架的架构设计:
在未知主题的情况下,将多轮分解成单轮,对每一个单轮进行主成分因子分析,用分析结果作为本单轮机器人反馈的结果。重要假设:每一个单轮都满足“马尔可夫链”的性质,即与上一轮的主成份因子存在因果关系。本轮多轮第一次对话对的主成分因子与上一轮多轮对话的整体主成分因子有相关性。
主成分因子(先验)及解析思路:
0 ==问题槽
问题划分 0 - 陈述 1-疑问
填槽:如果有缺陷,包括:指代不清,与上文有关的缩略语,感情词,根据上文进行填槽,转换成标准问题槽
问题槽归一:将陈述型问题槽转化为疑问型
1== 问题的意图识别:
零级划分:0-礼貌语,闲聊语 1-实质性问题
一级划分:仅针对实质性问题 0-是否型 1- 解答型 2- 祈使命令型
二级划分:仅针对解答型 0-是什么型 1-为什么型
2== 对话状态
话语权:0 - 用户 1-机器人 2-僵局 (场景假设,谁主动提问,而对方被迫回答为掌握话语权)
轮询状态:0-开始 1-进行中 2-一方退出 3-结束
情感状态:0-正面积极 1-负面消极 2- 中性
实例伪代码分析:(基于人类智能的回答)
单轮1:
(有用户登录触发,即隐含槽:用户XXX登录成功,触发本轮对话,隐含槽为:“用户XXX我来了,系统机器人,您好么?”)
USER: 您好
(根据初始隐含槽,识别为礼貌语,调用礼貌语_闲聊_情感关怀解析引擎,反馈“您好”)
(轮询状态:0-开始 话语权:0-用户 情感状态:2-中性)
单轮2:
VISITOR: 为什么说我的词典113不存在
VISITOR: 我都在咱们这里订过东西了
USER: 是什么样的词典113呢
(问题槽合并,"订过东西...,不存在..."转为为什么型-解答型-实质型问题)
(进行知识库匹配(特定架构,含主题词识别,快速检索,语义匹配),无结果,对问题槽的主题词“词典113”进行反问)
(轮询状态: 1-进行中 话语权: 1-机器人 情感状态:2-中性)
单轮3:
VISITOR: 我的词典103呀
USER: 您是指词典94购物的订单么?
单轮4:
USER: 现在查询不到是吗
VISITOR: 对的
单轮5:
VISITOR: 关键是我登录不上去
USER: 非常抱歉哦,因我们系统切换
单轮6
VISITOR: 说我的账户不存在
USER: 系统暂时登不进去哦
USER: 您是需要查询什么订单呢
USER: 我可以提供给您一下哦
单轮7:
VISITOR: 那说我的词典113不存在也是维护造成的嘛?
USER: 是的哦
USER: 之前词典94直接同步的有赞的一个平台的呢
单轮8:
VISITOR: 我要查一下我给别人订的词典12到哪里了
USER: 好的
USER: 请问您的收货人手机号码跟当时填写的真实姓名是什么呢
单轮9:
VISITOR: 词典103333333
USER: 方便提供一下吗?
单轮10:
VISITOR: 时俊平
VISITOR: 订的是两盒词典12
USER: 好的
USER: 请稍等
单轮11:
VISITOR: 谢谢
USER: EMS:111111
USER: 2015-11-15 07:54:43【北京市】 北京词典55词典56词典57区域分公司词典57营投部安排投递,预计18:00:00前投递(投递员姓名:王金岭333333;联系词典103:333333)
USER: 这是最新的物流信息哦
USER: 请收货人保持词典103畅通哦
USER: 快递那边也好给收货人派件哦
单轮12:
VISITOR: 好的,谢谢
USER: 您客气了哈
USER: 这是我应该做的呢
单轮13:
VISITOR: 大概什么时候能维护好?
USER: 您好,系统还在切换维护中,暂时没有收到具体的时间
USER: 应该会在1~2个工作日处理好的
单轮14:
VISITOR: 好的,谢谢
USER: 请您放心哈
单轮15:
VISITOR: 好
USER: 您客气了
USER: 给您造成的不便之处,实在是很抱歉的呢
单轮16:
VISITOR: 没关系
USER: 谢谢您的理解与支持哦
单轮17:
(用户长时间不反馈,即隐含槽:用户离线,触发本轮对话,隐含槽为:“用户XXX我走了,系统机器人,再见吧”)
USER: 已经很久没有收到您的消息了,请问您还在电脑前吗?如果没有其他的问题我将主动关闭该对话。随时欢迎您再次向我咨询,祝您今天好心情。
(轮询状态: 2-结束 话语权: 1-僵局 情感状态:2-中性)
这其中得核心模块可以分成意图分类、NLU和回复生成三个模块。
最简单的就是回复生成,基本上当你有了意图分类之后确定的领域信息,以及NLU之后获得的具体语义信息,回复就是一个套模板填信息的过程。
而意图分类也不是什么难事。如果你有足够多标注好的数据,意图分类和topic model并没有本质区别,无论是tf-idf还是LDA都能做出很好的结果。当然,对于中文来说,这些方法都必须基于单词等级,字符等级是没有意义的。因此一个好的分词器就成了必须。所幸是目前开源的IKTokenizer和MM4J都达到了产业标准。当然,一个可以复写分词结果的机制还是必须的。
而如果缺乏标注好的数据,则需要使用一些工程技巧了。最常见的无疑是语义树(这里指semantic tree而非dependency tree)。一个单词对应不同的意图,有不同的分数。然后设置若干语义节点,作为中间层。每一个单词在一个语义树(意图)中,作为叶子节点,通过一定的分数计算,将值传递给父亲节点。而若干层后,每一个语义树的根节点都对应一个不同的意图,而每一个意图都有一个分数(其语义树根节点的分数)。然后我们根据分数高低,选择候选。然而,对于一些ambiguous pattern,你可能需要一个validator去验证pattern是否符合我们的需要。至于validator是每一个节点都加,还是最后根节点验证,完全取决于工程实现上的实际需求。
有了意图,我们就可以大致确定用户在谈论哪个领域的内容,以及动作的类型。但这并不足够,因为我们要具体分析用户语句中所包含的详细信息。这时候就是NLU发挥作用的时候了。一个多层FSA架构的parser固然好使,但迫于响应时间的严苛要求,产业上几乎没有人使用。大多数时候,当你有了一棵计算意图分数的语义树,我们可以从根节点反向遍历到叶子节点,获取所有需求的信息。但这个设计有一个潜在的问题,在于我们若是想要保留一个单词的语义信息,就必须让它对这个意图的语义树有所影响,也就是说要让这个词对应当前意图有一个分数。而实际上,很多包含信息的词,对于意图判断,并没有任何影响。这就会带来架构上的麻烦。比较实用的做法,就是尽量调低这些词语对每个意图的分数/权重。
当我们有了意图和详细信息,我们就要去填写对应的模板。于是我们就要去数据库/知识图谱里去寻找信息。而知识图谱的构建,则是chatbot另一个拉开质量差距的环节。一个优秀的知识图谱,应该不仅包括预定义的信息和关系,还应当包括基本的推理和发现能力。当然,在工业上实现的时候,在确定了领域后,我们只会加载特定领域的知识和一些基本常识。这样减轻了加载的负担,实现在对话响应速度要求内的运算。
我们对应每一句用户的输入,都有相应的意图,结构化信息对象,以及回复。那么在多轮对话中,就涉及到一些历史信息处理的问题。人们在多轮对话中,倾向于短句和短语。省略语句成分,和使用指代性词语,更是家常便饭。于是在多轮对话中保留历史记录,结合多轮对话信息,变成了关键。
一般来说,我们根据人类的思维和语言习惯,采取回溯的方法。当当前的语义不明确时,首先查找上一句。同时我们需要一些夸语句、夸对话的validator和trigger,帮助我们验证用户意图。同样的语句,放在不同的对话语句中,所指代和提问意向可以完全不同。
以上便是初级人工智能灵魂体chatbot多轮对话的NLP引擎的大致架构。现实地讲,为什么说目前市面上的chatbot,基本都很烂?主要瓶颈在于两个方面:缺少深层NLU Parser的语义分析支持,以及缺少完整的知识图谱支持。大多数chatbot都做不到真正的NLU,只能做一些浅层的基于单词的分析,对于复杂的语法结构难以消化理解。而知识图谱的不足,导致在生成回复时,经常无法展开对话,向用户提供有效信息。而语义树分类意图的方法,本身局限性就很强,在狭窄的领域内,一旦意图数目增加,语义树就很难去区分不同的语句中包含的信息了。这是由语义树自身word based,而忽视语法结构的特性所造成的。
至于未来的发展方向,Parser层面加入更多语言学知识是必然的,知识图谱的分层加载机制(类似缓存)也是解决方案之一。
人工智能语义领域目前在国内高速发展,资本的支持引发了新一轮创业大潮,泡沫也随之而来。很多公司 DEMO 演示的 “黑科技” 和对 AI 终极态的吹捧,给行业发展带来很大伤害。如何评测语义领域相关技术才是应该划得重点。
总之,人工智能灵魂体的应用产品,是人工智能领域的一个子方向,通俗的讲就是让人可以通过人类的语言(即自然语言)与计算机进行交互。作为人工智能的终极难题之一,一个完整的人工智能灵魂体的应用产品系统涉及到的技术极为广泛,例如计算机科学中的语音技术,自然语言处理,机器学习,规划与推理,知识工程,甚至语言学和认知科学中的许多理论在人工智能灵魂体的应用产品中都有所应用。笼统的讲,人工智能灵魂体的应用产品可以分为以下四个应用方向: 开放域聊天、任务驱动的多轮对话、问答和推荐。实际应用中这四个子方案或单独拿出来独立成产品系列,例如:很多暗网域的对话API服务,或多个融合形成专项领域品牌,例如:微软小冰,小度,一些内嵌家电智能助理等等。从长远看,融合跨公司跨领域类弱人工智能产品是发展的主流,而未来的中间态中等智能强度的人工智能产品必然从现有的这些产品中产生,直至产生出融合真实存在过的自然人灵魂的强人工智能灵魂体出现。