如何站在巨人的肩膀上,将自己的产品赋予AI的能力
mxw2552261 发布于2017-12 浏览:14216 回复:20
13
收藏

   前几天参加了“百度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;套入公式就能进行运算得到答案。这种套公式的学习方法就是规则学习。 这种学习方法的特点是规则固定,只能解答符合该公式条件的问题,解答问题时只要将具体数值代入到公式中计算即可。

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

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

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

 总结:

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

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

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

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

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

 训练模型

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

沙盒

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

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

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

 

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

 最后一步:

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

 

我们产品的初步调整

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

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

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

收藏
点赞
13
个赞
共20条回复 最后由人间月天回复于2018-04
#22人间月天回复于2018-04

写的很详细,受教了。

0
#21JUNEˋ回复于2018-03

赞!

0
#20K零度以下回复于2018-02

很详细,刚好在做机器人

0
#19mxw2552261回复于2018-01
#18 风飘落叶浪回复
赞一个,不错。

谢谢:)

0
#18风飘落叶浪回复于2018-01

赞一个,不错。

0
#17mxw2552261回复于2017-12
#16 15053535385回复
楼主写的很详细,赞

谢谢关注哈

0
#1615053535385回复于2017-12

楼主写的很详细,赞

0
#15卡农LLLL回复于2017-12
#14 mxw2552261回复
会的,前几天打算研究下,然后有其他事情耽搁了

我现在头痛怎么用unit确定到用户级.现在unit因为是同步.直接用的时候感觉不强.但是和dueros连起来的时候.就麻烦了

0
#14mxw2552261回复于2017-12
#13 ft...e@qq.com回复
希望楼主能一起研究一下dueros的接入.会让设备更智能..我现在卡壳了...(┬_┬)
展开

会的,前几天打算研究下,然后有其他事情耽搁了

0
#13ft...e@qq.com回复于2017-12

希望楼主能一起研究一下dueros的接入.会让设备更智能..我现在卡壳了...(┬_┬)

0
#12mxw2552261回复于2017-12
#7 荒墨丶迷失回复
不错不错 新版主一来就精品贴 哈哈哈

后续还会有的。哈哈

0
#11mxw2552261回复于2017-12
#4 用户已被禁言回复
可以。棒棒的。新版主给力

不然这版主白当了啊。哈

0
#10mxw2552261回复于2017-12
#3 卡农LLLL回复
楼主的帖子写得真好.还画了流程图. 楼主还没写唤醒啊.把百度的多唤醒词加上.呵呵 就是数字的匹配现在还是不怎么友好.因为识别出的有时是大写.有时是阿拉伯.  
展开

回头有时间了加。

0
#9mxw2552261回复于2017-12
#2 伊茨米可回复
感谢如此认真的开发者!您让我们信心倍增!

嗯嗯,你们加油,提供更好的功能给我们开发者用。

0
#7荒墨丶迷失回复于2017-12

不错不错 新版主一来就精品贴 哈哈哈

0
#6卡农LLLL回复于2017-12
#4 用户已被禁言回复
可以。棒棒的。新版主给力

...1贴1回复怎么到300多积分的....怎么看是版主啊...

0
#5goJhou回复于2017-12
#3 卡农LLLL回复
楼主的帖子写得真好.还画了流程图. 楼主还没写唤醒啊.把百度的多唤醒词加上.呵呵 就是数字的匹配现在还是不怎么友好.因为识别出的有时是大写.有时是阿拉伯.  
展开

有中文转阿拉伯的库 233333

0
#4用户已被禁言回复于2017-12

可以。棒棒的。新版主给力

1
#3卡农LLLL回复于2017-12

楼主的帖子写得真好.还画了流程图.

楼主还没写唤醒啊.把百度的多唤醒词加上.呵呵

就是数字的匹配现在还是不怎么友好.因为识别出的有时是大写.有时是阿拉伯.

 

1
#2伊茨米可回复于2017-12

感谢如此认真的开发者!您让我们信心倍增!

1
TOP
切换版块