分享

你的Siri真的会说话吗?

 我是乐活乐货 2019-04-03

『冬天,能穿多少穿多少。

夏天,能穿多少穿多少。』

『单身的原因,原来是喜欢一个人,现在是喜欢一个人。』

作为“智能”助理,你的Siri会卖萌、讲(冷)笑话,甚至Bbox、Freestyle都毫无压力。但是上面这两句话,她会懂吗?(Siri:???)

当我们在和以Siri为代表的智能语音助理进行交流(如果算是)时,他们需要同时理解句子中的单词特性和句子结构。尽管在日常交流中,我们可以凭借常识和推理能力理解对方想表达的意图,但既没有上下文情境、又不拥有对等知识储备资源的智能助理们则面临着诸多问题,更包括可能的词法歧义、句法歧义以及回指歧义(之前提到的短语或者单词在后面句子中有不同的含义)等。在中国待了数十年的歪果仁尚且不一定能够get到上面句子的内涵,何况是代码搭建出来的虚拟实体,毕竟他们利用意图识别和实体提取的技术才刚刚找到主谓宾。

这就又提到了另一个问题,不同的文化历史背景产生了不同的思维逻辑习惯,表现在语言上则出现了更加异彩纷呈的表达方式。比如我们说“您吃了吗”和“吃了吗您”,表达的是相同的意义内涵,然而你却很难用外语将这句简单的话通过两种语序或者句子结构表达出来。不同的语言有着不同的语法规则和语意逻辑,在智能语音助理的学习和训练过程中这种语种上的差异是否会产生影响?

在自然语言理解(NLU)的下一步自然语言生成(NLG)中存在的技术难点就更多了,目前我们只能采用主流的“对话管理”的“填槽”技术,简单来说就是我问你答。至于在电影钢铁侠中看到的超人工智能管家Jarvis和钢铁侠之间的基情互动,未来一段时间内大概都只能停留在想象中了。看过今天小线菌分享的这篇文章(节选),你就能够对目前对话智能发展状况有了大概的了解。

Anyway,尽管目前我们的对话智能技术同我们的“梦中人工智能”尚有一段非常大的距离,但正因如此我们才有更大的想象空间,期待真正黑科技的到来~

本期文章节选自《人工智障2:你看到的AI与智能无关》。

授权转载自微信公众号S先生(ID: TheMisterS)、作者Mingke

AI如何听懂人话 ?

对话系统这个事情在2015年开始突然火起来了,主要是因为一个技术的普及:机器学习特别是深度学习带来的语音识别和NLU(自然语言理解)——主要解决的是识别人讲的话。

这个技术的普及让很多团队都掌握了一组关键技能:意图识别和实体提取。这意味着什么?我们来看一个例子。

在生活中,如果想要订机票,人们会有很多种自然的表达:

“订机票”;

“有去上海的航班么?”;

“看看航班,下周二出发去纽约的”;

“要出差,帮我查下机票”;

等等等等

可以说“自然的表达” 有无穷多的组合(自然语言)都是在代表 “订机票” 这个意图的。而听到这些表达的人,可以准确理解这些表达指的是“订机票”这件事。

而要理解这么多种不同的表达,对机器是个挑战。在过去,机器只能处理“结构化的数据”(比如关键词),也就是说如果要听懂人在讲什么,必须要用户输入精确的指令。

所以,无论你说“我要出差”还是“帮我看看去北京的航班”,只要这些字里面没有包含提前设定好的关键词“订机票”,系统都无法处理。而且,只要出现了关键词,比如“我要退订机票”里也有这三个字,也会被处理成用户想要订机票。

自然语言理解这个技能出现后,可以让机器从各种自然语言的表达中,区分出来,哪些话归属于这个意图;而那些表达不是归于这一类的,而不再依赖那么死板的关键词。比如经过训练后,机器能够识别“帮我推荐一家附近的餐厅”,就不属于“订机票”这个意图的表达。

并且,通过训练,机器还能够在句子当中自动提取出来“上海”,这两个字指的是目的地这个概念(即实体);“下周二”指的是出发时间。

这样一来,看上去“机器就能听懂人话啦!”。

这个技术为啥会普及?主要是因为机器学习领域的学术氛围,导致重要的论文基本都是公开的。不同团队要做的是考虑具体工程实施的成本。

最后的效果,就是在识别自然语言这个领域里,每家的基础工具都差不多。在意图识别和实体提取的准确率,都是百分点的差异。既然这个工具本身不是核心竞争力,甚至你可以用别家的,大把可以选,但是关键是你能用它来干什么?

“Due to the academic culture that ML comes from, pretty much all of the primary science is published as soon as it’s created - almost everything new is a paper that you can read and build with. But what do you build? ”

——Benedict Evans (A16Z合伙人)

在这方面,最显而易见的价值,就是解放双手。语音控制类的产品,只需要听懂用户的自然语言,就去执行这个操作:在家里要开灯,可以直接说 “开灯”,而不用去按开关;在车上,说要“开天窗”,天窗就打开了,而不用去找对应的按钮在哪里。

这类系统的重点在于,清楚听清哪个用户在讲是什么。所以麦克风阵列、近场远场的抗噪、声纹识别讲话的人的身份、ASR(语音转文字),等等硬件软件的技术就相应出现,向着前面这个目标不断优化。

“讲人话”在这类应用当中,并不那么重要。通常任务的执行,以结果进行反馈,比如灯应声就亮了。而语言上的反馈,只是一个辅助作用,可有可无。

但是任务类的对话智能,往往不止是语音控制这样一轮交互。如果一个用户说,“看看明天的机票”——这表达正常,但无法直接去执行。因为缺少执行的必要信息:1)从哪里出发?和 2)去哪里?

如果我们希望AI Agent来执行这个任务,一定要获得这两个信息。对于人来完成这个业务的话,要获得信息,就得靠问这个用户问题,来获得信息。很多时候,这样的问题,还不止一个,也就意味着,要发起多轮对话。

对于AI而言,也是一样的。

要知道 “去哪里” = Agent 问用户“你要去哪里?”

要知道 “从哪里出发” = Agent 问用户“你要从哪里出发呢?”

这就涉及到了对话语言的生成。

AI 如何讲人话?

决定“该说什么话”,才是对话系统的核心——无论是硅基的还是碳基的智能。但是深度学习在这个版块,并没有起到什么作用。

在当前,处理“该说什么”这个问题,主流的做法是由所谓“对话管理”系统决定的。

尽管每一个对话系统背后的“对话管理”机制都不同,每家都有各种理解、各种设计,但是万变不离其宗——目前所有任务类对话系统,无论是前段时间的Google duplex,还是智能客服,或者智能助理,最核心的对话管理方法,有且仅有一个:“填槽”,即Slot filling。

如果你并不懂技术,但是又要迅速知道一家做对话AI的水平如何,到底有没有黑科技(比如刚刚开始看AI领域的做投资的朋友 ),你只需要问他一个问题:“是不是填槽?”

  • 如果他们(诚实地)回答“是”,那你就可以放下心来,黑科技尚未出现。接下来,能讨论的范围,无非都是产品设计、工程实现、如何解决体验和规模化的困境,这类的问题。基本上该智障的,还是会智障。

  • 要是他们回答“不是填槽”,而且产品的效果还很好,那么就有意思了,值得研究,或者请速速联系我:)

那么这个“填槽”究竟是个什么鬼?嗯,不搞开发的大家可以简单的把它理解为“填表”:好比你要去银行办个业务,先要填一张表。

如果这张表上的空没有填完,柜台小姐姐就不给你办。她会红笔给你圈出来:“必须要填的空是这些,别的你都可以不管。” 你全部填好了,再递给小姐姐,她就去给你办理业务了。

还记得刚刚那个机票的例子么?用户说“看看明天的机票”,要想执行“查机票”,就得做以下的步奏,还要按顺序来:

1. ASR:把用户的语音,转化成文字。

2. NLU语义识别:识别上面的文字,属于(之前设定好的)哪一个意图,在这里就是“订机票”;然后,提取文字里面的实体,“明天”作为订票日期,被提取出来啦。

3. 填表:这个意图是订机票,那么就选“订机票”这张表来填;这表里有三个空,时间那个空里,就放进“明天”。

(这个时候,表里的3个必填项,还差两个:“出发地”和“到达地”)

4. 开始跑之前编好的程序:如果差“出发地”,就回“从哪里走啊?”;如果差“目的地”,就回“你要去哪里?”(NLG上打引号,是因为并不是真正意义上的自然语言生成,而是套用的对话模版)

5. TTS:把回复文本,合成为语音,播放出去

在上面这个过程当中,1和2步奏都是用深度学习来做识别。如果这个环节出现问题,后面就会连续出错。

循环1-5这个过程,只要表里还有空要填,就不断问用户,直到所有的必填项都被填完。于是,表就可以提交小姐姐(后端处理)了。

后端看了要查的条件,返回满足这些条件的机票情况。Agent再把查询结果用之前设计好的回复模板发回给用户。

顺便说一下,我们经常听到有些人说“我们的多轮对话可以支持xx轮,最多的时候有用户能说xx轮”。现在大家知道,在任务类对话系统里,“轮数的产生”是由填表的次数决定的,那么这种用“轮数多少”来衡量产品水平的方法,在这个任务类对话里里完全无意义。

一定要有意义,也应该是:在达到目的、且不影响体验的前提下,轮数越少越好。

在当前,只要做任务类的多轮对话,基本跑不掉填表。

那Google的智能助理(后称IPA)又怎么知道用户的具体需求呢?跑不掉的是,用户还得给Google Assistant填一张表,用对话来交代自己的具体需求,比如下面这样:

图中左边是一个使用Google Assistant订餐厅的真实案例,来自The Verge。

当前对话系统的局限

我刚刚花了两千来个字来说明对话系统的通用思路。接下来,要指出这个做法的问题

还记得之前提到的 “不要日本菜”测试么?我们把这个测试套用在“订机票”这个场景上,试试看:“看看明天去北京的航班,东航以外的都可以”,还是按步奏来:

1. ASR语音转文字,没啥问题;

2. 语义识别,貌似有点问题

- 意图:是订机票,没错;

- 实体提取:跟着之前的训练来;

- 时间:明天

- 目的地:北京

- 出发地:这个用户没说,一会得问问他...

等等,他说的这个“东航以外的都可以”,指的是啥?之前没有训练过与航空公司相关的表达啊。

没关系,咱们可以把这个表达的训练加上去:东航 = 航司。多找些表达,只要用户说了各个航空公司的名字的,都训练成航司这个实体好啦。

另外,咱们还可以在填表的框里,添加一个航司选择,就像这样(黄色部分):

(嗯,好多做TO B的团队,都是掉在这个“在后面可以加上去”的坑里。)

但是,这么理所当然的训练之后,实体提取出来的航司却是“东航”——而用户说的是 “东航以外的”,这又指的哪个(些)航司呢?

“要不,咱们做点Trick把‘以外’这样的逻辑单独拿出来手工处理掉?”——如果这个问题可以这么容易处理掉,你觉得Siri等一干货色还会是现在这个样子?难度不在于“以外”提取不出来,而是在处理“这个以外,是指哪个实体以外?

当前基于深度学习的NLU在“实体提取”这个技术上,就只能提取“实体”。

而人能够理解,在这个情况下,用户是指的“排除掉东航以外的其他选择”,这是因为人除了做“实体提取”以外,还根据所处语境,做了一个对逻辑的识别:“xx以外”。然后,自动执行了这个逻辑的处理,即推理,去进一步理解,对方真正指的是什么(即指代)。

而这个逻辑推理的过程,并不存在于之前设计好的步奏(从1到5)里。

更麻烦的是,逻辑的出现,不仅仅影响“实体”,还影响“意图”:

中文英文都是一样的;Google assistant也是一样的。

想要处理这个问题,不仅仅是要识别出“逻辑”;还要正确判断出,这个逻辑是套用在哪个实体,或者是不是直接套用在某一个意图上。这个判断如何做?用什么做?都不在当前SLU的范围内。

对这些问题的处理,如果是集中在一些比较封闭的场景下,还可以解决个七七八八。但是,如果想要从根本上、泛化的处理,希望一次处理就解决所有场景的问题,到目前都无解。在这方面,Siri是这样,Google Assistant也是这样,任意一家,都是这样。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多