在智能对话项目搭建的过程中,高效筛选、处理对话日志并将其转化为新的训练数据,是对话系统效果持续提升的重要环节,也是当前开发者面临的难题之一。为此百度大脑UNIT推出学习反馈闭环机制,提供数据获取、辅助标注工具DataKit,帮助企业提升数据处理效率。
【快速了解什么是DataKit】
DataKit是面向开发者提供的数据生产工具集,可以利用交互式学习、规则样本生成和多模型一致性检验等技术方法自动获取大量数据,并从中筛选出带标注、半标注和无标注3类样本,这些样本经过高效的预处理后形成新的训练数据,可进一步提升语义解析效果,有效提升对话系统的优化人效。
1、样本获取
利用DataKit,用户可以从生产环境的日志中不断挖掘样本数据,逐步优化语义理解效果。
2、辅助标注
通过数据生产、自动筛选与辅助标注,能够使训练数据集构造效率平均提高8倍,帮助开发者更低成本地优化模型理解效果。
【DataKit背后的技术解读】
1. 交互式学习技术
在对话系统的效果迭代优化中,利用用户的多轮对话行为作为对话效果的反馈,帮助发现当前系统效果的瓶颈,并挖掘有意义的对话样本供开发者标注以解决效果瓶颈。交互学习就是这样一种以用户交互行为数据为基础,积累交互样本,解决系统效果瓶颈的迭代优化辅助方案。交互学习主要包含话术干预技术和异常样本发现技术:
• 话术干预技术
当用户认为系统的理解结果有误时,往往会试图通过强调的方式来澄清理解错误的部分。那么,用户用于强调的话术就是对于理解结果的一种干预。例如:
系统通过语义理解技术,将用户的干预话术识别为修改意图、词槽等操作,然后对被干预的理解结果进行意图和词槽上的修改。修改完成后会作两步处理:对于当前进行话术干预的用户,系统会记录该用户的话术偏好,从而下一次会按照用户的干预结果进行解析;同时,被干预的样本会在页面上展示给对话系统的开发者,由开发者决定是否将该样本加入训练数据从而对全局用户生效。
• 异常样本发现技术
异常样本发现主要用于挖掘对话系统内部理解异常和用户反馈异常的样本。
当用户认为系统的理解结果有误时,尽管会不断强调错误信息,但可能不会明确指出错在哪里和如何修正;同时,语义理解结果可能存在歧义、意图不识别等异常情况。例如:
1. 理解歧义—— U:明天北京 R:您是查天气还是查机票
2. 复述强调—— U1:贷款 U2:保单贷款
3. 复述强调—— U1: k21点会议室 U2: 1点的k2会议室
以上情况虽然无法通过多轮的技术来确定理解结果,但是可以通过异常样本发现技术进行异常样本挖掘。
异常样本发现的原理是:根据对话理解系统的中间状态来判定理解歧义和意图不识别的情况,并利用用户复述(当前问法强调上文中出现的关键信息)识别技术来判定用户在指出上文理解错误。异常样本被挖掘后展示给开发者,帮助开发者发现系统理解效果的瓶颈,有选择性的进行异常样本标注,并有针对性的调整模板。
2. 规则样本生成技术
在UNIT平台上用户可以方便地配置模板得到语义解析结果,实现语义解析的快速冷启动。在模板配置达到比较好的语义解析效果时,可以利用规则样本生成技术,产生带标注的样本集合供UNIT进行深度训练,更进一步提升语义解析效果。其方法是利用用户已经标注的模板和上传的词表,通过模板和词槽的组合关系,产生带标注结果的样本集合。这批样本可以直接用于深度训练,提升语义解析效果,能够有效降低人力投入。
• 首先,冷启动阶段通过配置模板,使技能的解析效果达到比较好的程度。同步积累了一定的模板、词槽和关键词数据。
• 然后,基于当前模板、词槽和关键词,触发样本生成功能,获得一定数量的带标注样本。
• 最后,将该样本加入到训练数据中,进行深度训练,进一步提升模型的解析效果。
3. 多模型一致性检验技术
多模型一致性检验是日志挖掘的一种有效方法,其输入是用户的请求日志,输出有三类:带标注结果的正例样本,当前解析为负例的样本和当前没有解析结果的样本。其方法是检验UNIT上多个解析模型的结果,假设多个模型的解析结果越一致,其解析正确率越高。其中,具有高正确率的样本可以直接作为训练正例,解析为负例的样本可以直接作为负例,当前没有解析结果的样本可以进一步进行人工校验,不断优化解析效果。
【快速上手DataKit】
1. 周期性的在UNIT平台下载生产环境的日志
进入UNIT平台技能的「对话日志」页面选择「生产环境」,导出日志明细(文件类型选择「JSON文件」),开发者可以一周一次或者一个月一次下载生产环境的日志,如果沙盒环境的对话日志是真实的用户对话(非内部测试的)也可以使用。
2. 执行挖掘对话日志的Python脚本挖掘日志
比如上面下载的对话日志文件为:unit_1000.json.txt
执行命令:pythonextract_train_data.py unit_1000.json.txt
1正例样本.txt 2负例样本.txt 3无结果样本.txt
上述Python代码下载接:
https://pan.baidu.com/s/16g9l40aqT8GdcGzDLWB5Yw
密码:0p6t;需要在Python2.7环境下运行
3. 对挖掘出来对话样本文件进行后续处理
• 「1正例样本.txt」一般情况下,可以直接导入对话技能的样本集里作为训练数据即可(已经是标注好的格式)。
• 「2负例样本.txt」 为当前平台识别为SYS_OTHER的样本,可简单审阅后在对话技能的训练数据中创建一个单独的负例样本集,导入该文件,作为负例训练数据,在下次训练时选择使用。
• 「3无结果样本.txt」为当前平台没有解析结果的对话样本,这些建议重点关注,看看那些应该识别却没有识别,筛选出来导入样本集进行人工标注。那些不应该识别的样本,导入负例样本集,标注成SYS_OTHER意图。
DataKit的一些使用建议:
1、周期性的下载存储平台上的JSON格式的对话日志;
2、周期性从日志里挖掘对话样本;
3、针对不同样本继续不同处理,对话技能模型效果会有明显提升。
另外,下载、挖掘日志的周期可以根据技能的对话日志量以及能挖掘出来的正例样本量来评估,一般情况下挖掘出1000条以上的正例样本结合已有的样本和对话模板用来训练模型才能在模型上效果上带来正向的提升。而需要从多少条对话日志、多长时间段的对话日志里才能挖掘出1000条正例样本,这主要取决于技能的使用情况(比如生产环境的对话数据真实,会更好),也与对话场景、模型已有的对话效果有关,需要开发者进行一些尝试,找到符合自己的一个日志挖掘周期。
实际操作教程给个视频更靠谱吧。
如有问题欢迎留言