【AI笔记】百度UNIT平台上手

96
朱利安_AI产品经理 8b56c3ad ed71 48e0 acab 4324dec38826
0.6 2018.03.14 22:49* 字数 5838

这是 公众号:【朱利安笔记】2018年的原创文章,欢迎关注公众号,定期推送AI产品干货 ~

一、百度UNIT简介

上周体验了讯飞的AIUI后,接着来体验下百度的UNIT,继续了解各家在人机对话领域的开放平台。

UNIT是百度AI开发平台中开放的一项人机对话能力,官方解释如下

随着AI技术和理念的兴起,很多产品都希望采用对话式的人机交互方式。然而对话系统的研发对于大多数开发者而言却是一个很困难的工作,对技术和数据的要求都很高。

为此,百度将积累多年的自然语言理解与交互技术对外开放,推出了可定制的对话系统开发UNIT(Understanding and Interaction Technology),将业界领先的技术能力输出给广大的开发者,以便降低对话系统的研发门槛。


wiki:https://ai.baidu.com/docs#/UNIT-guide/top

教学视频:https://ai.baidu.com/support/video#video-category-unit


二、百度UNIT结构

· 整体结构

因为我对流程很重视,所以不仅会关注UNIT实际训练出chatbot的效果,还会关注它的使用流程,所以会画上流程图说明。

我一直认为一个好的流程是“美”的,高效的。百度UNIT流程如下:

要在百度的UNIT创建一个可用的chatbot,主要有6大步骤

1. 创建场景:根据业务需要创建场景,一个场景即一个可对外输出使用的功能

例如“控制电视场景”、“办理信用卡场景”等


2. 创建技能:技能是功能的最小单位,用于识别用户意图。

例如“控制电视”的场景中,技能(或意图)可以是“切换频道”,“调整音量”,“开关机”等


3. 准备训练数据:技能创建好之后,只是一个空壳

还是“控制电视”的场景,我们只是脑中想好了一个功能是“切换频道”,但是需要准备好数据,让machine去学习,什么是“切换频道”


4. 训练技能:当技能空壳创建好后,数据也准备好了,扔进去一锅乱炖即可,训练技能


5. 验证技能:当machine训练好后,我们要看下machine学的好不好,需要考考他,互动下

例如发出“切换CCTV5”,结果执行了“关机”,你就一脸懵逼了,这时候就要再调整,再训练……


6. 发布场景:训练好技能,就可以发布上线见客人了


这整个过程和做产品特别的像

   · 创建场景(UNIT)  ->  发起项目(PM)

   · 创建技能(UNIT)  ->  拟定Fearture List(PM)

   · 准备训练数据(UNIT)  ->  撰写PRD文档(PM)

   · 训练技能(UNIT)  ->  投入研发(PM)

   · 验证技能(UNIT)  ->  验收需求(PM)

   · 发布场景(UNIT)  ->  项目上线(PM)

是不是有点意思:P


百度的整个框架刚开始使用不好上手,具体讲讲每个环节


三、UNIT六大步骤

1)创建场景(场景管理模块)

进入UNIT,通过场景管理先创建场景,场景的定义

一个场景对应一个独立完整的对话系统,通常按垂类划分(例如,天气场景、电视遥控器场景等)。

场景中包含了一系列对话单元用于完成该场景下的所有对话任务(例如,查温度、换台等)。

场景内可以含有一系列的“对话单元”,和讯飞AIUI的“应用”内可以创建各式“技能”相似。


1. 模型

模型是场景的属性,同app版本的概念,每一次训练后都会产生一个模型,可以不断的迭代模式,或者修改训练的技能或素材,对比不同模型的优劣。


2. 沙盒

沙盒是模型使用的场所,必须将模型放入沙盒内才能使用,每次仅会有一个模型在沙盒内生效。

模型和沙盒的关系,和app的版本与手机的关系相同,一个手机只能装一个app的某个版本,app在手机上运行;一个沙盒只能装载一个模型,模型在沙盒上运行。


2)创建技能(技能管理模块)

创建场景完后,就需要去创建场景的技能列表

技能分为两大类

对话单元技能问答单元技能,这两个和此前文章提到的讯飞AIUI的“非问答类技能(自定义技能+开放技能)”与“问答类技能(自定义问答库)”类似


1. 自定义技能-对话单元技能 

对话单元代表着产品能够执行的某个特定任务

对话单元分为3部分

1.1 意图

假设用户的每一句对话都有明确的目的(具体来说,就是让系统执行某个操作),而意图(intent)就代表了对话系统对用户对话目的的理解

例如在一个询问天气的场景中,用户目的可以是想知道某个城市某天的刮风状况,那意图就可以是“查询风速”


1.2 词槽

此前在文章《【AI笔记】Chatbot中的填槽(Slot Filling)》中,我们聊过词槽,就是某一类词语的抽象聚类,可以用来当做条件,当词槽填充完整(条件满足)即代表当前的意图匹配上了用户的目的。


1.3 澄清话术

澄清话术即当前词槽如果没有填充的时候,应该如何引导用户补充信息

例如“查询北京的风速情况”,这里只有“位置”的词槽,但是不知道时间,所以澄清,引导用户“什么时间呢?”,用户回复“周二”,那么词槽就填充完整了

   “time”=“周二”

   “los”=“北京”


1.4 回复方式

当意图满足后,即识别出用户的目的,就要回应用户,响应他的目的

那如何算是满足了条件呢?

1.4.1触发规则

通过设定触发规则来触发回复内容。这里点赞下百度的触发规则设置,通过条件组的或,条件组间条件的与和条件本身可设定为非,组成了一套与或非,具有极大的灵活性。

条件的设定范围,这里给了三个

   · 会话过程中:即在整个session过程中,填充进入了就算,适用于多轮对话

   · 当前用户输入:指用户输入的上一句,填充进入了才算,此前隔了几个对话说的内容不算

   · 上轮对话意图:即之前的对话满足/不满足某个意图后,才能触发符合这个条件

1.4.2回复方式

设定的触发规则匹配上了,这时候需要响应用户的目的,响应的方式有三种

    · 直接回复

例如直接回复某个文本,或者执行某个写好的函数


    · 引导对话单元

符合条件后,引导用户询问更多的对话单元

例如当用户问了风速的时候,还可以引导用户问是否下雨


这个功能适用于目的相似的对话单元之间互相关联,以展示更多可能意图给用户选择。

或者用于推荐广告,例如询问“瘦脸针是什么”,可以推荐关联的商品问答单元


    · 引导问答单元

类似引导到对话单元,引导问答单元是引导到某个固定的问答上,匹配中某个问答,然后回复固定的文本内容。


1.4.3 响应的顺序

这三种响应方式并非单选,可根据需要选择,但是当触发条件都相同,同时符合了三种响应的时候,就按照设定的响应顺序取优先级最高的响应。


2. 自定义技能-问答单元技能

问答技能就是逐字全匹配功能,用户的一类聚类的意图,且是问题是固定的,可以直接创建问答技能匹配用户的问题。

    · 优点是,创建快速,只要问题全匹配上了,100%回复;

    · 缺点是,呆板,不能变动,只要问题有一个字没有匹配上问题,那么就匹配不上。


3. 预置技能

除了自己创建自定义技能外,还可以使用官方提供的预置技能,不过这个预置技能更像是在演示体验用的,期待后期开放更多的实用技能或其他开发者开源的技能。

(PS:和讯飞的AIUI不同,即使是预置技能,UNIT中也可以再训练)


3)准备对话数据(数据中心模块)

当我们创建好了技能空壳后,接着就要准备讯训练的对话数据了。

好比确定了产品的Fearture List后,就这就是写具体的需求文档,之后才能进行开发。


对话数据统一在数据中心录入和管理

其中 对话单元使用“对话样本集”和“对话模板集”数据训练

问答单元使用“问答集”数据训练


1. 对话样本集

对话样本集是对话样本的集合,可自定义添加,且支持导入功能(nice!)

· 对话样本

对话样本,即需要机器真正进行学习的数据,需要将训练的数据和对应的对话单元关联起来,才能进行监督学习(structured learning)。


进入对话样本集,对所需标注的对话样本进行标注

为进行监督学习,所以每一条对话样本都必须和之前设定好的对话单元(意图)相关联!并设定好语句中哪些命中了词槽。


· 正例和负例

并非每条对话样本都是符合意图的,例如“吃了吗?”和“气象查询”的场景八竿子打不着,如果不告诉机器这两者是没有关系的,机器可能会直接将“吃了吗?”当做某个意图,从而澄清问“你想问的是哪个城市的天气”


所以需要有负反馈,告诉machine哪些内容是无关的,这些和场景无关的样本就称为负例

同理,正例就是和场景相关的对话样本的标注


负例标注时,选择意图为SYS_OTHER

· 

2. 对话模板集

对话模板集是对话模板的集合

对话模板实际和问答特别像,只是问答是100%逐字全匹配,而对话模板则是动态匹配。


2.1 词类

先讲讲UNIT新出现的一种词,特征词

在UNIT中,句子中的词语可以分为三种类型“特征词”、“词槽”、“普通词语”

2.1.1 特征词(槽)

是一类词的聚类集合,用一个命名符号表示这一类词。


· 特征词(槽)和词槽的区别在于

1. 特征词不会被识别到json的结果中,仅用来方便机器进行匹配使用;

2. 特征词的颗粒度可以很粗,例如“我想查询”,“帮我查找下”,“查询”,“查”都可以归为“用户意愿”这个特征词中,但是词槽一般会分的较细

· 特征词创建/编辑

仅能通过批量上传的方式上传,这点不是很友好。


2.1.2 词槽

即在对话单元中设定的词槽


2.1.3 普通词语

除了“特征词”和“词槽”以外的词



2.2 对话模板

对话模板="选择意图"+"设定对应的句子公式"

machine直接拿用户的问题,去匹配这个句子公式,匹配上了就用,匹配不上就不用。

格式即为上述三种类型词之间任意组合。


看一个案例


上面的模板

“[W:0-10][D:user_sys_los][W:0-3][D:user_sys_time][W:0-10]”

是用来匹配“xxx地点xx时间会不会下雨”,其中[W:0-6]是通配符的意思,即可以是0~6个字符,一个汉字算两个字符。


如果用户问“你好,北京这地方明天会下雨吗?”能匹配上模板

但是如果用户问“你好,明天北京这地方会下雨吗?”模板就gg了,因为用户问的内容和模板
xxx地点xx时间”
的语句顺序匹配不上。


所以模板让机器学会语言的匹配规则,规则非常死板,和套用公式相同,难以变动。

但是优势可以快速创建,且通过通配符,能让对话模板具有一定的拓展泛化匹配的能力。


3. 问答集

问答集是的问答对的集合。

问答对就是对问题的文本逐字匹配,100%匹配的时候,回复对应的内容。


1个问答集可创建多个问答对

一个问答对可支持多对多的回答,如果有多个答案的时候,随机回复一个答案



以上就是技能空壳的设定和准备技能训练数据的模块


4)训练技能(训练与验证模块)

技能壳和对话数据准备好了之后,就可以进入训练,生成真正的技能

1. 沙盒与模型

正如前文提到的,模型需要训练,每次训练都是重新开始,新生成一个版本,新生成的模型需要放入沙盒中才能运作。


2. 训练新模型

训练的时候,“问答集”、“对话模板集”和“对话样本集”是分开训练的,其中“对话模板”和“对话样本集”可选择是否新训练。

从这里可以看出,实际这两个是不同的技能,使用的学习的方式也不同,对话模板的训练仅是设置好“匹配的模板”;

而对话样本集,则是真正的使用RNN进行训练,耗时较长,差不多,5-10分钟+100条样本/分钟才能训练好。


通过仅新训练某一技能的方式,可以方便针对不同的调整进行训练,同时对比训练的结果。


数据的来源就是此前准备的各种数据


3. 隐藏技能-生成训练数据

UNIT有一个隐藏的技能——直接帮你生成训练数据,非常强大!

在对话中直接“@UNIT 推荐对话样本”,让机器创建对话样本集(未标注的)

生成需要一定时间,可通过“@UNIT 查询推荐状态”查询进度


5)验证技能(训练与验证模块)

训练好技能后,直接和chatbot瞎聊,看看有没有训练歪了,有“体验模式”和“学习模式”两种

1. 体验模式

体验模式就是和chatbot瞎聊,对话内容不会加入到“对话样本集”中的“默认集”,期间可以@chatbot修改意图,词槽等

2. 学习模式

学习模式,即与chatbot对话内容会加入到“对话样本集”中的“默认集(默认的对话样本集)”的模式,此外,还会直接将chatbot识别的结果作为对话样本的标注结果一同加入到“默认集”中。


6)发布场景(场景发布模块)

场景训练好了之后,可以通过百度云调用,也可以使用DuerOS使用。

1. 百度云调用

在百度云控制台中创建应用,将场景添加到具体的应用中,之后可以调用应用的API使用应用内容的场景功能。


2. DuerOS使用

训练好的自定义技能,还可以发布到DuerOS开放平台中,供用户直接使用通过语音对话的方式,唤起技能和使用技能。

DuerOS技能开放平台,英文全称DuerOS Bots Platform,是DuerOS为第三方开发者提供的一整套技能开发、测试、部署工具的开放平台。第三方开发者可以在平台上,通过可视化界面,简单、高效地开发各类个性化技能。


整体讲完,再回过头看下,百度UNIT的结构还是很清晰的



三、评价下百度UNIT

1)优点

1. “真·Machine Learning”

使用对话样本集训练数据,真正的使用RNN去train,最终表现结果不错,让人欣喜。通过封装和图形化的交互,让不懂人工智能底层技术的用户也能训练出自己想要的模型,大大降低了训练任务型chatbot的入门门槛。


2. 支持多轮对话,操作简单

看过其他平台的多轮对话,需要自己设定复杂的路径,太过繁琐,而UNIT结果清晰,通过响应条件与或非的设定,再加上词槽的澄清,使得创建一个多轮对话变得很简单。


3. 百度全开放的AI能力

在PC时代,大家疯狂的吐槽百度的“恶”,其中的“百度全家桶”臭名远扬,但是在AI上,百度真的诚意满满!

AI几大领域,ASR,TTS,CV,NLP,AR均有开放,同时还开放了开源的数据集,良心!

配合百度的云应用和DuerOS,整个大开放平台上,技能的从生成、训练、上线、调用、维护都可以在平台上完成,这样强大的赋能,为开发者节省了大量的时间。


2)缺点

1. 页面结构功能强大,但较为复杂,不好上手

功能强大,刚看到的时候很懵,不知道如何下手,看了两遍教学视频才弄懂了,感觉页面结构较为混乱。


如果修改为顶部栏一级导航和侧边栏二级导航,可能会更好理解点

· 一级导航,顶部栏代表关键的环节

“技能与数据设定”  -》“训练与验证”  -》“更多设置”  -》“场景发布”

· 二级导航,将该环节的细分步骤列出

例如“技能与数据”设定中,仅放入“技能管理”和“技能数据管理”


再吐槽一点,很多二级页面没有返回,点击进入三级页面要再返回的时候,没有入口,需要再点击一级入口跳转…


2. 标注数据过程耗时耗力,需优化交互

数据标注量太大时,耗时很长,会很痛苦,交互需要优化以提高效率。

例如意图多的时候,下拉交互就很不友好,要么新增查询意图,要么修改为多标签展示,提高标注效率。

再比如训练的时候,@chatbot的方式修改意图,不方便,直接将入口放出来可点击效率更高


3. 无法做批量的Testing

现有的界面只能和chatbot一句话一句话对话,而且没法统计正确率,效率很低且不知道什么时候准确率是符合预期(例如准确率达到95%以上)可以上线了。

之后如果能批量上传Testing的数据(设定好对话文本,意图,词槽),将Testing给chatbot的对话文本识别出的结果和上传的数据进行对比,形成报表,就能知道目前的准确率,这点需要优化。


4. 等待时间较长

每个模型实际都用数据去train,所以训练时间较长…不过也能理解,毕竟是真的在train。


3)总结

虽然UNIT的页面的结构刚开始用容易晕,但熟悉后,整体上从创建场景到最终场景发布,整个流程还是比较顺畅的。

百度决心All in  AI,投入了大量的人力打磨,加上百度本身的技术,目前的开放平台功能已经很强大,对比此前体验的讯飞AIUI,拉开讯飞很大的距离。

而平台封装了大量底层机器学习算法,图形化界面的操作,大大降低了AI使用门槛,良心良心良心!


我自己有个判断,再过3年,大厂的AI基础设施也就搭建完毕了,之后就是看谁能利用好大厂的附能,形成强大的节点,收割新一波的流量。

5-10年,随着技术不断成熟,不断的封装接口化,应用层会有一波大爆发,期待ing…


惯例打个分

· 易用性:4星

· 智能性:4星

· 开放性:5星



#推荐阅读

-【AI笔记】讯飞人机智能交互平台(AIUI)的武林秘籍

-【AI笔记】Chatbot中的填槽(Slot Filling)


更多内容,欢迎关注公众号【朱利安笔记】,定期推送AI产品干货 ~

人工智能产品经理的那些事
6.0万字 · 4.4万阅读 · 79人关注