第六章 效果优化
机器人能够识别用户说的话并与用户进行交互,是因为机器人背后有许多自然语言处理模块支撑。为了系统地提升机器人的效果,可以针对不同模块进行优化。在效果优化部分,平台提供了多个工具帮助开发者优化机器人的各个自然语言理解模块。做为开发者,你可以:
利用[短语挖掘]扩充词库。获取开发者所在领域的专业词汇、实体、概念短语,对提升机器人的理解能力至关重要。利用挖掘工具,可以有效地从历史语料中获取这些短语。
利用[句子挖掘]获得相似说法。机器人可以从多样、丰富的“相似说法”中学习更多用户说法的规律,挖掘可以帮助开发者高效获得历史语料中的“相似说法。
利用[知识库优化]修复瑕疵。起初创建的知识库通常会有各种“瑕疵”。利用知识库优化,可以在平台的指引下,修复知识库瑕疵,让机器人在更高质量的训练数据中学习语义规律。
利用[高级模型]提升语义理解能力。高级模型会针对开发者提供的知识库进行针对性的训练和学习。通常,高级模型比平台预置的普通模型语义理解的准确度高。
利用[相似说法学习]持续优化。机器人上线后,开发者可以在“相似说法学习”中教育机器人学习容易理解错误的用户表达,持续优化机器人的语义理解能力。
6.1语料管理
在“对话机器人”领域,语料通常指的是人与人、人与机器人之间交互时所产生的原始对话。
举个例子,假设你的企业需要为用户提供售后环节的客户服务。你的终端用户和你的运营人员,发生了如下一段对话:
对话示例
终端用户: “请问我15号购买的口红,什么时候到北京?”
运营人员: “请您登陆我们的物流查询系统,输入订单号,查询您的订单的物流状况。”
上述这段对话就是一段原始语料。 进一步地,在本文档使用“语料”一词的绝大多数场合,语料将特指为上述对话中终端用户所说的那一段话。
线下语料、线上语料
根据不同的语料获取方式, 可以按照语料来源, 对语料进行分类。平台将语料分为两类:
线下语料。线下语料是存放在你本地设备中的语料。例如, 通过上文前两种方式获得的语料, 一般都是线下语料。
线上语料。线上语料是存放在云服务器中的语料。例如, 通过上文最后一种方式获取的语料, 一般是线上语料。
平台操作
线下语料管理
在效果优化部分使用线下语料,需要首先将语料上传到平台中。
1 登录平台后从以下路径 效果优化/语料管理/线下语料管理。
2 点击上传语料。
3 下载语料库导入模板。
4 按照语料库导入模板规定的格式,录入语料并在本地保存。
5 点击上传语料中的选择文件
6 选择本地文件,完成上传。
相同内容的语料集请不要重复上传,系统将自动过滤多个文件中的重复语料。
高质量的语料
高质量的语料应该尽量满足如下几个条件:
贴近业务。例如,如果你希望机器人来回答用户“查询物流”的问题,那语料集就应该包含用户在表达“查询物流”这一意图时所说的话。
含义明确。例如,用户常用的表情符号、感叹词“哦、谢谢”等语料并没有明确表达用户的意图, 不应该成为一条单独的有意义的语料。
表达自然。例如,在表达“查询物流”时, “我的快递还有几天能到北京?” 是一种自然的表达 。与之相比,“我购买的货物到达首都的倒计时时间是什么?”, 显然是不自然的。
表达多样。例如,在表达“查询物流”时, “我的快递还有几天能到北京?”、“我要查快递”、“北京到上海需要几天?” 都是很不同的表达。表达方式越丰富越好。
规模充足。例如,如果你有一份有1万条语料的语料集, 搭建的机器人的起始效果通常会比较好。尽管我们并不限制语料规模, 但是, 总的来说, 多多益善。
语料的获取方式
根据业务的实际情况, 可以采用特定的方式来获取高质量的语料。最常见的是如下三种情形:
已经积累了大量终端用户和运营人员的历史交互语料。此时,只需要对这些原始交互语料, 做一些简单的清洗, 就可以生成一份质量不错的语料。常见的清洗工作包括:
从原始交互语料中,筛选出终端用户说的话,舍弃掉运营人员的回复。
删除掉整句话无明显意义的语料。通常的情形是整句话只包含数字、链接、“哦“等感叹词、“请问一下”等开场白。诸如此类的语料, 大致删除掉。
项目从零开始,完全没有任何历史语料。此时, 就需要开发者模仿终端用户的提问方式, 创造出语料。可以想象, 这通常是一个枯燥的过程。为了提高效率, 你可以:
联系我们的运营人员, 获得使用语料众包平台“吾来论语”的权限。
在吾来论语上发布众包任务, 集思广益, 获得语料。这通常是零语料搭建机器人时, 获取语料的最佳方式。
如果你的机器人已经上线, 开始服务你的用户, 你可以在平台的会话日志)页面获得所有的用户历史交互语料。
语料的用途
实现一个智能机器人有两个核心步骤:
第一,训练机器人的学习能力,让“他(她)”学会理解和判断你终端用户的意图。
第二,评估机器人的学习效果。只有满足要求,才能“上岗”成为你的数字员工。
在上述两个步骤中,高质量的语料都起着至关重要的作用。
高质量的语料可以让机器人学得更多、学得更好。
高质量的语料可以让运营人员更容易评估机器人的效果,不会出现测试阶段和上线后效果出现巨大差异。
如果你已经获得了一份高质量的语料, 那么, 在效果优化模块中, 你可以将这份语料应用在如下几个工具中:
短语挖掘。将语料传入短语挖掘来发现业务场景中常用到的一些实体。
句子挖掘。将语料传入[句子挖掘]功能来发现业务场景中的知识点、相似说法。
相似说法学习。将语料传入[相似说法学习], 来审核待定相似说法,丰富机器人的知识。
模型评测。对这份语料进行标注并传入[模型评测]来评测模型效果。利用评测的结果,来决定是否让机器人“上岗”服务。
6.2句子挖掘
请试想一个场景。你拥有一万条关于“育儿”的历史语料。在历史语料中,“宝宝一天应该喝多少奶?”这一类问题有20条并且每一条都不太一样。比如,其中两条分别是“两个月宝宝一天的奶量是多少”、“两个多月宝宝一天吃几餐奶”。现在,你希望利用这些语料来开发一个对话机器人,回答用户关于“育儿”话题的常见问题。
你遇到的第一个难点是如何从自己手上的这堆杂乱无章的语料中,找到这类高频问题并尽可能多的获得其多种说法。
一种方法是从头到尾阅读一遍语料集,然后,根据印象发现这个问题被问及了多次。最后,锁定这个问题,然后找出与之相似的语料。
这种方法显然是非常低效的。对于1万量级的语料集,采用这种方法甚至是不可能的。
为了帮助开发者高效率地解决这个难点,平台提供了句子挖掘工具。
基础概念-簇
“簇”指的是一个由意图相同、说法不同的多个相似说法构成的语料集合。
举例来说,上文中,“两个月宝宝一天的奶量是多少”、“两个多月宝宝一天吃几餐奶”两个句子就构成了一个“簇”。
如果你已经阅读过前面的内容,应该会知道,一个最简单的知识点就是一个由标题、相似说法集合以及答案三者共同构成的信息结构体。而这里,“簇”可以认为是只有相似说法集合的知识点。换言之,为一个“簇”添加标题和答案,也就构建了一个基本完备的知识点。
之所以要提出“簇”这个概念,是为了强化相似说法集合。从语料中得到一个一个的相似说法集合,是开发出一个拥有“智能”的机器人的最重要一步。
如何挖掘“簇”
从杂乱无章的语料中得到“簇”的过程,是由平台提供的句子挖掘工具实现的。
一般来说,不同的开发者会希望在不同的范围内挖掘“簇”。按照范围的不同,平台支持三种不同类型的句子挖掘功能:
按领域进行句子挖掘。
一个业务场景就代表一个领域。通常,开发者的整个语料就代表了这个领域的完整范围。
这种方法以整个语料为范围,进行挖掘产生“簇”。
由于句子挖掘过程中不需要任何人的参与,这种方法在平台上被称为机器挖掘。
按主题进行句子挖掘。
主题是介于领域和知识点之间的范围。通常,一个领域下有多个主题,一个主题下有多个知识点。
举例来说,“育儿”是一个领域,其10万条语料就是这个领域的完整语料。“咳嗽”是一个主题,跟这个主题相关的语料,可能只有这10万语料中的2000条语料。
这种方法以特定主题相关的语料为范围,进行挖掘。最后,只产生与这个主题相关的“簇”。
由于主题通常是通过关键词来定义,这种方法在平台上被称为关键词挖掘。
按知识点进行句子挖掘。
这种方法以特定知识点相关的语料为范围,进行挖掘。最后,只会扩展这个知识点的相似说法集合。
使用该功能的典型场合是,开发者已经搭建了知识库并将机器人上线服务了一段时间。开发者希望从这段时间产生的语料中,“定点”扩展某个知识点的相似说法。
由于这一功能是针对一个一个知识点的,所以,为了方便使用,这一功能被放置在知识点详情/高级配置中。
6.2.1机器挖掘
筛选语料并挖掘“簇”
1 登录平台后从以下路径 效果优化/挖掘/句子挖掘/机器挖掘 进入机器挖掘页面。
2 点击导入待挖掘问题,选择必要的配置项:
选择语料来源。
勾选线上语料。从选择的时间范围内的线上真实对话记录中抽取用户问题,构成一份初始语料集。
勾选线下语料。从语料库中的语料集中选择1个或多个语料集,构成一份初始语料集。
同时勾选两者。多个来源的语料合并,构成一份初始语料集。
按语料出现频次筛选初始语料集。
初始语料集内的重复出现的语料,会被自动合并并记录出现频次。例如,有5个用户说,“查快递”。则该语料会被合并成1条语料,并记录该语料出现了5次。
输入高频语料优先下的最低频次数值(正整数)。
例如,如果输入2,其含义是初始语料集中,如果一句话出现次数小于2,则会被清洗掉。
默认值=1。代表初始语料集中所有语料都会保留。
按语义相似度筛选初始语料集。
初始语料集中的所有语料将与知识库已有相似说法,进行相似度计算。
选择相似度区间范围。假设选择范围为0~0.7,则初始语料集中的语料与知识库已有相似说法相似度大于0.7,该语料将被清洗掉。
这一操作是为了保证从待挖掘的语料中能发现新的簇,生成新的知识点。
选择导入上限
可以选择此次挖掘需要导入的上限语料数。
系统默认为5万条, 这也是系统允许的最高导入上限。
假设您选择了4万条,其含义是,经过选择语料来源、按频次筛选和按语义相似度筛选后,如果初始语料集还剩余4.5W条语料,则会从这些语料中随机选择4万条进行导入。
初始语料集要经历重复语料合并等操作。如果还有待处理语料没有消耗掉,新导入的语料还会进一步与待处理语料进行重复语料合并。所以,一般来说,最终在页面上显示的语料数并不等于上传的语料数。这并不是出现了错误。
3 点击立即挖掘,开始挖掘流程。
平均来说,1W条语料,需要用时5分钟左右。请耐心等待。
4 在页面上展示挖掘的结果。
在等待一段时间后,页面上会以表格形式呈现出挖掘结果。
表格的每一行代表一个“簇”。
一个“簇”下有5个以上的句子,这个“簇”才会呈现出来。未能组成“簇”的句子,会被归类为“未成簇”这一大的集合中。
对于一个“簇”来说,系统会展示这个“簇”的代表句子、这个“簇”下当前的句子总数以及进入这个“簇”的详情的入口。
人工校验“簇”结果并入库
对于平台计算出来的“簇”结果,并不能保证总是正确的。通常,正确与否取决于算法好坏以及开发者的业务背景下的判断标准。
因此,在将“簇”入库到问答型对话的知识库或者任务型对话的触发器之前,需要做一些人工审核工作。
1 在 机器挖掘 页面点击 筛选入库 进入簇详情。
- 以下图为例,我们进入了一个由15个句子构成,代表句子为"1岁半宝宝一天喝多少奶粉"的簇的详情
2 点击 放回待挖掘库 或者从待挖掘库删除 按钮将不属于当前簇的语料删除掉。
以上图为例,这个簇绝大多数句子表达的意图都是“宝宝应该喝多少奶”这个意图。然而,“给宝宝冲奶粉用多少度的水合适”则陈述的是如何泡奶粉。显然,这个句子不应该属于这个簇。
放回待挖掘库 与从待挖掘库删除的区别:
前者只是将语料从这个簇中删除,这条语料会被归类到“未成簇”集合中。后续如果再利用这批语料挖掘,这条语料仍会被使用。
后者则直接将语料从语料集中删除,在重新挖掘、推荐相似说法等后续操作中,不会再使用到这条语料。
3 选中簇详情中的语料、点击 新增 , 为问答型对话创建新的知识点或为任务型对话创建新的意图。
在经过一些删减后,簇中相似说法已经是表达相同意思的一个相似说法集合了。选中这些相似说法,点击新增,弹出新增弹窗。
在知识类型中,选择“知识点”或者“意图”。
如果选择“知识点”,则为这个“知识点”添加“标准问题”和“分类”;如果选择“意图”,则为这个“意图”添加“意图名称”和“场景”。
上述操作完成后,点击“保存”,第一步被选中的语料将从挖掘结果中转移到知识库或意图中。
相应地,这个簇的相似说法数量将减少,整个挖掘结果的“待处理语料”数量将减少,“已处理语料”数量将增加。
4 选中簇详情中的语料、点击 转移 , 将簇中语料转移到知识库中已有的知识点内或意图中已有的触发器中。
选中簇中的相似说法,点击转移,弹出转移弹窗。
在搜索框中输入意图名称或者知识点标准问,可以搜索已有知识点或意图。
系统会根据你选择的相似说法集合,实时计算出语义最接近的前3个知识点和前3个意图。如果是您需要转移的目标知识点或意图,可以直接点击进行转移。
6.2.2按关键词挖掘
之前已经介绍了除了句子挖掘之外,系统还支持特定主题下的挖掘,即关键词挖掘。关键词挖掘适合开发者明确知道自己希望挖掘哪个主题下的“簇”,进行构造该主题下的知识点。
使用关键词挖掘的基本操作流程:
1 登录平台后从以下路径 效果优化/挖掘/句子挖掘/关键词挖掘 进入关键词挖掘页面。
2 输入关键词,确定要挖掘的主题。
输入要挖掘的主题是通过输入1个或者多个关键词的方式来实现的。关键词有如下三种方式获取:
使用系统推荐关键词。当从0开始构建一个知识库时,通常并不知道语料中有哪些主题值得深入挖掘。此时,使用系统推荐的关键词往往是一个好的选择。
手动计算关键词。不管是机器挖掘还是关键词挖掘,使用的都是同一份语料。当利用这份语料进行了一些挖掘之后,需要在剩余的语料中,发现值得挖掘的主题时,可以随时手动计算关键词,让系统推荐。
输入关键词。当开发者明确知道需要挖掘的主题时,可以在搜索输入框中输入要挖掘的关键词。
3 点击搜索,获得语料中匹配到关键词的句子。
4 从返回结果中,选择几个种子问题。
种子问题是构造一个“簇”的最初几个句子。关键词挖掘的算法需要借助这几个最初的句子,从语料中找到相似的句子来扩充这个“簇”。
种子问题之间应该是意图相同,表达方式不同。
4 选择完种子问题之后,点击开始挖掘,启动关键词挖掘算法。
此时,系统将以选择的几个种子问题为基础,在语料中进行遍历,与每个句子进行语义相似度计算,选出与这些种子问题语义最接近的句子,做为返回结果。
这一过程,通常需要花费一点时间,请耐心等待。
挖掘结果与之前选择的几个种子问题一起,构成一个“簇”。系统将直接展示这个“簇”的详情,方便您继续操作。
5 对第4步生成的簇进行类似于机器挖掘中所说的人工校验,就可以将这个簇入库到知识库或者意图触发器中了。
6.2.3推荐相似说法
当簇详情下语料数量比较少的时候,可以使用“推荐相似说法”,从“未成簇”集合中“回捞”一些遗漏的语料。
举例来说,上一小节的“宝宝应该喝多少奶”的簇中,人工审核后,删减掉若干不相关的语料。这导致该簇的语料数变少了。此时,可以使用推荐相似说法来扩充这个簇。
1 在 簇详情 页面点击 推荐相似说法。
如果“未成簇”集合中的句子有与当前“簇”下的句子语义上很接近的句子,这些句子会被推荐出来,如下图。
如果未发现语义接近的句子,系统会提示“没有可推荐的相似说法”。
2 在 簇详情 页面点击 推荐相似说法。
在推荐结果中,选择应该合并的句子。例如,“宝宝8个月奶量”、“六月婴儿奶量”。
点击“合并相似说法”,选中的左边推荐结果会被合并到右边的簇详情中。
3 多次推荐相似说法。
推荐相似说法会根据右边簇详情的当前状态,动态计算被推荐的结果。
如果扩展了簇详情,可以再次点击推荐相似说法,进一步得到一些相关说法。
上述过程可以循环往复使用,直到再也没有符合条件的相似说法可以推荐。
6.2.4升级句式
在很多情况下,用句式的形式来构造和维护相似说法集合,会降低开发者的维护成本。
在句子挖掘功能中,开发者可以将挖掘出来的句子升级成句式,并将句式入库到意图或者知识点中。
基础概念-句式组
为了理解“升级句式”功能中,需要了解该页面中,句式的组织方式--句式组。
句式组是按照平台设计的一些规则组织在一起的多个句式的集合。
句式组由两个部分构成:
代表句子: 从句式组中选择出来的一个特殊的句式。
通过对代表句子进行句式标注(对抽取到的实体指定其槽位),句式组的所有其他句子都会按相同的方式进行句式标注。
举例来说,句式组有两个句子:50天的宝宝奶粉喂多少;75天宝宝一天奶粉量多少。其中,第一句是代表句子。
对第一句话进行句式标注,结果为“婴儿年龄:日期的宝宝奶粉喂多少”,则第二个句子会自动进行句式标注,结果为“婴儿年龄:日期宝宝一天奶粉量多少”
普通句子:
句式组中的非代表句子的其他句子。
句式组中的“非代表句子”可以转化成“代表句子”。
在页面上,你可以在“簇详情”中使用“升级句式”功能:
1 在 簇详情 页面点击 升级句式。
- 此时,平台会将当前簇下的所有句子重新组合成句式组。
2 展开一个句式组,其中有一些句式被自动勾选,这些句式具有较强的代表性,推荐入库。其他句式如果需要也可以手动勾选。
3 对 句式组 的 代表句子进行句式标注。
以图所示的句式组为例,创建一个词槽为“宝宝年龄”。
给代表句子的“天数”实体标注词槽为“宝宝年龄”。
此时,该句式组下的所有句子都按照相同的方式被标注成句式。
4 在“升级句式”模式下,推荐相似说法同样将以句式组方式组织结果。
点击推荐相似说法,左侧弹出推荐结果。
点击升级句式,系统会抽取推荐结果中的所有句子的所有实体并按照“实体三原则”,对推荐结果进行重新组合。
选中要合并的句子,然后点击合并,被选中的句子将按照“实体三原则”,合并到右侧簇详情中对应的句式组中,完成合并。
5 勾选要入库的句式,完成入库。
6.3相似说法学习
当你的机器人已经“上岗”服务之后,一个重要的问题是,机器人如何持续优化自己的知识体系,让自己变地更加“聪明”。这里,就需要开发者结合上线之后的真实对话记录,来教育机器人。为了帮助开发者完成这一工作,平台提供“相似说法学习”页面。
机器人优化自己的知识体系,是通过学习用户说法来实现的。平台将用户说法按照置信度分为三个类型:
高置信度的用户说法。这代表机器人对这个用户说法已经识别的很准确了。这也意味着机器人不需要再学习这些用户说法了。
中置信度的用户说法。这代表机器人对这个用户说法还不是那么确定,需要开发者“教育”。
低置信度的用户说法。这代表机器人对这个用户说法很陌生,此时,很有可能这类用户说法代表的知识点或者意图并不在机器人现有的知识系统中。
相似说法学习,主要针对上述三个类型的后两个类型的“用户说法”。将这两类“用户说法”传入到相似说法学习页面,让开发者来做判断,帮助机器人持续优化效果。
前置平台操作-选取进入“相似说法学习”页面的语料
1 登录平台后从以下路径 效果优化/相似说法学习 进入该页面。
2 点击导入待审核问题,弹出配置项页面.
- 配置项的含义,参见挖掘/导入待挖掘问题.
3 点击“导入”,完成语料导入。
线上语料会在计算后按规则展示到待审核问题中。
6.3.1按问题查看和审核相似说法
1 在 效果优化/相似说法学习 页面中切换到“按问题查看”分页。
该页面是以“卡片”为单位来组织。一个卡片代表一条需要学习的相似说法。
每个“卡片”的构成都是相同的:
“卡片”的标题是需要学习的“相似说法”。
“卡片”的三个选项,代表需要开发者告知机器人该“相似说法”属于哪个知识点或者意图。三个选项按照置信度由高到低排列,高的位于左边,点击展开可以多看到三个。
知识点由知识点标题、有代表性的相似说法、置信度以及答案构成。
意图由意图名称、触发器的相似说法、置信度以及该意图关联的词槽构成。
推荐出来的知识点根据置信度由高到低排列,不一定能推荐够6个。
2 合并到该知识点。
- 点击卡片上三个选项中任意选项上的“合并到该知识点”,系统会将“相似说法”合并到选项代表的知识点或者意图中。
3 新建知识点。
- 点击卡片菜单行中的“新建知识点”,可以新建一个知识点,该知识点包含当前卡片代表的相似说法。
4 新建意图。
- 点击卡片菜单行中的“新建意图”,可以新建一个“意图”,该意图的触发器中包含这一条相似说法。
5 合并到其他知识点。
- 点击卡片菜单行中的“合并到现有知识点”,可以将该相似说法添加到已有的一个其他知识点的相似说法中。
6 合并到其他意图。
- 点击卡片菜单行中的“合并到现有意图”,可以将该相似说法添加到已有的一个其他意图的触发器中。
7 删除。
- 删除这条相似说法,不做审核。
6.3.2按知识点查看和审核相似说法
1 在 效果优化/相似说法学习 页面中切换到“按知识点查看”分页。
该页面是以“卡片”为单位来组织。一个卡片代表一条需要强化学习的知识点。
每个“卡片”的构成都是相同的:
知识点的标准问题.
知识点的相似说法.
知识点的答案.
与该知识点相关的“待审核问题”的数量.
2 点击卡片上的“点击查看”,进入该知识点的审核详情页
3 合并到该知识点
- 选中语义上与该知识点相同的相似说法,点击“合并到该知识点”,所有选中语料将批量添加到该知识点中。
4 添加为新知识点
- 选中对于当前知识库来说,不被包含的相似说法,点击“添加为新知识点”,可以新建一个知识点,该知识点包含所有选中的相似说法。
5 合并到现有知识点。
- 选中语义上与当前知识库已有的另一个知识点相同的相似说法,点击“合并到现有知识点”,所有选中语料将批量添加到选中的知识点中。
6 删除。
- 删除选中的相似说法,不做审核。
6.3.3按意图查看和审核相似说法
1 在 效果优化/相似说法学习 页面中切换到“按意图查看”分页。
该页面是以“卡片”为单位来组织。一个卡片代表一条需要强化学习的意图触发器。
每个“卡片”的构成都是相同的:
意图名称。
该意图触发器中的相似说法。
与该意图触发器相关的“待审核问题”的数量。
2 点击卡片上的“点击查看”,进入该意图的审核详情页。
3 合并到该意图。
- 选中语义上与该意图相同的相似说法,点击“合并到该意图”,所有选中语料将批量添加到该意图的触发器中。
4 合并到其他意图。
- 选中语义上与当前任务型对话已有的另一个意图相同的相似说法,点击“合并到其他意图”,所有选中语料将批量添加到选中的意图中。
5 删除。
- 删除选中的相似说法,不做审核。
6.4高级模型
机器人之所以能识别用户的语言的语义,是因为平台有语义识别模型。
平台提供一些不针对特定领域的模型以外,也允许开发者自己训练一个针对自己领域的有针对性的模型,来进一步提升机器人的语义理解能力。
为了使用这个功能,请先了解基本概念再了解具体的平台操作。
6.4.1普通模型
当你构造好一个知识点之后,马上就可以在平台里的调试机器人或者体验版网页中,输入一个用户话术,来感受机器人的回复效果。
之所以有这样的体验,是因为平台底层配置了“普通模型”。
普通模型是平台预置的一些领域无关的通用模型。普通模型的特点是:
不需要用户训练和部署,已经预置到平台中。
与开发者自己的领域无关,是通用型的模型。
除非用高级模型在平台上替换普通模型,平台默认的语义识别模式都是普通模型。
6.4.2高级模型
普通模型虽然可以“开箱即用”,但是,由于未对开发者的领域进行“定制化地”训练,难免对这个领域的特有知识,就会学习的不够。
举个列子,你是一个手机维修商,需要搭建一个机器人来回答用户关于手机维修的相关问题。
如果只使用普通模型,机器人会理解“苹果”、“手机”的含义。但是,对“苹果手机”就无法理解为一个手机品牌。这需要用“高级模型”来完成。
普通模型是需要用户针对自己领域针对性训练的模型。高级模型的特点是:
需要用到特定项目的数据来训练。这里数据,就是开发者构造的各种知识点和意图触发器下的相似说法。
效果依赖于项目数据的质量。开发者的相似说法语料质量越好,高级模型上线后的预测效果会越好。这里,数据质量好的意思是指,数据应该尽量满足如下一些条件:
至少要有20个以上的知识点和触发器(两者的总和),每个知识点或触发器至少有10条以上的相似说法。
多个知识点和触发器之间尽量避免“数据不平衡”现象。(数据不平衡是指,一个知识点下有几百个相似说法,而另一个知识点下只有几个相似说法。理想情况下,每个知识点下的相似说法应该大致相近,至少不要是不同的数量级。)
知识点下的相似说法在表达上尽量有一定的差异化。比如,在表达“查快递”时,如果都是“我要查快递”、“给我查快递”,则意义不大。应该尽量包罗各种表达这个意图的不同说法。例如,“我的口红还有几天能到青岛?”
需要经过一些步骤才能上线服务。高级模型不是系统预置的模型。这是步骤包括:
训练高级模型。利用开发者自有数据进行训练。要想使用高级模型,这一步必须完成。
发布高级模型。发布成功后,高级模型将替换掉普通模型。这一步同样也是必须要完成的。
一旦更换,则整体更换。当用高级模型替代普通模型后,平台所有用于计算语义相似度的地方,都将使用高级模型。
在了解了“高级模型”的相关概念和必要操作的简介后,下面介绍“模型训练”、“模型发布”两个模块。
6.4.3模型训练
1 登录平台后从以下路径 效果优化/模型优化/模型训练 进入模型训练页面
2 点击高级模型训练按钮,开始训练。
模型训练通常需要一定的时间,这个时间取决于知识库的规模。一般来说,训练完毕需要耗费5-10分钟的时间。请您耐心等待。
模型训练成功后,“上次训练时间”字段将更新成最近一次完成模型训练的时间。
在模型训练期间,切换页面,模型训练不会中止。
3 当模型训练完成后,无需发布模型,即可去模型评测页面评测效果。此时,评测的模型包括普通模型以及最近一次训练成功的高级模型。
一般来说,高级模型训练效果好,尽量满足如下两个条件:1、账号当前机器人下有20个知识点或者意图触发器(总和);2、相似说法的总数大于200条。如果不满足上述条件,高级模型有训练失败的风险。
6.4.4模型发布
如果开发者选择高级模型,那么,需要在模型发布页面中一键部署高级模型。具体的方法如下:
1 登录平台后从以下路径 效果优化/模型优化/模型发布 进入模型发布页面。
- 系统默认的模型为普通模型,并用蓝色框标记出来。
2 选中高级模型并在当前阈值中,输入高级模型的“阈值”。
3 点击发布,用“高级模型”替代“普通模型”。发布成功后,系统将提示“模型发布成功”。
在模型测评之后,开发者应该已经明确选择哪个模型,作为机器人的语义识别引擎。
一旦“高级模型”发布成功,平台所有需要用到语义相似度计算的地方,注意包括任务触发器中的相似说法计算,都将用“高级模型”替代“普通模型”,以此来保证每一处计算的分数都是同一个模型给出的,保证分数具有可比较性。
6.5在线标注
在机器人上线前或运营中,你需要评测机器人模型效果或比较不同模型的效果。这就需要你通过数据标注地方式,准备一份测评集。
如果你尚不清楚模型效果及测评相关知识,建议优先学习模型测评。
如果是在Excel的测评集模板中进行测评集标注,你将会面临以下问题:
- 无法准确记住知识库中的每一个知识点名称,很难直接在模板中写出来。你可能会通过在知识库中搜索、调试机器人测试地方式来确认应该召回哪个知识点,但这样效率很低
- 即使有一部分知识点的名称记住了,也要自己手工输入,很麻烦
- 在Excel模板中标注好的测评集,由于知识库中对应知识点变更而作废
平台提供的“在线标注”功能,支持你在线上进行测评集地标注工作,有效解决上述问题。它可以在以下几个方面帮助你:
- 每一个测试问题,都会推荐你至少三个应标知识点,不需要凭记忆想
- 你可以直接选择知识库中存在的知识点来进行标注,从写变成选
- 标注好的测评集,其标注结果与知识库数据同步,解决因知识库变更而导致重复标注问题
测评集、测试问题、标注应召知识点
测评集是评价机器人背后模型效果的数据集,由测试问题和应召知识点组成。
类似于就像学校考试要给学生出一份测试问卷,老师是提前知道每个问题答案的,学生作答后如果符合标准答案则正确,不符合就是错误。
测评集则是给机器人出一份测试问卷,测试问题即需要机器人回答的用户消息。同时需要你标注出每条用户消息应该召回什么知识点,这就相当于是标准答案,来与机器人的回答做出对比,来判断他的召回是否正确。
第一步 创建一份测评集 进入至在线标注页面,首先需要先创建一份测评集,并从语料中导入测试问题。
1 填写测评集名称
2 选择语料来源,可以从“线上语料”和“线下语料”两种方式。
3 若语料数量过多,则可以选择随机抽取,默认为全部
4 选择导入为测试问题的语料数量。
- 若抽取方式为全部则会将所有语料导入,但上限为1000条
- 若抽取方式为随机,则需要选择抽取的数量,上限为1000条
第二步 标注应召知识点 创建一份测评集后,你会进入到测评集的标注页面。这个页面需要你为每个测试问题,标注它应该召回的正确知识点。
每个测试问题,系统都会推荐三个应标知识点并附带推荐指数。基于此功能,系统有以下三种操作方式进行标注。
1 从推荐知识点中选择一个标注,如果你认为系统推荐的三个中,有一个是这个测试问题应该召回的知识点,直接点击该知识点即可
2 一键预标注,如果你的测试问题较多,点击一键预标注后,每个测试问题都会把推荐指数最高的知识点标注上。
3 搜索知识点进行标注,如果系统推荐的不满意,你可以去在“标注知识点”这一项,通过搜索地方式标注。
选择忽略或删除知识点
测试问题中,难免会有某些问题不确定它应该标注哪个知识点,或者是这个测试问题本身在机器人业务范围外,不应该回答。
系统提供的“忽略”和“删除”功能可以处理上述情况。
- 忽略:被忽略的测试问题,仍然在测评集中保留,但在后续的测评过程中并不会发送给机器人来作测试。
- 删除:直接将该问题从测评集中删除。
第三步 去测评 测试问题完成标注后,就可以去进行模型测评。
1 点击“去测评”跳转至模型测评页面
2 点击“发起测评”,即可使用刚刚标注的测评集进行测评。
跳转至模型测评页面后,测评集已经导入进来,可直接点击“发起测评”
6.6模型评测
如何衡量和评价机器人在问答对话中的准确与否呢?这一节介绍必要的评价指标和平台操作。
6.6.1阈值、召回率、准确率、F1
机器人在问答对话中的运作方式,如下:
将用户说的话(一般称之为query)与知识库和触发器中的各种相似说法进行语义相似度计算。
如果机器人发现,用户query与某个相似说法的语义相似度高于开发者设定的一个值,则机器人认为将用户的query匹配到了一个相似说法。
当query与相似说法匹配成功,则机器人会进行后续地应答。当机器人做了应答,则称这条用户query有“召回”。而召回的内容可以是一个知识点的答案。
当然,召回动作有可能对,也有可能错。如果召回对,则代表机器人对用户的应答是对的;否则,则是错的。
可以用如下指标对上述过程进行量化衡量:
置信度: 用户query与某个相似说法的语义相似度。
这个语义相似度是由模型(普通模型或者高级模型)计算得到的。
是一个0-1的小数。0代表两句话完全不相似;1代表两句话语义一模一样。
阈值: 由开发者设定的对用户query进行应答的最低置信度。
阈值是一个0-1之间的小数。
举例来说,如果开发者将阈值设定为0.7,则当用户query与某个相似说法的置信度为0.75,则机器人会进行应答,应答的具体内容是召回与这条“相似说法”对应的知识。
召回率: 在用户query总数中,令机器人有召回的用户query数的占比。
召回率= 有召回的用户query数/用户query总数。
举例来说,有100条用户query,其中,有80条query机器人做了反应,则召回率为80/100 = 0.8(或者80%)
准确率: 在召回的用户query总数中,机器人应答正确的query总数。
准确率= 召回且应答正确的用户query数/召回的用户query总数。
延续上文的例子,在80条query中,机器人召回的内容是正确的次数为40条,则准确率= 40/80 = 0.5(或者50%)。
F1: 召回率与准确率的调和平均数。
一般来说,召回率和准确率很难同时增大。相反地,一个指标增大则意味着另一个指标降低。
为了综合衡量机器人的效果,需要用一个指标来反映两个指标的综合效果。这个指标就是F1值。
6.6.2判断模型效果的流程
方法一: 召回率优先法。
先选择机器人要实现的召回率。举例来说,选择机器人的召回率为0.8。其含义是开发者希望用户每100条query,机器人能回答其中的80条。
基于选定的召回率,判断此时机器人的准确率。假设,机器人的准确率为0.8。其含义是机器人回答的80条query,有64条回答正确。
如果上述指标均达到了开发者的业务要求,则选定满足上述两个指标的阈值。假设,此时的阈值为0.7。此时,开发者应该在平台中设定这一全局阈值,然后上线模型。
方法二: 准确率优先法。
先选择机器人要实现的准确率。
基于选定的准确率,判断为了实现这样的准确率,机器人需要的召回率是多少。
如果上述指标均达到了开发者的业务要求,则选定满足上述两个指标的阈值。
常用标准:
一般来说,一般来讲,我们建议,模型上线的条件是“双80”,即召回率和准确率都达到了80%。
对于更看中机器人对人工的替代程度的开发者,可以选择召回率优先法来判断机器人效果并决定是否让机器人上线。
对于更看中机器人回答是否准确的开发者,可以选择准确率优先法来判断机器人效果并决定是否让机器人上线。
比较多个模型效果的方法
当有多个模型需要比较效果的时候,延续上文所讲的判断模型效果的流程,对应地有两种比较方法:
方法一: 相同召回率下,比较不同模型的准确率。同召回率下,模型的准确率越高越好。
方法二: 相同准确率下,比较不同模型的召回率。同准确率下,模型的召回率越高越好。
重要前置工作-数据标注
要想评测模型效果或者比较不同模型的效果,必须知道模型的准确率。而机器人是无法靠自身来判断自己的准确率的。这就需要开发者自己,通过数据标注的方式来做人工判断。
平台提供两种方式来做准确率的人工标注:
开发者自己在自己的本地电脑中进行标注,然后,将标注结果上传到平台中。
利用平台提供的“在线标注”工具,进行标注。
这里,介绍第一种标注方法下,如何使用平台功能来完成模型评测。
在平台上进行模型测评
1 登录平台后从以下路径 效果优化/模型优化/模型测评 进入模型测评页面。
2 点击上传测评集按钮,下载测评集模版。
在模版中的“测试问题”一列,输入希望测试的用户query。
在模版中的“应该召回的正确知识点”一列,输入每一条query应该召回的知识点的标准问题。
保存测评集。
3 再次点击上传测评集按钮,将标注好的测评数据集上传到平台上。
4 点击发起测评,系统开始测评模型效果。
在配置弹窗中,选择需要测评的指标,即准确率(同召回率下)或召回率(同准确率下)。
完成上述配置后,点击开始按钮,开始测评。
等待一段时间后,模型测评完成并优先以二维坐标图的形式对结果进行可视化展示。
如果开发者从未训练过“高级模型”,系统只会测评“普通模型”。如果开发者训练过“高级模型”,则系统会同时测评“普通模型”和“最近一次训练的高级模型”
5 增加需要查看的其他各类指标。
系统默认的准确率是置信度最高的回复的准确与否。这个指标称为Top1准确率。上文如果为明确提及,准确率指的都是Top1准确率。
除了Top1准确率,系统还支持查看Top2准确率和Top3准确率。Top2准确率是指,只要置信度前两位中有一个是回复正确的,则算作回复正确时,机器人的准确率。Top3准确率以此类推。
可以在二维坐标图中,选择TopN准确率或者TopN_F1值,来查看对应的指标趋势图。
6 点击导出测评结果按钮,导出当前测评结果。
6.7知识库优化
知识库的质量是至关重要的。这里说的“质量”,绝大多数场合下,指的是知识库下知识点的相似说法集合的质量。
尤其是当你使用“高级模型”时,知识库的质量就更加重要了。如果你的知识库质量好,高级模型的效果将比普通模型的准确率高几十个百分点。
那么,该如何衡量一个知识库整体的质量呢?如果知识库的质量欠佳,又该如何修复知识库呢?
为了帮助开发者解决这些问题,平台上线了“知识库健康度”功能。
相似问正确度、知识点清晰度、知识库健康度
开发者在搭建知识库的时候,经常会犯的一类错误是将原本属于知识点A的相似问错误地放置到了知识点B中。为了衡量因开发者这类错误而导致的知识库瑕疵,平台定义了相似问正确度指标。
相似问正确度:
该指标用来衡量整个知识库下的所有相似问,放置在正确的知识点下的程度。
相似问正确度为0-100之间的分数。
相似问正确度的计算方法有一套复杂的方法。抛开这些艰深的方法不谈,直观上,相似问正确度分数越高,代表被错放的相似问的数量就越少。反之也成立。
开发者在搭建知识库的时候,经常会犯的另一类错误是知识库中多个知识点之间边界不清晰,导致知识点之间“你中有我,我中有你”。这种知识点的交叉,经常会导致机器人上线后效果比较差。为了衡量因开发者这类错误而导致的知识库瑕疵,平台定义了知识点清晰度指标。
知识点清晰度:
该指标用来衡量整个知识库下的所有知识点两两之间的边界是否“清晰”。
知识点清晰度为0-100之间的分数。
知识点清晰度的计算方法同时很复杂。但是分数很直观,知识点清晰度分数越高,代表两个知识点边界清晰,上线后,机器人不会混淆用户问的是知识点A还是知识点B。
知识库健康度:
该指标用来衡量知识库的综合健康程度。
知识库健康度目前是相似问正确度和知识点清晰度的平均数,即知识库健康度 = (相似问正确度 + 知识点清晰度)/2
平台操作
1 登录平台后从以下路径 效果优化/模型优化/知识库健康度 进入该页面。
2 点击发起检测,即可开始检测知识库。
当前,平台只支持对“已生效”的知识点进行检测。
检测可能会失败。这通常是因为开发者的知识库知识点数量或者相似问数量过少,达不到检测条件。请进一步丰富知识库之后,再发起检测。
检测一次,通常需要耗费一定的时间。时间长短取决于知识库的规模。每次发起检测的时候,系统会预估需要耗费的时间。在此期间,您离开该页面,检测不会停止。
3 获得检测结果。
将同时获得知识库健康度、相似问正确度以及知识点清晰度三个分数。
对于后两个分数,系统会推荐与之相应的知识库瑕疵,开发者修复这些瑕疵,可以提升知识库的健康程度。
4 修复有错放风险的相似问。
点击知识库健康度主页面上“相似问正确度”下的待处理相似问,进入详情页面。
在详情页面,点击转移至该知识点,将错放的相似问转移到“正确的知识点下”。
5 查看边界不够清晰的知识点对。
点击知识库健康度主页面上“知识点清晰度”下的待处理知识点,进入详情页面。
在详情页面,可以查看容易混淆的知识点。
通常,导致知识点混淆的原因有可能是业务上知识点确实比较接近。此时,如何处理混淆的知识点由开发者决定,系统不推荐相应的操作。
6 重新发起检测。
- 修复知识库瑕疵之后,可以重新发起检测,查看分数的变化。
6.8短语挖掘
短语挖掘主要解决需要发现这个领域有特殊含义的短语/词语,作为专业词汇或实体(用于问答或任务)的问题。
该功能可以从语料中,通过算法批量发现,这个领域有特殊语义含义的短语或词语,比如:
- 酒类:血腥玛丽、苏格兰威士忌、赤霞珠……
- 法律:劳务派遣单位、残保金、返聘合同、脱敏期……
- 母婴:肠胀气、鹅口疮、月子期……
平台操作
1 从语料库导入某个领域/项目的语料(建议3500条以上,大数据量效果会比较明显)
2 开始挖掘前,需要你从语料中,为模型标注出至少20个有重要含义的短语或词语(即期望模型能挖掘到什么,就标注什么)
划词标注三原则
- 通过划词地方式,标注出语料中有重要或特殊含义的短语或词语
- 多条语料中一样的短语,也可以重复标注出来,帮助模型从更多问法中挖掘
- 一条语料推荐标注1~2个短语为佳
3 点击立即挖掘
4 查看短语挖掘结果,会以簇的形式展示在在列表中,点击每个簇可查看挖掘到的短语;若机器人中已经配置实体,系统还会自动计算挖掘到的短语与已有实体的关系,并进行推荐(此时短语簇为实体名称)
5 短语挖掘处理,将短语添加至专业词汇或实体,处理原则与句子挖掘一致
根据语料数量,挖掘可能在2~5分钟左右(且一般会在50%~60%进度停留较长时,请耐心等待)
6.9消息分类优化简析
用户的一个消息过来,首先从机器人反应来说我们分为有召回或者是无召回兜底的,从业务属性上来说,我们分为正确的与错误的,在知识库内(库内)的或者知识库外(库外)的,或者用户语句没有标明具体的意图(语义不明)。
这样我们就整理出来一张对应分类表,在确定问题类型和优化方式方面有重要帮助。
类型 | 序号 | 子类 | 详情 | 正确性 | 优化方式 |
---|---|---|---|---|---|
有召回 | 1 | 正确召回 | 机器人回复了正确的知识点答案 | √ | \ |
有召回 | 2 | 误召回-库内 | 库内有知识点,机器人回复其他知识点 | × | (1)改善知识点语义交叉/颗粒度(2)梳理相似问(3)新增专有词 |
有召回 | 3 | 误召回-库外 | 业务范围内,库内无,机器人回复库内其他 | × | (1)新增知识点(2)改善知识点语义交叉/颗粒度 |
有召回 | 4 | 误召回-语义不明 | 用户语义不明,机器人回复库内其他 | × | 如偶发不影响可以不修改(1)如是公司内其他业务高频出现,可以新增知识点(2)加入无意图知识点(3)改善知识点语义清晰度/颗粒度(4)调整阈值 |
未召回(即回兜底) | 5 | 漏召回-库内 | 库内有知识点,机器人回兜底 | × | (1)增加相似问(2)新增专有词 |
未召回 | 6 | 未召回-库外 | 业务范围内,库内无,机器人回兜底 | √ | (1)新增知识点 |
未召回 | 7 | 未召回-语义不明 | 用户语义不明,机器人回兜底 | √ | \ |
未召回 | 8 | 无意图 | 人为设置无意图,机器人回兜底 | √ | \ |