0%

智能家居自然语言理解平台的解决方案

参照百度大脑的项目经验训练我们自己的模型,研发我们的自然语言理解平台。

文档整理

资源

基本概念

1
2
3
4
5
6
在特定场景下的对话理解与交互能力。

技能主要用于解决特定场景下的对话理解与交互任务。同时UNIT平台提供了一些预置的系统技能(比如问候、电视指令等,更多系统技能会陆续开放),您可根据业务需要直接选用。
技能中包含了一系列『对话意图』或『问答意图』用于完成特定场景下的所有对话任务(例如,智能电视技能包含了换台、调音量、找部电影等一系列『对话意图』)。 技能训练出模型并生效到沙盒环境后,您可以在『训练/体验』对话窗口中与技能对话,体验技能的对话理解能力。您也可以在自己的产品中通API直接调用它,让您的产品具有智能对话理解与交互的能力。

### ```对话意图

【基本信息】

对话意图:intent,是在一个对话任务中技能要理解的用户目的(例如用户说”换到中央台”,那对应电视控制技能下的对话意图就是”换台”)。

名称:对话意图的英文定义,后续您可在程序调用中使用。

别名:对话意图的名称的中文表述,可以创建多个,对应一个对话意图的不同表达方式,可以帮助技能更容易理解一个对话意图的不同表述。

【词槽】

词槽:slot,是技能需要理解的用户对话对话意图中的一些限定条件。例如:”换到中央台”中的”中央台”就是一个”电视台词槽”,它会一定程度上影响技能对”换台”这个对话意图的执行。

词槽澄清:
在口语对话中,用户的一句话 (我们称之为单轮对话) 中常常并不会包含完整的词槽(例如,换台),而某些词槽对于对话技能的最终执行是不可或缺的(例如,电视台词槽)。因此,对话技能需要对用户发起”词槽澄清”询问(例如,换到哪个台?)来获取”不可或缺”词槽的信息(例如用户回答,要中央台)。UNIT平台可以支持定义哪些词槽是”不可或缺的”,也可以通过调整词槽顺序来定义哪个词槽应该优先被询问。

澄清话术:
在这里,我们可以定义对话技能进行词槽澄清时询问用户的问题(例如,换到哪个台呢?)。如果不加以定义,系统会使用默认的问题进行询问:请澄清词槽XXX(XXX代表词槽名称)。

添加方式:
开发者可以自行新建词槽,也可以复用当前技能中已创建过的词槽。此外依托百度的自然语言能力,UNIT平台内建了部分常用词槽供您使用。需要注意的是系统内建词槽是无法被进一步修改的。

词典:
每个词槽都需要对应一套词典,技能的专名词识别服务会结合词槽绑定的词典来识别用户问话中的词槽。开发者可以自行导入词典,对话技能进行词槽识别时,会优先考虑自定义词典中的词汇。

复用系统词槽:
复用系统词槽意味着开发者可以更灵活的”组装”自己的自定义词槽,让其直接整合系统内建词槽的识别能力。

【技能回应】

答复:
定义系统直接答复用户的方式,开发者可以选择:
i.返回一句对话答复。例如技能答复:今天天气还不错。
ii.执行一条函数来完成这一动作。例如技能抛出函数:flick(tv_channel);注意,unit提供的API结果中仅会告知开发者应该执行函数flick(tv_channel),但函数需要在开发者自身的产品中实现与执行。
引导:
对话技能除了可以直接答复用户,还可以通过配置引导动作,指示用户进一步明确需求。引导包含对话意图引导和问答意图引导,即分别引导至对话意图和问答意图。
配置对话意图引导需要配置的内容包括主话术,目标对话意图和对话意图引导话术。例如,当前对话意图是:golden_retriever;主话术是:请问您是想了解有关金毛的什么信息?目标对话意图是”golden_retriever_habits”,而对话意图引导话术是”金毛习性么?” 配置问答意图引导需要配置目标问答意图。

1
2
3
4
5
6
7
一个问答意图代表某一类问答对的主题,它的概念范围要比对话意图大,可以是同一类问题的集合。比如售前咨询FQA,售后咨询FAQ。开发者可以根据业务定义问答意图对应主题的范围。创建完问答意图后,可前往【训练与优化--训练数据--问答集】添加或导入具体的问答对内容。

名称:用于描述当前问答意图的主题的大写英文标识,在API调用中技能返回的JSON信息里会有。

别名:问答意图名称的中文表述。

### ```效果优化

【训练数据】

【对话模板】

对话模板

在UNIT中,对话模板可以让开发者在冷启动(缺少训练语料)阶段快速让一个任务式对话技能具有很好的对话理解效果。或在表达方式有限、几乎可枚举各种表达方式的控制指令类快速获得很好的对话理解效果。同时对话模板对理解能力的作用会优先于对话样本集,因此也可以用于对错误case的紧急干预。在对话模板让技能的对话理解达到一定的效果而很难进一步提升时,可通过标注更多的对话样本以达到更好的理解效果。

系统中对话模板的数量没有上限。

优先级:系统对对话模板之间的排列顺序是敏感的,排序高的模板会被优先匹配与使用,开发者可通过移动来改变对话模板的排序。

离线编辑:离线导入文件中对话模板之间的顺序即为导入后的优先级。注意:导入时会覆盖线上对话模板集中全部对话模板,请及时做好备份工作!

特征词

特征词是指一组具有相似特征的词,通常被用于约束某条对话模板的匹配范围(例如,天气、下雨、热等类别关键词)或提供一定限度的泛化能力(例如,我想要、我打算、我计划等辅助内容);活用特征词机制可以事半功倍的提高对话模板的精度和覆盖度。
特征词词典:开发者需自行导入词典,用于系统识别特征词。
口语化词

口语化词将在语义解析时会被自动忽略掉,以此来提高解析的精准率。比如通用场景下:嗯我看一下明天的天气吧 —> 明天天气,这里把”嗯、我、看一下、的、吧”等口语化词都去掉了。又比如特定场景里:预定如家酒店 —> 预订如家,在定酒店的场景里省略了 “酒店”, 可以将“酒店”配置为口语化的词。
系统预置了口语化词,您可以增删改,调整后也可以恢复系统默认的词典值。
对话样本集:是管理对话样本的集合,类似文件夹的作用,可以把不同来源的对话样本放在不同的对话样集中,也可以把不同时间段获取的对话样本分在不同的对话样本集中。

对话样本:是由开发者提供给技能的训练语料,它给对话技能示范了应该如何将用户的对话理解为对话意图和词槽。开发者可以在对话样本集中通过新建、标注、导入等操作来完成对对话样本的管理与调整。UNIT可以通过”训练”来观察并学习开发者标注的对话样本,并以此来优化技能的对话理解能力(在训练中需要打开对话样本集的开关并选择需要参与训练的样本集)。
标注状态:样本在线标注/编辑后即可生效,“已标注”的样本也可以点击重新标注/编辑进行修改;对话样本集中“已标注”的对话样本才可用于训练模型。

标注对话样本:开发者需要完成对对话样本对应的对话意图和词槽的标注。

标注对话意图:当前样本对应的对话意图,对话意图变更后槽位标记信息会被自动重置。 SYS_OTHERS为系统自动生成的对话意图,用于标记噪音样本(注:噪音样本即为技能的负例样本,它可以帮助技能模型识别哪些对话可能是不属于当应该理解的)。 CMD_UPDATE系列为系统自动生成的对话意图,用于标记多轮对话中,用户的澄清答复(例如用户回答,要中央台,则需要标注这条回答为 CMD_UPDATE_TV_CHANNEL,并且将”中央台”标记为”TV_CHANNEL”类的词槽)

【问答集】

问答集

问答集是承载问答对的容器,与技能中问答意图的定义一一对应,您可以批量将问答内容导入问答集,也可以在线编辑。
离线编辑 问答对可以离线编辑后导入问答集,导入后会在当前问答集中追加问答内容;也可以将某问答集中问答对内容导出。

训练/体验

【沙盒环境】

沙盒是UNIT平台提供给开发者验证技能模型效果的环境,开发者将模型训练后生效至沙盒环境,即可和技能对话,通过对话可验证沙盒中模型的效果,也可实现数据标注。沙盒环境中只能生效1个模型,新模型生效后,之前生效的模型自动失效。
模型版本:沙盒环境当前生效的模型的版本。
更新时间:沙盒环境最近一次更新的时间。
状态:沙盒环境当前的状态,分为已停用、启用中、模型生效中、运行中、模型生效失败。
已停用:表示沙盒环境处于停止状态,可通过点击“启动”按钮启动沙盒环境。
启用中:表示沙盒环境正处于启动中,待启动完成后,才可进一步加载并生效模型。
模型生效中:表示沙盒环境正在加载生效一个技能模型,生效成功后状态变为”运行中”,生效失败后,沙盒状态为”模型生效失败”。
运行中:表示沙盒环境中有个可以正常对话(平台对话体验窗口或对接接口)的技能模型。而刚创建技能时沙盒也处在运行中,此时沙盒中的模型是一个空的模型,还不能用于对话,需要定义技能,添加训练数据,训练且生效到沙盒后才能用于对话。
模型生效失败:表示沙盒环境模型加载生效失败,此时请通过百度云工单系统、QQ群(805312106)或者UNIT论坛联系客服;其中,提交百度云工单系统时,工单类型请选择“人工智能-理解与交互技术UNIT”。
【模型】

模型是开发者配置技能、添加/标注对话样本、创建对话模板、导入问答集后通过UNIT平台内置的各种学习引擎训练出的技能核心文件,模型需生效至沙盒环境后才可发挥作用。

模型训练时,开发者需选择训练数据,包括技能配置、高级设置、问答集、对话样本、对话模板。

对话样本:开发者提供的对话样本数据,以对话样本集为单位存储并选择,训练时可选择使用沙盒中的模型(不会重新学习,耗时端)或重新选择样本。 - 使用沙盒中的模型:不会重新学习,耗时短。 - 重新选择样本:重新学习,约100条样本/分钟,耗时长。选择的样本集中只有已标注的对话样本才会参与训练。
对话模板:开发者提供的对话模板数据在每次训练时都会默认参与训练。
模型在训练过程中分为初始化、训练中、训练完成、训练失败4个状态。

初始化:模型训练过程中第1个阶段。
训练中:模型训练过程中第2个阶段。
训练完成:模型已训练完成,此时并不可以直接使用,需生效至沙盒环境才可以使用。
训练失败:模型训练失败,需开发者手动删除。

训练自然语言理解技能的总体流程

总共分为3个阶段,需求分析并做好前期准备工作→通过UNIT创建最小可用技能模型→持续优化技能模型,具体如下:

(1)第1阶段:需求分析。当前阶段需要有熟悉业务的人员参加,例如:产品经理、业务负责人等。先分析业务,明确业务中哪里需要通过和用户的对话来完成;再确认相关对话逻辑。最后基于之前的分析,从之前沉淀的数据中提取有价值信息,用于后续技能创建与训练;如果是新业务或之前没有准备,也先不用着急,我们可以先完成其他部分,但综合来看,业务中的真实数据是训练技能时最理想的“知识”。

(2)第2阶段,创建&训练技能。当前阶段就是要赋予技能模型对话能力了。赋予技能模型对话能力和教小朋友说话一样,要先确认教他的知识点,而这些知识点就是技能的意图。基本定义灌输完成后,就需要通过大量的练习题来帮助技能模型理解、巩固与记忆。最后,可以通过考试,来检测技能模型的学习成果。当考试合格后,就可以用于实战了,即接入咱们的业务中(API、SDK等)。

(3)第3阶段,持续优化。因着业务程度复杂、用户画像变化等因素,技能之前掌握的只是知识可能不足以应对新市场,这时我们需要通过更多的“练习”与“考试”来帮助技能提高能力。目前技能还无法完全自主学习并提高自己,还需要训练人员辅助。

本站所有文章和源码均免费开放,如您喜欢,可以请我喝杯咖啡