1 产品介绍
YIYA是一个语音助手,根据用户输入语音内容,进行对应的操作或返回对应的结果,比如询问天气,返回所在地的天气结果。目前使用在微桌面及TOS手表中。
语音测试,先要识别准确, 在这条路上,测试尝试了各种各样的方法;
1. 建立一套可行完善的评测方法,输出各种评测报告,从客户端语音输入开始,到出现识别结果整个过程有很多节点可以进行专项测试;
Ø VAD(语音端点检测)监测灵敏度评测: 可以从录音识别准确性、不同机器的灵敏度上来验证VAD是否达到预期;
Ø 噪音干扰识别测试: 在不同噪音分贝下测试语音识别率;
Ø 不同距离识别测试: 语音说话的距离与识别准确度的关系,需要进行一些验证测试;
Ø 不同机型识别测试:在测试中发现不同机器的识别率有一些差距;
Ø 不同网络语音识别速度测试: 测试在不同网络情况下的语音识别速度,用以优化;
1.1.1 竞品对比
测试版本:
YIYA、竞品 ,
测试机型:
两款相同型号相同配置的手机;
测试地点:
公司附近的广场,小型购物商场,不同楼层具备不同的噪音环境,是用户的潜在使用场景;
测试方法:
基于语音输入的特殊性,暂时采用人工输入的方式,同样的说法,同时测YIYA和竞品的识别情况;两个手机分别装YIYA和竞品,同时点击开始录音;
采用分贝仪软件,监控当前分贝值;
采用了YIYA和竞品都支持的场景和例子对比测试结果;
选取真实的用户语音数据, 直接调用识别引擎的识别接口,监控语音识别是否准确,生成测试报告, 该方法和样本可以适用于任何语音识别引擎。
只需要收集和生成语音文件,选择对应的文件就可以通过自己编写的识别工具进行一键自动测试,自动输出每一个语音所需要的处理时间和最终识别的文字结果, 且可以用同一份数据反复快速的测试,保持一致性;主要是和终端调用相同的识别引擎接口即可。
汉语博大精深,比如这样的句子:
1、冬天:能穿多少穿多少;夏天:能穿多少穿多少。
2、剩女产生的原因:一是谁都看不上,二是谁都看不上。
3、单身的来由:原来是喜欢一个人,后来是喜欢一个人。
当然YIYA现在还做不到这样像人一样智能,但是这是未来的目标。
YIYA语义识别要做到就是: 语义理解要准确,要够聪明,能理解用户各种输入。
根据语义理解的范围,从内部架构上将语义理解分为两大块:
1. 封闭域问题: 可以归并到某一个具体场景的问句,如:打电话、听音乐、天气、看电影等。
2. 开放域问题:用户毫无目的的问答,比如调侃、骂人, 不能归并到现有支持的具体场景里的,如:天空为什么是蓝色的、为什么青蛙会冬眠、你是一个笨蛋。
针对某个功能,比如要支持音乐场景,我们该如何来测试?
在YIYA的大部分功能场景测试中,每个场景需要尽最大可能覆盖用户可能的输入,这种情况下,就需要测试能够输出更多的与场景相关的句子,作为测试样例的输入;
首先需求也只能给一个大概的范围,因为人的思维方式不同、语境不同,需求文档也不能可以罗列出全部的要素,需要群策群力来不断完善。
测试样本经历了以下几个阶段:
1. 最初由测试人工自由发挥,满足现有需求标准的句子即可
2. 项目组多人脑暴参与收集,每个人贡献自己的常用说法
3. 发布后收集用户样本,分析句子结构,形成一定规范编写文档
4. 发布后真直接采集实的用户句子
人工编写的样本句子结构需要保证以下能被覆盖:
1. 日常常用说法的覆盖
2. 样本横向覆盖即需求的各条逻辑的覆盖,
3. 样本纵向覆盖即所能覆盖的地名、时间之类的全部覆盖到
4. 样本说法中有前置语气词
5. 样本说法中有后置感叹词
6. 样本说法中含有符号的
7. 样本说法的核心词可以被替换的词
每一条样本先人工赋予一个场景ID和预期结果。最初是用纯文本格式保存,后面全自动化后,直接导入到数据库保存作为测试样本用;测试样本库一直在不断累积中。
使用过程中不断积累大量的样本,可以反复测试和验证场景数据;样本编写完成后,需要每一条样本标记预期结果; 通过每一条样本标记的预期结果,查看每一条样本执行的是否符合预期;使用脚本来批量测试验证。
使用测试平台来测试,直接使用数据库样本,绕过语音识别引擎,直接向服务器发送文字语义理解请求,判断返回的结果和自身的预期是否一致, 一致则表明已支持这个说法, 不一致则表明区分场景识别意图错误;样本可以批量快速执行,快速得出服务器是否能支持。
Ø 准备好样本后,可以快速覆盖
Ø 不需要人工参与,可快速判断出句子是否支持
Ø 测试要做的就是尽可能的收集各种语境和语义输入
Ø 效率提升数倍
当样本数量越多的时候,如何保障基本功能:
为了规避适配过程中造成某些场景不同平台互相影响,不能及时发现, 测试这边根据适配的需求,梳理出了一份核心的监控测试案例;
从以下方面进行测试监控,每天发现问题及时修正和改善;
适配案例类型 | 说明 |
---|---|
基本核心功能 | 每个平台需要支持的核心场景的基本案例 |
映射配置检查 | 针对不同平台,某些URL跳转需要做特殊映射和配置, |
答案配置检查 | 针对不同平台,云端配置的FAQ答案会有不同 |
自动化的测试能保证每天的主要核心功能的稳定和可控, 但是由于语义识别的复杂性,还是会有各种问题出现,YIYA的语义样本数据库,每天不断加入样本,依然发现很多不支持的样本。如何解决这些问题?
先把出错的样本逐一分析原因并归类:
举例:
场景说法未支持:比如我们支持问 “一加一等于几”,但是没有支持“那一加一等于几?”
返回数据错误: 如用户输入 “我要听小情歌”,给的数据是情歌;没有支持;
返回数据不完善: 比如用户问天气,“明天的空气湿度”, 我们的天气数据没有湿度;需要完善数据;
针对:返回数据错误这类问题,在收集分析后,发现这一类问题占到音乐场景的70%; 如果能自动解决这个问题,那么收益是很大的;下面是针对这一类问题分析后得出的解决和验证方案;
作为语音助手软件,可以获取到用户的大量原始输入,而这些输入包含了大量的知识,其中大部分的知识是已经蕴含在我们的领域本体库中的,还有一部分新知识还没有被收录,根据用户在特定领域的常用说法和句式,结合现有的知识,就可以分析出用户的输入中可能存在的新知识,在对新知识进行一定验证后,就可以合并到我们的领域本体中。这是一个自动完成的自完善的过程。我们在某些特定的场景,如音乐场景中,使用这个技术方案后,发现识别率得到显著提升。
中文语言博大精深,问题源源不断的涌入,甚至很多问题已经超出了最初的设想和需求。怎么改进和改善?
测试也在思考,我们的场景如何能够做到更细化,覆盖的更全面;所以梳理出一些想法和方案,旨在帮助打磨产品、修炼内功,提升云端的语义处理。
场景细化思路:
1. 针对每个场景,不受目前实现限制,尽可能的罗列出这个场景的所有维度;并且找出这个维度可能有的词汇和问题;
2. 将所有的维度想法转换EXCEL,进一步细化;通过已经累积的20W条样本中的场景说法以及评审中发现的问题,反查所有的维度是否能覆盖;总结列出核心句式;
3. 测试对EXCEL的文档逐一审核,找出已经支持和不支持的维度,可以适当参考竞品;
4. 开展评审,将优化需求列入迭代里逐步优化。
通过这个梳理可以达到两个目的:
1. 找到支持的不好的维度,可以主动优化,不断积累和完善;
2. 发现新的需求,考虑到迭代中来打磨实现,完善云端的词汇词库等规则。