百度UNIT 如何站在巨人的肩膀上,将自己的产品赋予AI的能力?

字数 3751阅读 813

    前几天参加了“百度AI开发者实战营”大会,人真多,找了一个犄角旮旯的位置,站了一个下午,我这老腰实在扛不住啊。

    大佬们讲了一个下午,有技术的演讲,也有百度合作伙伴如何融合百度AI案例的演讲等等,  我这次比较关注的是百度语音百度UNIT

百度语音

百度语音有三大部分:

    1.语音识别

    2.语音合成

    3.语音唤醒

语音识别我们的产品一直在用的功能,它包括部分,一个是语音识别(把声音转换文字),一个是语义识别(把文字识别为具体的意图)。语音识别加入到我们的产品后,具体业务是这样的:

百度UNIT

UNIT是什么

    它的官方解答是这样的:可定制的对话系统开发UNIT(Understanding and Interaction Technology),是处理自然语言的理解与交互技术平台,所以理解与处理文本对话是UNIT所擅长的。

    UNIT机器人目前没有触觉、视觉、味觉与嗅觉,只有初步的“听觉”,它只能获取到文字信息,所以在UNIT机器人眼中,世界是由词汇构成的。

在机器人的“大脑”中,这些词汇刚开始都是模糊不清、没有区别的,当你指定了一条条样本之后,词汇之间的关系以及句子的意图便慢慢变得清晰起来,机器便能够完成理解对话的任务了。

UNIT能做什么

    打造“面向任务的理解与交互能力” 一项任务可以是解答用户的某个问题(如:今天天气怎么样、我的快递到哪儿了)、执行用户指令(如:去给我把咖啡端过来),甚至通过一系列交互引导用户达成某项需求(如:通过注册-选座-下单完成订票)。

    UNIT是具备举一反三这种能力的,在其背后使用了一种名叫“深度神经网络”的技术,这种技术让机器人具备了一定的“认知”能力。

    “认知”是指机器人在你所教授的语言场景样本下,它会加入自己的理解,会试图识别更多的没有见过的语句。

    通过UNIT,可以快速、灵活的按自身业务需求定制对话系统,满足智能助手、智能家居、智能汽车、智能客服、机器人等各类产品和场景。

通过上面的概念我们可以看出它给我们释放出来三个信号:

    1. 处理自然语言

    2. 具有对话的功能

    3. 快速定制自己的业务能力

所以我就在思考,如果把百度这种智能对话交互的能力加入到我们的产品中,我们的产品是不是就提高了一个层次呢?

怎么融合

    那么下一步就要考虑的是怎么做呢?我就去翻阅百度的官方文档,以及他们提供的案例,如何使用等等。说真的,如果以前没有接触过这方面东东的话,刚开始的接触时候头真大,各种名词解释,各种配置,就光他的配置文档将近100页,我瞬间凌乱了。

    那既然希望自己的产品提高一个层次,那么就必须克服种种头大,静下心来,慢慢翻阅他的文档,并且反复阅读。

真正的融合,其实很简单:

    1. 梳理业务逻辑

    2. 配置对话单元

    3. 标注对话数据

    4. 对话训练与验证

    5. 应用调用

下面结合我的实际应用场景,来介绍UNIT的各种概念以及如何使用UNIT,让大家更容易理解,而不至于头大。

在使用UNIT以前,必须把他的各种名词搞清楚,不然真的无从下手。

概念

场景:

    一个场景对应一个独立完整的对话系统,用来满足您某个具体业务场景的需求。通常按垂类划分(例如,银行信用卡办理场景、电视遥控器场景等)。简单来说一个系统建一个场景就可以了。比如车载系统,我们创建一个开车的场景。

单元:

    是系统中的最小对话单位,分为对话单元和问答单元。

对话单元:

    用来定义系统在一个具体的对话任务下对用户对话的理解、以及机器人的回应方式。它代表着产品能够执行的某个特定任务。对话任务例如导航、查天气、查询信用卡年费、控制空调温度等。

对话系统应该如何理解用户需求,包括意图和词槽(可选)。

意图

    意图表示用户的目的,让系统执行的某个操作。比如导航到人民大学,那么导航就是用户的目的(意图),系统要做的就是开启导航,目的地设置为人民大学。

词槽

    是满足用户意图时的关键信息或限定条件,可以理解为用户需要提供的筛选条件。词槽由词槽类别和值两部分组成,例如导航到人民大学,目的地就是词槽类别,人民大学就是词槽里的值。

词槽澄清

    在口语对话中,用户的一句话 (我们称之为单轮对话) 中常常并不会包含完整的信息。比如,用户说:我要导航。这句话并没有包含目的地这个词槽,而导航的最终执行,目的地是不可或缺的。因此,对话系统需要对用户发起”词槽澄清”询问,(你要导航到哪?)来获取用户要导航的目的地。词槽澄清其实就是提示用户还缺少哪些必要信息。

    UNIT平台可以支持定义哪些词槽是”不可或缺的”,也可以通过调整词槽顺序来定义哪个词槽应该优先被询问。

澄清话术

    就是进行词槽澄清时,用于询问的问题(你要导航到哪?)

添加词槽的过程

点击保存后,一次对话意图就创建好了。

    那怎么样才能让系统将”用户对话”的理解,转换为系统能够处理的意图和词槽呢?我们将转换的过程 称之为对话理解能力。

UNIT可以通过观察开发者提供的对话样本和对话模板进行学习,以提高其对话理解的能力。

对话样本

    对话样本就是由开发者提供的标准答案,它给对话系统示范了应该如何将用户的对话理解为意图和词槽。UNIT通过”训练”来观察并学习开发者提供的数个对话样本集,并以此优化场景的对话理解能力。

对话模板

    对话模板是给对话系统按具体语法、句式做出的示范,教它在某一个特定语法、句式中,该如何理解意图,哪个词是重要信息,对应的词槽、特征词是什么。

特征词

    特征词通常被用于约束某条对话模板的匹配范围(例如,天气、下雨、热等类别关键词)或提供一定限度的泛化能力(例如,嗯、了、吧等语气词);活用特征词机制可以事半功倍的提高对话模板的精度和覆盖度。

词槽与特征词的区别:

    词槽是一类词汇的抽象,我们为了表示这一类词,往往给其单独命名,例如:地名、人名、电影名等等,都是泛指一类词。

    特征词与词槽类似,只是它偏重于抽象出一些通用的词汇,例如:请求类词汇“我要找”“请查询”“帮我找”等等。

    特征词与词槽就像公式中的两个变量,它们组合在一块,便能组成一些句子,例如:我要找北京大学、导航到香格里拉。

有了上面的规则,再加上词槽里的词汇后,系统很容易匹配出用户的对话。

[D:kw_wantkey][D:user_location] -> 导航到清华大学

[D:kw_wantkey][D:user_location] -> 我想要去北京大学

对话模板由以下几类元素构成:

    a. 普通文本

即不包含“[D:”、“[W:”、“]”、“:”的文本,例如“的歌”;我想听刘德华的歌

    b. 词槽或特征词

格式为[D:词槽名]或[D:特征词名],例如“[D:user_location]”或“[D:kw_wantkey]”;

    c. 通配符

格式为[W:自然数-自然数],第一个自然数≤第二个自然数,例如“[W:0-10]”;

    d. 词槽加词槽值

格式为[D:词槽名:普通文本],例如“[D:user_location:人民大学]”;

对话样本和对话模板的区别

    对话样本是样本学习,对话模板就是规则学习:

    规则学习:z = x + y;套入公式就能进行运算得到答案。这种套公式的学习方法就是规则学习。 这种学习方法的特点是规则固定,只能解答符合该公式条件的问题,解答问题时只要将具体数值代入到公式中计算即可。

好处是每个词任意切换来匹配意图,不容易出错。

坏处就是匹配要一一对应,少一个都不行,死板,难以变通。

    样本学习:即观察大量样本,通过学习语言样本,并从中发现规律,最终运用该规律去理解语句,举一反三,这与人类的认知学习能力十分类似。

总结:

    1. 模板规则不是万能的,看起来模板比标注更省事,但这是在一个场景启动之初,到了后期,要让机器人具备更强的举一反三能力,还是要通过“样本学习”的方式才能做到。

    2. 为什么配置了模板,稍微增加或者减少几个字或者模板里词槽顺序改变下,机器人就不认识了?因为模板可以理解成套公式,公式是死板的,少一个变量都不行,所以模板也是有局限的。

    3. 基于以上,如果要完全使用模板来做一个场景的识别也不是不可以,只是需要人工总结很多这样的模板公式,告诉机器人这些都可以套用,在这一点上机器人几乎不会举一反三。

    4.在UNIT中,对话模板集对理解能力的作用会优先于对话样本集,因此通常可以被用于做为错误的紧急干预手段。建议适当控制模板数量,尽量通过提供更多对话样本以达到更好的理解效果。

对话样本和对话模板都创建好了,那么下一步进入训练环节:

训练模型

    即把场景下所有的配置、标注的对话样本、对话模板等打包提交给系统来训练模型。 模型生效一般需要几分钟时间。

沙盒

    每个场景都配有一个沙盒环境,将训练好的模型生效到沙盒环境后,就可以进行效果验证了,同时可接入到您自己的业务系统中使用。您可以生成多个模型版本,但只能选择一个放到沙盒环境中。

训练完成并生效后,我们就可以进行验证了。

想要系统更精准的识别出用户的意图,我们只需要加入更多的对话样本,进行学习即可。

上面我只做了导航的简单对话单元,用户可以自己尝试一下添加听歌的对话单元。例如我要听刘德华的歌。

最后一步:

创建应用,通过API调用接口完成接入

我们产品的初步调整

    由于UNIT现在只能处理文本数据,以及将处理的结果(意图)以文本的方式进行展示,但是我们的产品定义为语音交互的场景,那除了UNIT以外,还需要加入语音识别和语音合成的功能,以达到人与机器语音对话的能力。

经过几天的学习,我对我们软件设计做了一次初步的调整:

对UNIT的研究也是刚刚开始,后续软件的设计还会继续迭代的修改,如果哪个地方理解有偏差,欢迎拍砖。

推荐阅读:

技术:2018,如何从小白升级到大牛程序员呢?

技术:http2.0的时代真的来了...

技术:如何站在巨人的肩膀上,将自己的产品赋予AI的能力?

工具:如何通过技术手段 “干掉” 视频APP里讨厌的广告?

工具:通过技术手段 “干掉” 视频APP里讨厌的广告之(腾讯视频)

工具:抓包神器之Charles,常用功能都在这里了

干货分享:

分享:深度机器学习56G视频资源分享

知识分享:现在是资源共享的时代,同样也是知识分享的时代,如果你觉得本文能学到知识,请把知识与别人分享

一码不扫,何以扫天下?长按关注我们

推荐阅读更多精彩内容