注:因产品概念调整,本文中“BOT”现已更名为“技能”,请各位开发者注意
前言:
本文章是以儿童故事机产品为业务场景打造的一个初级入门教程,教程中主要介绍了如何拆解业务与合并意图,以及模板片段的使用。考虑到读者属性,一些进阶功能没有介绍,后续会通过其他文章教大家如何使用。
***帖子中部分图片比较模糊,可下载附件查看,下载链接:https://pan.baidu.com/s/1ZIIFHP74v7e7T25_eP88wA 密码:vb1p***
一、 UNIT 2.0 基本概念
https://ai.baidu.com/docs#/UNIT-v2-intro/top
二、 实现一个对话技能的整体流程
总共分为3个阶段,需求分析并做好前期准备工作→通过UNIT搭建最小可用技能→持续优化技能,具体如下:
(1)第1阶段:需求分析。当前阶段需要有熟悉业务的人员参加,例如:产品经理、业务负责人等。先分析业务,明确业务中哪里需要通过和用户的对话来完成;再确认相关对话逻辑。最后基于之前的分析,从之前沉淀的数据中提取有价值信息,用于后续技能实现与提高;如果是新业务或之前没有准备,也先不用着急,我们可以先完成其他部分,但综合来看,业务中的真实数据是提高技能时最理想的数据。
(2)第2阶段,创建技能。当前阶段就是要定义技能能力了。定义技能能力说话和教小朋友说话一样,要先确认他的知识点。基本定义灌输完成后,就需要通过大量的练习题来提高技能、巩固与记忆。最后,可以通过考试,来检测技能的能力。当考试合格后,就可以用于实战了,即接入咱们的业务中(API、SDK等)。
(3)第3阶段,持续优化。因着业务程度复杂、用户画像变化等因素,技能所展现的能力可能不足以应对新市场,这时我们需要通过更多的“练习”与“考试”来帮助提高技能的能力。目前技能还无法自己完成能力的提升,还需要训练人员辅助。
三、 业务需求分析
1、 业务场景分析:明确目标,确定边界
在业务中实现智能对话,先别急于动手,一定要想清楚、想透彻,避免后续带来更大的调整成本或做无用功。一步一步操作,有了坚实的基石,业务架构才能更稳定。
a) 梳理业务,明确目标
在开始动手之前,我们需要先思考智能对话能给业务带来哪些价值,哪些业务可以用智能对话来替代,基于智能对话能力业务是否有可以拓展的点。
在一个儿童故事机中,常见的操作有几类:
① 小朋友和故事机互动(如听音乐、讲故事);
② 对故事机进行控制(如打开故事机上的灯、调节音量大小);
③ 系统管理(如资源下载、系统更新、wifi设置);
经过分析我们不难发现:
① 和小朋友互动属于故事机的主要功能,没有了语音交互的故事机一下子成了上个世纪的产品。所以说:小朋友和故事机互动需要通过对话方式实现。
② 对故事机的硬件控制,综合便利性等因素,故事机需要设计相关按钮来完成操作;而考虑到创新性,有些操作是可以通过对话方式实现的,比如:开灯、小点声等。所以说:对故事机硬件控制可以通过对话方式实现。
③ 对故事机进行系统更新等操作,是一个偏底层的操作,我们需要确保操作万无一失;此时用语音操作,可能会造成不可挽回的后果。所以说:系统更新、资源下载等行为还是通过APP等方式完成最为稳妥。
b) 确定边界,分析任务类型
梳理完业务之后,需要对梳理出的结果进一步分析。分析业务所涉及的对话类型、关联程度等,以便于为后续配置工作寻找切入点,也便于评估工作量。
2、 功能定义:确定关键信息要素与优先级
接下来,就需要定义具体功能了,同时定义各功能优先级,确保产品快速生产发布。
儿童故事机场景业务件逻辑相对简单,基于上文中罗列的功能点,就基本完成了功能定义(有的业务比较复杂,例如票务场景改签功能可以拆出改签航班、改签起止地等)
儿童故事机比较特殊,因此除了上文中提到的准备工作外,还需要确认是否需要资源,并结合企业自身情况确认当前资源是否满足,不满足的何时可以满足……这些也都是关键。
通过进一步分析,确定功能实现优先级。
讲故事、背诵诗词因为无门槛,优先;脑筋急转弯因市场需求大,优先;故事机硬件控制是提升产品竞争力的关键,优先。
听音乐、背诵诗词因当前资源无法满足,需要协调,放在二期为佳,开发第一版时可以同步去准备资源。知识百科因为涉及的内容太多了,虽然资源是ready的,但实现成本太高,为确保产品按计划发布,则放入二期支持。
学习,是一个既没现成资源,实现起来又复杂的功能,为了不影响一期和二期,该舍则舍!
(其他功能分析同上,不做具体列举)
3、 对话逻辑梳理:任务型对话的常规与异常情况、问答型的知识分类
如上文所介绍,业务中的对话系统中的对话任务分为任务型和问答型,不同类型的任务需要做的准备工作也不同。
【任务型对话】
任务型对话场景相对复杂,要考虑好常规情况的对话逻辑,也要准备好异常情况的处理方案。
儿童故事机的对话任务相对独立,任务间关联度不高,因此意图拆解起来很容,彼此相对独立。例如听音乐,意图很清晰,就是听音乐,其涉及关键信息有音乐名称和作者;这些关键信息类似于筛选条件,可以定义技能的一些细节,也可以完美对接业务中对话任务以外的部分。而硬件控制只需要拆出要控制的硬件即可。例如对灯的控制,意图就是开关灯,关键信息就是开or关。
实现智能对话的过程就是定义和训练技能,和教小朋友说话一样。
小朋友很聪明,但什么都不会,我们需要思考如何教小朋友可以帮助小朋友快速理解。可以通过一些技巧,特征来帮助小朋友记忆,可能影响到小朋友学习的就要避免。儿童故事机场景中,讲故事和听音乐场景的表达方式相似程度高,都是“我想听XXX”或“我想听XXX的XXX”。那么对于这种表达方式相似度高的对话任务,容易产相互干扰,不便于理解,那么我们就把他们拆到两个技能处理,再由业务逻辑层(对话任务以外的部分)来判断,毕竟这个成本比教小朋友说话容易的多。(多技能同时调用,按业务需要优先选择高优技能返回结果;多技能调用属于进阶操作,本文章不做详解)
如上图,定义一个听音乐+故事的意图,关键信息由音乐或故事名称变成了作品名称。当我们解析到作品名称后,再来判断是音乐还是故事。
【问答型对话】
问答型对话就容易多了,不存在复杂的对话逻辑,也不需要去解析关键信息,只要基于语义匹配到相似问题并给出答案即可。
在儿童故事机场景中,脑筋急转弯和知识百科,都可以通过问答型对话实现,
4、 场景数据收集:在真实场景下用户会怎么问?
日常沟通中,每个人都会有自己说话的习惯。汉语博大精深,除了口语,近义词也是影响语义理解的关键因素。传统的自动化流程,计算机都是通过关键词匹配来“理解”用户的意思;而在人工智能时代,技能要做的是对用户表达内容的语义解读。
如何提升技能的语义解读能力呢?AI离不开大数据,我们需要整理实际业务场景中用户的问法,尽可能多尽可能全。通过人工智能的深度学习技术,技能就可以“泛化”出更多的问法。
四、 创建&训练技能
注册百度账号,打开http://unit.baidu.com ,进入UNIT:
1、 创建技能
在UNIT平台创建技能是第一步。新建一个技能,只需要输入一个技能名称,非常简单。
l 技能名称:儿童故事机
l 技能描述:随意填写,用于区分技能,给技能做备注。
2、 技能与意图
一个技能中可以新建结合业务深度定制的意图与对话逻辑。
技能中可以编辑意图,也就是上文中提到的对话任务。意图分为对话意图和问答意图,对话意图用于配置任务型对话,问答意图用于配置问答型对话。
3、 新建意图
a) 新建“听音乐”对话意图
第一步,点击“新建对话意图“创建一个新的对话意图。
第二步,先设置意图的基本信息。
l 意图名称:给意图起一个名字,用于分辨意图,后面做参数判断时,也会需要【图中文字:SONG】
l 意图别名:用于技能未准确识别意图时,向用户澄清时的参数,例如:您是要听歌吗?(澄清话术可以在设置中完成,详见下文)【图中文字:听歌】
l 描述:用于备注当前意图使用场景等【图中文字:听歌意图】
第三步,设置意图有关的词槽。
词槽是一个意图中的筛选条件,就是上文中提到的关键信息。“听音乐“意图关键信息是歌曲名称和演唱者,需要分别关联歌曲名称和演唱者2个词槽。
先创建作品名称词槽,点击“添加词槽“,弹出添加词槽图层,先设置添加方式。
l 添加方式:可新建自定义词槽,也可以复用已创建的自定义词槽【当前技能中还未创建过词槽,因此图中选择“新建自定义词槽”】
l 词槽名称:词槽的名字,和意图名字类似,用于分辨词槽和参数判断【图中文字:user_song,其中“user_”为系统限制部分】
l 词槽别名:别名概念同意图,用于技能向用户澄清时的参数,例如“小朋友,你想听的歌曲名是《爸爸去哪儿》吗?其中,“歌曲名”是词槽别名【图中文字:歌曲名】
新建词槽之选择词典。词典是词槽具体的值,例如歌曲名《爸爸去哪儿》。词槽有2种添加方式,一个是自定义导入,另一个是复用系统提供内容。【由于系统暂未提供歌曲名和故事名词槽,当前词槽词典需要自行上传,我们上传一个词典是“爸爸去哪儿”;点击“上传词典”即可查看上传流程,具体上传操作当前文章不做演示】
新建词槽之设置词槽意图关联属性。相同词槽在不同意图中可能会有不同的细节的设置。
l 词槽必填:词槽在当前意图下是否为必须条件。显然,听歌听故事意图中作品名称是必须要提供的。【图中设置:必填】
l 澄清话术:当小朋友没有告知歌曲或故事名称时,技能反问的话术。【图中文字:小朋友,你想听什么歌呢?】
l 其他设置项属于高级设置项,在当前文章中不做解读【图中澄清方式:普通澄清话术;图中澄清论述设置:3】
最后点击确定,完成词槽创建,并将词槽与当前意图关联。
同理,创建作者词槽,参数如下:
l 添加方式:【选择:新建自定义词槽】
l 词槽名称:【编辑:user_author】
l 词槽别名:【编辑:作者】
l 自定义词典:【上传:资源库中作者姓名】
l 系统词典:系统提供的词槽词典中有歌手名称,可以直接选中降低配置成本【选择:sys_per_singer】
l 词槽必填:考虑到实际业务中小朋友对歌手的了解,当前词槽不做必填限制【选择:非必填】
l 澄清话术:当小朋友没有告知歌曲或故事名称时,技能反问的话术。【编辑:小朋友,你想听谁的歌呀?】
l 其他设置项属于高级设置项,在当前文章中不做解读【澄清方式:普通澄清话术;图中澄清论述设置:3】
第四步,配置对话回应部分。
对话回应部分中包括了对话回应内容与对话回应触发规则。在儿童故事机场景中,当小朋友表达要听歌的意图时,故事机应该播放响应歌曲。
l 答复类型:由于是执行某个操作,而不是直接回复给小朋友一句话,因此我们选择执行函数;同理,如果是答复一句话,可以选择文本内容【图中设置:执行函数】
l 答复话术:定义一个终端能理解指令,没有严格要求,只需要和终端对应的指令一致即可【图中文本:play_song】
l 触发规则:触发规则以词槽为主,由于上面在创建词槽时候定义了词槽的必填属性,再次就不需要重复设置了。当然,创建词槽时也可以不做设置(非必填),再在触发规则中具体设置【图中未做任何设置】
第五步,点击保存,完成意图创建
至此,我们的听歌意图就定义完成了。在技能的意图管理中,我们可以看到刚刚创建的意图。
b) 新建“音量调节“对话意图(省略相似配图)
第一步,点击“新建对话意图“创建一个新的对话意图。
第二步,先设置意图的基本信息。
l 意图名称:给意图起一个名字,用于分辨意图,后面做参数判断时,也会需要【图中文字:VOLUME】
l 意图别名:用于技能未准确识别意图时,向用户澄清时的参数,例如:您是要听歌吗?(澄清话术可以在设置中完成,详见下文)【图中文字:调节音量】
l 描述:用于备注当前意图使用场景等【图中文字:调节音量意图】
第三步,设置意图有关的词槽。
词槽是一个意图中的筛选条件,就是上文中提到的关键信息。“音量调节“意图关键信息是把声音调整方向(大或小),需要关联声音调整方向词槽。
先创建音量调节方向词槽,点击“添加词槽“,弹出添加词槽图层,先设置添加方式。
l 添加方式:当前技能中还未创建过相关词槽,新词关联词槽时需要新建一个词槽并关联【配置项:“新建自定义词槽”】
l 词槽名称:词槽的名字,和意图名字类似,用于分辨词槽和参数判断【图中文字:user_volumn_control,其中“user_”为系统限制部分】
l 词槽别名:别名概念同意图,用于技能向用户澄清时的参数,例如“小朋友,你想把声音调大吗?其中,“把声音”是词槽别名【配置项:把声音】
音量调整方向词槽的词典,系统暂时未提供相关词槽,可以在自定义词典中上传【点击“上传词典”即可查看上传流程,具体上传操作当前文章不做演示;词典详情如下图,帖子会附词典附件】
这就是词槽词典上传文件的格式,#代表归一词的同义词,当用户说“调大”的时候,系统会归一到“大”,这样咱们只需要用“大”来判断用户意图中关键信息就好了,不需要分别判断“大”、“调大”、“放大”等。
新建词槽之设置词槽意图关联属性。相同词槽在不同意图中可能会有不同的细节的设置。
l 词槽必填:词槽在当前意图下是否为必须条件。显然,音量调节意图中音量调节方向是必须要提供的【但为了展示如何在对话回应中配置对话逻辑,这里就不做必填设置了,配置项:非必填】
l 澄清话术:当小朋友没有告知音量调节方向时,技能反问的话术。【配置项:小朋友,你想把声音调大点还是调小点呢?】
l 其他设置项属于高级设置项,在当前文章中不做解读【澄清方式:普通澄清话术;澄清论述设置:3】
最后点击确定,完成词槽创建,并将词槽与当前意图关联。
第四步,配置对话回应部分。
对话回应部分中包括了对话回应内容与对话回应触发规则。在儿童故事机场景中,当小朋友表达要调节音量时,故事机执行相应操作。
l 答复类型:由于是执行某个操作,而不是直接回复给小朋友一句话,因此我们选择执行函数;同理,如果是答复一句话,可以选择文本内容【图中设置:执行函数】
l 答复话术:定义一个终端能理解指令,没有严格要求,只需要和终端对应的指令一致即可【配置项:set_volumn】
l 触发规则:音量调节方向为调节音量时必须要提供的信息,因此我们将其设置为必填。
l 范围:规则生效范围【图中设置:会话过程中】
l 词槽:选择要设置相关规则的词槽【图中设置:user_volumn_control】
l 关系/状态:由于需要小朋友提供,因此设置为已填写的【图中设置:已填充】
l 内容:通常判断词槽为某个值时,会用到此项【图中未做任何设置】
第五步,点击保存,完成意图创建
至此,我们的音量调节意图就定义完成了。在技能的意图管理中,我们可以看到刚刚创建的意图。
c) 新建“查询知识百科”问答意图
第一步,点击“新建问答意图“创建一个新的问答意图。
第二步,先设置意图的基本信息。
l 意图名称:给意图起一个名字,用于分辨意图,后面做参数判断时,也会需要【图中文字:FAQ_WIKI,其中“FAQ_”为系统限制部分】
l 意图别名:用于技能未准确识别意图时,向用户澄清时的参数,例如:您是要查询知识百科吗?(澄清话术可以在设置中完成,详见下文)【图中文字:查询知识百科】
l 描述:用于备注当前意图使用场景等【图中文字:查询知识百科意图】
第三步,点击保存,完成意图创建。
问答意图创建时没有对话意图那么复杂,只需要定义意图基本信息即可。
至此,我们的听歌意图就定义完成了。在技能的意图管理中,我们可以看到刚刚创建的意图。
4、 添加训练数据
新建意图完成的是业务中对话逻辑部分的配置,下面就是通过数据来训练技能了,类似于通过练习题来巩固小朋友学到的知识。
UNIT提供了3种提供训练数据的方式,顾名思义,对话模板和对话样本与对话意图有关,问答对于问答意图有关;集是指的集合,用于存储训练数据。每种训练数据的用途和效果不同:
l 对话模板:可精确匹配某种句式,常用于短句或指令;对话模板优先级高于对话样本,因此可以用来干预;
l 对话样本:人工智能深度学习的关键,通过一定量的对话样本,技能可以有很好的训练效果,可以理解更多的对话内容;
l 问答对:问答对所在的问答集与问答意图一一对应,常用语固定问答;
因此,我们要先基于我们的业务分析对话场景的特点,在看通过什么方式来实现更稳妥。不同意图由于说话的特点不同,训练的方式也会有所不同。
a) “听音乐”意图
首先基于之前收集的真实业务沉淀的数据,分析特征。
从数据中我们不难发现,句式基本组成为:主语(我、给我)+动词(想听、要听、播放)+名词1(歌曲名称:爸爸去哪儿、小苹果)+名词2(歌、儿歌等泛指儿歌的词),其中,主语有一定概率不出现,名词1和名词2至少出现一个,但很少同时出现;那么,我们可以考虑用模板实现。由于儿童故事机面向的用户是小朋友,小朋友说话会不按套路出牌,所以我们要考虑好语序的问题。
模板中存在一个概念叫特征词,是指具有某一类特征的词,像当前case中的动词(想听、要听、播放)和名词2(歌、儿歌等泛指儿歌的词)都可以用特征词来表示。所以,我们来创建2个特征词:“动词”和“名词2“的特征词。
【“动词”特征词】
l 名称:特征词名称【图中文本:kw_play,其中“kw_“为系统限制部分】
l 描述:特征词描述,用于备注【图中文本:听音乐case中的动词】
l 词典值:特征词的词典【图中文本:想听、要听、播放、唱】
【“名词2”特征词】
l 名称:特征词名称【图中文本:kw_song,其中“kw_“为系统限制部分】
l 描述:特征词描述,用于备注【图中文本:听音乐case中泛指儿歌的名词】
l 词典值:特征词的词典【图中文本:歌曲、歌、儿歌、歌儿】
创建好特征词,开始编辑模板。模板实际是模板片段,也就是积木中的积木块,相比传统固定模板更灵活。基于刚才对业务的分析“名词1和名词2至少出现一个,但很少同时出现”,对于这种“或”的情况,可以通过多个场景模板实现。
【出现名词1的模板】
l 选择意图:选择当前模板匹配的意图【图中设置:SONG】
l 模板片段:模板可以由一个或多个模板片段组成,多个模板片段也可以组合成一个大的模板片段。每个模板片段配有必须匹配和顺序2个属性:必须匹配是指的用户query中是否有片段对应内容时才会被识别为响应意图,顺序是指的当前模板片段的位置(0代表任意位置)【图中设置:模板①,必须匹配“否”,模板片段“我”,顺序“0”; 模板②,必须匹配“是”,模板片段“[D:kw_play]”,顺序“0”; 模板③,必须匹配“是”, 模板片段“[D:user_song]”,顺序“0”;
l 其他设置项属于高级设置项,在当前文章中不做解读【阈值:0.7;解析返回所有词槽:是】
【出现名词2的模板】
l 选择意图:【图中设置:SONG】
l 模板片段:【图中设置:模板①,必须匹配“否”,模板片段“我”,顺序“0”; 模板②,必须匹配“是”,模板片段“[D:kw_play]”,顺序“0”; 模板③,必须匹配“是”, 模板片段“[D:kw_song]”,顺序“0”;
l 其他设置项属于高级设置项,在当前文章中不做解读【阈值:0.7;解析返回所有词槽:是】
b) “音量调节”意图“
同样基于之前收集的真实业务沉淀的数据,分析特征。
经过分析不难发现,“音量调节”场景对话更简单,基本上由名词(声音、音量)+动词(调大,降低)组成。动词已作为词槽关联在意图中,还需要创建一个特征词
【“名词”特征词】
l 名称:特征词名称【图中文本:kw_volumn,其中“kw_“为系统限制部分】
l 描述:特征词描述,用于备注【图中文本:音量调节case中泛指声音的名词】
l 词典值:特征词的词典【图中文本:声音、音量、声儿】
【“音量调节”模板】
l 选择意图:选择当前模板匹配的意图【图中设置:VOLUMN】
l 模板片段:场景case中均会出现“名词(声音、音量)”和“动词(调大,降低)”,只是顺序有所不同,因此模板配置时候,需要注意“必须匹配”项和“顺序”项【图中设置:模板①,必须匹配“是”,模板片段“[D:kw_volumn]”,顺序“0”; 模板②,必须匹配“是”,模板片段“[D:user_volumn_control]”,顺序“0”
l 其他设置项属于高级设置项,在当前文章中不做解读【阈值:0.7;解析返回所有词槽:是】
c) “查询知识百科”意图
当前意图对应的是一个典型的问答场景,因此我们需要基于之前创建的问答意图,在同名问答集中,编辑问答对。
在问答集中,可以看到刚才创建的问答意图的同名问答集。
将之前准备好的知识库按照系统规定的格式整理完成后,直接导入即可。当然,可以在线新建或编辑。一个问答对中可以含有多个问题和多个答案,多个问题用于机器学习,多个答案可实现技能随机回应。
5、 训练模型
至此,数据准备已标注工作基本完成,可以触发模型训练操作来体验对话效果。训练一个模型的过程系统会自动完成,UNIT用户只需在训练之前选择本次训练要使用的训练数据即可。
点击“模型优化”-“模型管理”或页面右上角的“训练”进入模型管理页,点击“训练并生效新模型”来开始模型训练工作。
选项共分为3大类:技能配置和问答集、对话模板集、对话样本集,详情如下:
l 技能配置和问答集:包括了技能的意图配置与问答集数据【生效意图管理中全部对话意图(不包括预置技能中“停用”状态的对话意图)的意图、词槽(含自定义词典、系统词槽)、回应(含触发规则)、问答意图、问答集和高级设置】
l 对话模板集:包括对话模板部分训练数据【当前技能训练数据使用的对话模板,图中设置:生效全部模板】
l 对话样本集:包括对话样本部分训练数据【当前技能未提供对话样本作为训练数据,图中设置:使用沙盒中的的模型】
l 描述:用于备注当前模型【图中未作任何编辑】
选择完成后,点击“训练模型并生效到沙盒”开始训练。训练好的模型会自动生效到沙盒环境中,用于效果测试。
在当前页可以看到沙盒环境状态及沙盒环境中的模型版本,训练的模型会出现在模型列表中。待模型训练完毕且沙盒状态处于与正常运行中时,就可以进行效果测试了。(首次训练时间较久)
OK,技能已训练完成,下面开始体验吧~
五、 体验区
1、 听音乐
a) 单轮交互
b) 多轮澄清
2、 音量调节
a) 指令
b) 归一词的应用
3、 百科知识
本入门教程到此结束,该教程中的词槽词典,问答对等资源点击下面链接即可下载:
链接:https://pan.baidu.com/s/15N82kKOhyJGbBnLAVK5NDw 密码:pzdu
使用过程中有任何问题欢迎留言交流,或加入百度Hi群:1617262、QQ群:805312106讨论交流。
也欢迎微信扫码关注UNIT公众号,获取最新动态消息。
干嘛呢
图太小,看不请
太啰嗦了。。。emmmm。。。
asd
很好的教程
是您编码格式不对吧?系统要求是UTF-8
我上传demo的txt文件时能成功,上传自己的txt出现“文件编码错误”,好奇怪
可以参考UNIT文档,https://ai.baidu.com/docs#/UNIT-v2-download/top
词槽怎么自定义词典,有什么参考教程吗
收到,已更正,感谢提醒!
三、 业务需求分析
1、 业务场景分析:明确目标,确定边界
在业务中实现智能对话,先别基于(错别字)动手,一定要想清楚、想透彻,避免后续带来更大的调整成本或做无用功。一步一步操作,有了坚实的基石,业务架构才能更稳定。
这些可以在业务逻辑层按照业务需要轻松定义,每个企业的业务逻辑都不同,并不涉及对话理解,所以没在帖子中写明
怎么播放音乐呢,音乐怎么存放,这个关联,没有详细解释
讲解的非常全面详细
故事机作为提升的示例很合适呀
UNIT的服务是在百度云上的
我的意思是开发平台是什么,是在百度云上写的么
如此详细的示例
在哪里设置bot? UNIT2.0平台
用你熟悉的开发语言开发即可,只需要调用百度提供的api即可