APP下载

用户评论驱动的语音测试数据生成方法

2023-07-15曹冬玉陶传奇郭虹静黄志球

小型微型计算机系统 2023年7期
关键词:口音错误率测试数据

曹冬玉,陶传奇,2,3,4,郭虹静,黄志球,2,4

1(南京航空航天大学 计算机科学与技术学院,南京 211106) 2(南京航空航天大学 高安全系统的软件开发与验证技术工信部重点实验室,南京 211106) 3(南京大学 计算机软件新技术国家重点实验室,南京 210023) 4(软件新技术与产业化协同创新中心,南京 210093)

1 引 言

语音识别(Automatic Speech Recognition,ASR)是将人类所发出的语音转化为文字或符号的技术,目前已成为人机交互和通信的最有效方式之一,同时,也是开启智能时代的关键一步[1].随着机器学习和人工智能的发展,语音识别软件在科研和商业上的应用需求均在逐渐增大,例如亚马逊的Alexa,微软的Cortana,苹果的Siri等.然而,语音识别这类智能软件在快速发展的同时,缺陷问题也日益显著.例如,BuzzFeed在2018年报道,Amazon语音助手Alexa的用户发文,Alexa在他深夜临睡前突然大声笑起来.Amazon对此的回应是Alexa会错误地将环境噪音辨别为短语“Alexa,笑一个”,并做出响应.这样的真实事件给用户带来了极其不好的使用体验.为进一步改进语音识别软件的质量,对语音识别软件的功能测试进行分析已成为亟需攻克的挑战.

目前对于语音识别软件的测试需要音频文件及其转录文本形式的测试用例,进而通过测试,判定识别文本是否与转录文本一致.然而,手动构建这些测试用例既耗时又耗力[2].因此,对于语音识别软件的测试,存在着测试数据不够,测试数据场景单一,导致测试结果可信度受到影响,缺陷发现能力不足的问题.

在市场竞争日益激烈的情况下,用户驱动的软件演化更具有实际意义[3].用户评论时效性强,更新频繁;内容丰富多样,包含使用场景、缺陷报告等多种信息[4],可为智能软件的测试数据生成和测试验证提供重要的信息来源.通过收集用户评论,挖掘和分析用户评论中语音的场景信息,指导测试数据的生成,有助于辅助测试活动,提高测试人员的测试效率,及时发现缺陷原因.

为提高语音识别软件的测试充分性,本文提出一种用户评论驱动的语音测试数据生成方法TesGur(Test Speech Generation Driven by User Reviews).利用语音相关移动应用的用户评论,从中获取语音属性,并分析语音属性的组合.通过对语音种子进行语音属性及其组合的转换,生成测试语音,为语音识别软件的测试人员提供了一种测试数据的扩增手段.本文的贡献如下:

1)提出了一种从用户评论中提取语音属性及其组合的方法,为语音测试数据的生成提供信息指导.

2)将语音种子通过语音属性及其组合进行变换,生成场景丰富的测试语音,提高测试充分性.

3)在3款语音识别软件上进行实验,验证用户评论驱动生成的测试语音有利于检测语音识别软件的错误行为.

本文的整理脉络如下:第2节介绍了本文的相关工作;第3节阐述本文方法的整体思路和具体方法内容;第4节阐述设计的实验和分析方法;第5节展示和讨论了实验结果;第6节为本文方法的有效性威胁;最后一节总结论文.

2 相关工作

2.1 语音识别的测试

目前,对于测试语音识别软件的研究相对较少.其一是对于语音识别系统的基本识别能力进行测试.Iwama等人[5]于2019年提出了一种针对语音识别系统基本识别能力的测试方法,该方法根据语言模型生成测试句子;使用多个TTS(Text-To-Speech)合成器合成音频文件;最后,识别音频文件,将识别后的文本与语言模型生成的句子进行对比.但此方法存在结果有效性方面的威胁,如TTS模块可能不完整,无法得知测试结果是否对其它语音识别系统有效.

一些学者开展了面向语音识别的白盒测试研究.Du等人提出了一个能够系统生成大规模测试输入的自动化测试框架DeepStellar[6],通过覆盖引导生成测试用例来揭示有状态的深度学习系统的缺陷.Du等人在DeepSpeech-0.3.0预训练模型上展开实验,表明:DeepStellar能够根据覆盖范围生成具有高覆盖率的测试用例,并有效地对基于RNN的自动语音识别系统进行缺陷检测.

还有一些研究人员通过差分测试对语音识别软件进行测试.Asyrofi等人[2]提出了使用差分测试来测试语音识别的解决方案CrossASR,它比较多个语音识别软件的输出,以发现语音识别软件之间的错误行为.CrossASR以尽可能少的测试用例来发现故障;通过使用失败概率预测器来挑选最有可能导致失败测试用例的文本.与他们工作不同的是,本文通过对被测软件进行多次测试来发现错误行为.

现有的软件工程社区对于语音识别软件的测试不多,而在人工智能社区里,一些研究者通过对语音识别系统的输入进行微小扰动来生成测试用例[7-12].与这些工作不同的是,本方法从用户的角度生成测试用例,考虑了语音识别使用的真实场景,辅助测试活动.

2.2 基于用户评论的测试分析

用户评论具有海量、更新快、内容多样丰富等特点,覆盖缺陷报告、功能请求、功能评价等多类信息,对开发和测试人员发现和分析缺陷问题具有重要意义.

用户评论可以用来发现自动化测试工具不能识别的缺陷,提供缺陷的完整上下文信息,弥补测试工具的不足.Grano等人[13]利用机器学习分类算法挖掘与维护和测试相关的用户评论,通过计算测试工具生成的堆栈迹中崩溃相关的文本与崩溃相关的评论文本之间的相似度,构建用户评论与测试堆栈迹的关联关系,补充App崩溃发生时的上下文信息,辅助缺陷的复现与修复.在此基础上,Pelloni等人[14]开发了一个利用用户评论辅助App测试过程的工具BECLOMA,实现了用户评论的自动爬取,缺陷相关评论的提取和分类,并将崩溃相关的用户评论与测试工具生成的堆栈迹进行链接.BECLOMA工具可帮助开发人员自动抽取出与崩溃相关的用户评论,并进一步补充堆栈迹中缺少的崩溃的完整上下文信息.

用户评论是缺陷信息获取的重要来源,如何利用用户评论进一步辅助测试活动仍然面临挑战.为了缓解因语音识别软件版本更迭迅速,语音测试数据不足的问题,本文提出了一种用户评论驱动的测试数据生成方法,为发现更多语音识别缺陷提供数据来源.

2.3 测试输入生成

测试输入的生成与输入类型息息相关,不同类型的测试数据生成方法不同.对于图像类型的测试输入,测试数据生成的方法较多[15-17].DeepTest[18]使用九种不同的真实图像变换执行贪婪搜索:改变亮度、改变对比度、平移、缩放、水平剪切、旋转、模糊、雾天效果和雨天效果,为自动驾驶系统模拟不同的驾驶场景.DeepBillboard[19]生成现实世界中的对抗性广告牌,可以触发自动驾驶系统中的潜在转向错误.为了测试生物细胞图像的分类,Ding等人[20]构建了生物细胞分类器的测试框架.该框架迭代地生成新的图像,例如,通过在生物细胞图像中添加新的或增加人工线粒体来生成新的图像.

语音识别的测试需要处理语音输入,语音本质上是上下文敏感的连续数据,它根据发出语音的声音环境和发出语音的人而变化.Rusko等人[21]提出了一种利用语音合成器生成测试语音的方法,以测试识别的鲁棒性.该方法是根据目标声环境的不同,在信道转换和噪声添加的基础上实现.Du等人[6]考虑到背景噪声和音量变化,设计了一组适合音频输入的变换.他们首先从RNN中抽象并提取了一个概率转移模型.在此基础上,定义了状态测试标准,并用于指导有状态深度学习系统的测试生成.Laptev等人[22]利用TTS(Text-To-Speech)合成器来扩增语音数据.

目前,学术界对语音测试数据生成的研究较少.现有的测试语音生成大多依赖人工干预,缺乏系统化生成的指导方法.TesGur从用户角度出发,通过分析用户评论生成自然的测试语音输入,考虑了语音识别软件使用的真实场景.

3 用户驱动的语音测试数据生成方法

本节介绍了用户驱动语音测试数据生成方法的详细信息.图1展示了TesGur的总体框架.通过爬取Google Play移动应用市场中语音相关的移动应用的用户评论,进行预处理,通过语音属性的关键词获取用户评论中的语音属性及其组合.依据语音属性及其组合对语音种子进行变换,生成大量测试语音.该方法为语音识别的测试数据不足,场景单一的问题提供测试数据生成的方法,以此减少测试人员在构造测试语音的时间消耗.

图1 TesGur总体框架Fig.1 Framework of TesGur

3.1 语音相关APP用户评论的提取

移动应用市场上推出了各类智能语音相关的产品,例如语音搜索、语音笔记等.其用户评论海量、结构复杂,包含用户对语音产品的需求、使用场景等信息,有利于从用户角度挖掘语音的属性,指导测试语音的生成.例如,用户评论“Need to speak really clear and slow.Cannot use it for my purpose.”反映了输入语音必须清晰且缓慢.从该用户评论中可以得到“清晰”和“缓慢”这两种语音属性,同时,可以获得这两种语音属性的组合信息.本部分通过Scrapy工具自动爬取这类移动应用的用户评论,通过数据清洗和预处理,提取有关语音属性的用户评论进行分析.

3.1.1 清洗用户评论

用户提交的评论通常是非正式和多样化的,因此,需要对爬取到的用户评论进行数据清洗,形成统一的用户评论数据集.数据清洗的过程主要包括以下步骤:

1)非英文文本和表情过滤:移动应用软件应用于全球范围,本工作仅对英文文本进行分析,采用Vu等人[23]提出的基于规则和英语词典的方法进行过滤;用户在评论中使用的表情符号对于语音属性的提取没有意义,通过Python中的emoji库(1)https://pypi.org/project/emoji/识别表情符号,并利用正则表达式进行过滤.

2)缩写和错误单词改正:用户评论通常使用不正式语言,例如用户常将because简写成coz,information缩写成info等.本文结合Gu等人[24]的工作,共收集了常见的45种单词缩写,对用户评论进行还原.另外,用户在尺寸较小的设备上输写评论,难免会出现单词拼写错误[25].PyEnchant库(2)https://github.com/pyenchant/pyenchant可以实现英文拼写错误单词的检测,并推荐可能正确的书写形式,本文利用该库实现错误单词的改正.

3)过滤少于4个单词的评论:用户评论中包含大量单词数量较少的评论,例如,“Good!”“identify accurately”等,这些评论数目较多,但缺乏语音属性的信息[26],通过计算每条评论的单词数目,过滤掉少于4个单词的评论.

通过以上3个步骤的数据清洗,提高了原始用户评论的数据质量,形成了统一的用户评论数据集.

3.1.2 语音属性相关用户评论的提取

从统一的用户评论数据集中随机选取3500条用户评论,分析每条用户评论中是否包含语音属性的关键词.两名参与者参与了语音属性的标记工作,他们是软件工程专业的学生,有5年以上使用语音识别软件的经验.为了确保在标记过程中采用相同的标准,在标注前,参与者对语音属性出现的可能性进行了讨论.每名参与者均需要对所有选取的用户评论进行标记工作,当出现的标记不一致时,通过互相讨论以确定最终的种子关键词,并对所有种子关键词进行分类,得到对应的语音属性.

人工分析部分用户评论后,需要对所有的用户评论进行预处理.NLTK(Natural Language Toolkit)(3)http://www.nltk.org/为自然语言处理工具包,是NLP研究领域常用的一个Python库,具有搜索文本、计数词汇等功能.首先,使用NLTK包中的word_tokenize对所有的用户评论进行分词处理,通过空格将评论切分成单词的组合.在分词的基础上通过pos_tag进行词性标注,识别单词的词性,词性标注是词性还原的基本条件.利用Wordnet lemmatizer进行词性还原,获取单词的原始形式,例如,将动词的过去式或过去分词转换成动词原形.进而,通过common_contexts搜索所有用户评论中与每一类语音属性的种子关键词具有相似上下文的单词,将这些单词加入到关键词中,扩充关键词序列.最终,语音属性被定义为6种,分别为音量、音调、音速、噪音、音长以及口音,其对应的关键词如表1所示,最右列为每一类语音属性的用户评论例子,表示语音属性的关键词已加粗显示.随着用户评论数量的逐渐增加,语音属性及其关键词会被进一步扩充.

表1 语音属性及其关键词Table 1 Speech attributes and its keywords

提取所有用户评论中包含这些关键词的评论,作为有关语音属性的用户评论候选集.最后,设置几条过滤规则对候选集进行过滤,形成最终的语音属性相关的用户评论.过滤规则有:

1)用户评论中包含该关键词,但关键词并不用来修饰语音属性的用户评论,例如“I will recommend this high quality voice recognition”,high强调语音识别识别能力好,并非表示语音的高低音量.但这类过滤主要集中在个别的关键词上,如high、tiny、man/woman等.

2)关键词有一词多义,需要排除关键词的含义并非与语音属性相关的用户评论,例如tempo有速度和拍子两个含义,需要过滤掉含有tempo但表示拍子的相关用户评论.这类过滤也主要集中个别的关键词上,如tempo、situation、whisper等.

3.2 语音属性相关用户评论的分析

获取有关语音属性的所有用户评论后,需要对其进行分析,从中获取语音属性的词频及其组合.通过获取每一条语音属性的词频来反映出所有语音属性的讨论程度,词频越高,说明用户对这类语音场景的讨论性越多,更需要被测试.

从用户评论中提取出6种语音属性,通过计算这些语音属性在用户评论中的词频,得到相应的词频分布,如图2所示.在这6种语音属性中,噪音是用户评论中最经常提及的语音属性,其次是音速、音长、口音以及音量,这些语音属性对识别结果的影响较大.音调相对其他语音属性来说,在用户评论中最小,仅占4.8%.测试人员可以依据各语音属性在用户评论中出现的频率,对测试输入进行优先级排序,提高缺陷检测的效率.

图2 语音属性的词频分布Fig.2 Word frequency distribution of speech attributes

从所有语音属性相关的用户评论中获取语音属性的关联关系,对语音属性进行组合,进而生成组合后的测试语音.语音属性的组合是指该语音同时包含多种语音属性的特性,例如:{口音,音长}这对语音属性的组合是指输入为一段有地方口音且语音时长较长的一段语音.通过对语音种子进行语音属性组合上的数据蜕变,从而生成测试语音,模拟测试用例的场景信息.生成语音属性组合的主要操作流程如算法1所示.通过遍历每一条评论的每一个单词是否与关键词匹配,如果匹配则记录对应语音属性.对于每一条评论,可能包含一条语音属性的多个关键词,但只记录一条语音属性.

算法1.语音属性的关联关系生成算法

输入:所有语音属性相关的用户评论user_reviews;语音属性及关键词的字典attribute_dict,键为语音属性attribute,值为对应的关键词列表keyword_list

输出:语音属性组合attribute_combination

BEGIN

1. attribute_all = []//用于存储所有用户评论语音属性的组合

2.foreachrevinuser_reviews//遍历语音属性相关的用户评论

3. attribute_rev = []//用于存放每条用户评论语音属性的组合

4.foreachwordinwordsegment(eachrev)

5.forattribute,keyword_listinattribute_dict.items()

6.ifeachwordinkeyword_listthen

7. attribute_rev.append (attribute)

//如果用户评论中包含语音属性对应的关键词,则保存该语音属性

8.endif

9.endfor

10.endfor

11. attribute_all.append(remove_dup(attribute_rev))

//对每条评论根据关键词得到的语音属性进行去重操作

12.endfor

13. attribute_combination = Apriori(attribute_all)//通过Apriori算法根据所有语音属性的组合获取语音属性之间的关联关系

END

return attribute_combination

由于多种语音属性的组合空间很大,提取用户评论中语音属性的关联关系来对语音属性进行组合.TesGur采用Apriori算法提取用户评论中的语音属性的频繁项集,从而构建语音属性的关联关系库,降低组合空间.Apriori算法是一种挖掘频繁项集和关联规则的数据挖掘算法,利用频繁项集的先验性质,通过逐层搜索的方式迭代地寻找数据中所有项集的关系.本文将每一种语音属性对应一个项,0个或多种语音属性的集合,作为项集X,X={r1,r2,r3,…},每一条评论文本都是项的集合,语音属性的关联规则为ri→rj.通过两个重要的度量值来衡量语音属性的关联关系,支持度(support)表示评论数据集中同时包含ri和rj的评论数与所有评论数之比,置信度(confidence)表示包含ri和rj的评论数与包含ri的评论数之比,设置最小置信阈值为80%,最小支持阈值为20%.最终,语音属性的频繁项集以集合的方式呈现.表2为通过对用户评论进行分析所得到语音属性的组合,共计10组.

表2 语音属性的组合Table 2 Combinations of speech attributes

3.3 语音测试数据的生成

对于传统软件的组合测试,满足k路组合覆盖准则的测试用例数目小于所有种子测试用例上进行k个数据蜕变的所有组合数量.而对于语音识别这种智能软件,数据蜕变是可交换的,可关联的和幂等的.因此,满足组合覆盖准则的测试用例数量可以少得多,表明智能软件测试数据生成的必要性.

对于不同的语音属性,为了保证生成的语音更具有真实性,需要通过不同的方法对语音种子进行转换,生成测试数据.音量、音调以及音速是音频的基本属性,本文通过利用SoX(4)http://sox.sourceforge.net/sox.html对音频进行变换,改变其中一个语音属性时,应不改变其他语音属性.SoX可以读取和写入常见格式的音频文件,进而选择性地加入声音效果.对于音长的语音属性,本文通过随机顺序叠加随机数量的语音种子,由于本文测试的是一句话语音识别效果,因此需要保证叠加后语音的长度不超过60s.噪声环境复杂多样,所以环境噪声的转换最为复杂,本文使用audiomentations库(5)https://github.com/iver56/audiomentations中提供的3种方式进行变换,其一是随机添加高斯噪声,其二是添加短时噪声,其三是添加背景噪音.口音对于语音识别软件的挑战较大,为了保证测试数据的真实性和有效性,本文将6个国家的口音数据作为测试数据,6个国家分别为韩国、中国、西班牙、越南、阿拉伯和北印度.每个国家设置两名发音人.

对于语音属性的组合,对一条音频连续进行两次单独变换即可.对语音的一次变换是1-way组合完备,对语音进行组合变换是2-way组合完备,因此,本文提出的TesGur方法满足2-way组合覆盖准则.

4 实验设计

本文使用自然语言处理相关技术对用户评论进行预处理,获取语音相关的用户评论,进而提取语音属性及其组合,对语音种子进行数据蜕变生成语音测试数据.实验的目的是验证通过语音相关移动应用的用户评论生成的测试数据应用于语音识别测试的有效性.

实验设计主要为以下3个研究问题:

RQ1:用户评论驱动生成的语音测试数据应用于语音识别软件的缺陷检测能力如何?

RQ2:基于用户评论组合语音属性生成的测试语音,识别错误率提高了多少?

RQ3:与语音属性随机组合对比,用户评论驱动的语音属性组合方法能否提高识别错误率?

4.1 数据集

4.1.1 用户评论数据集的构建

爬取移动应用商店Google Play Store中5个有关语音的移动应用的用户评论,这5个移动应用下载量较高,上线了一定时间并且有充足的用户评论.选取提交时间范围为移动应用投入使用至2021年9月的用户评论文本,评论总数共计37721条,具体评论数目如表3所示.

表3 语音相关移动应用APP的用户评论数目Table 3 Number of user reviews for speech-related mobile apps

4.1.2 语音数据集

为了验证用户评论驱动生成的语音测试数据的检错能力,本文使用Mozilla发布的开源语音识别数据集项目Common Voice[29],它是当前全球最大的人类语音数据集.

实验1随机选择200条真实的英语语音数据,并保证识别结果准确,实验2随机选择其中的100条语音数据进行组合语音属性的实验验证.

对于口音的转换,本文选择使用L2-ARCTIC语料库[30],它是一个非母语的英语演讲集.本工作选择了6个地区中带口音的两名演讲者的语音各200条,共计2400条语音用于对口音的语音属性进行测试.

对于噪音语音属性,本工作使用Signal Processing Information Base的noiseX-92噪声库,时长低于1秒为短时噪声,共计51个,剩余噪声作为背景噪声,共计881个.

4.2 语音识别软件

为了验证通过用户评论生成的测试语音对各语音识别软件测试的有效性,本文选择3款国内先进且应用广泛的语音识别软件进行实验,分别是百度、讯飞和阿里云语音识别软件.讯飞被国家科技部列入新一代人工智能开放创新平台名单,为同行业唯一.百度语音识别采用流式端到端语音语言一体化建模算法,支持手机应用语音交互、语音内容分析等多功能.阿里云语音识别使用端到端的语音识别模型,支持客服、直播、会议等多个场景.

4.3 度量指标

为了评估基于语音属性及其组合生成的测试语音应用于语音识别功能时的检错能力,本文通过单词错误率来衡量识别错误率.单词错误率WER(Word Error Ratio)是常用于衡量语音识别准确率的度量指标,计算将文本A编辑成文本B需要的最少变动次数,不考虑语义.计算生成测试语音的识别结果在语音种子识别结果基础上的插入词(记为I)、替换词(记为S)和删除词(记为D)的个数,语音种子识别结果词序列的个数记为N,WER的公式如下:

对于语音的识别错误率,本工作定义如下:

在公式中,分子为指标WER大于0的生成测试语音数目,当WER为0时表明,两个结果完全一致,当WER>0时,表明两个结果不一致.分母为所有生成测试语音的总数目.

5 结果分析

5.1 实验1

为验证用户评论驱动生成测试语音有利于检测出语音识别软件中的缺陷,实验1选取200个语音种子,通过6种语音属性共生成测试语音23400条.其中,音量、音调、音速以及音长分别生成3000条,噪音由于有3种变换方式,生成9000条,口音设置了6个国家,每个国家两名发音人,故生成了2400条.各语音属性的变换均能保证生成测试语音的真实有效.

由于口音使用单独的测试数据集(具体介绍在4.1.2节),因此,口音的语音属性将单独分析.对于音量、音调、音速、噪音和音长这5种语音属性,图3展示了通过这五种语音属性变换生成的测试语音在3款语音识别软件上的识别错误率情况.

图3 语音属性-识别错误率图Fig.3 Speech attribute-recognition error rate

由于选取的语音种子识别结果正确,因此对于变换前的测试数据,识别错误率为0.将通过6种语音属性进行变换后生成的测试语音输入至这3款语音识别软件中,均出现了识别错误.识别错误率从小到大依次为音量、音调、音速、噪音和音长,其中,阿里云音速的识别错误率相比于音调较低一些.音量的识别错误率最低,表明现有的语音识别软件对于音量变化的测试语音能有很好的识别能力;音长的识别错误率最高达到0.75左右,远高于其他语音属性,表明当前语音识别软件对于长时间的语音识别效果较差,很容易出现识别错误.

3款语音识别的识别错误率从低到高依次为阿里云、讯飞和百度.尽管阿里云的识别错误率最低,但音长的错误率仍然达到了0.33.讯飞语音识别音长的识别错误率达到0.759,音量、音调、音速错误率均较低,在0.15以下.百度语音识别对于5种语音属性的识别错误率最高,其音长错误率达到0.769,也就是说,基于音长属性生成的3000条测试语音中,共有2307条识别错误;音调、音速以及噪音的错误率也达到0.29左右,表明基于音调和音速属性生成的3000条测试语音中,共有870条识别错误,基于噪音属性生成的9000条测试语音中,共有2610条识别错误.可以得出,在识别准确的语音种子上生成的测试语音均降低了各语音识别软件的识别准确率.

对于口音的语音属性,测试数据为来自6个国家发言人的语音数据.百度、讯飞以及阿里云语音识别对于6个地区的口音识别错误率平均值分别为0.67,0.57,0.39,三者对于口音的语音属性相对于其他语音属性来说,识别错误率较高,可见通过不同口音的测试语音可以有效发现语音识别软件的不足.

图4为3个语音识别软件对于口音属性的测试结果,横坐标为6个国家,纵坐标为识别错误率.从图中可知,越南和阿拉伯地区的口音识别错误率相对于其他地区较高,表明3款语音识别对于这两个国家的口音均没有较强的识别能力.对于百度语音识别,中国、越南、阿拉伯地区的口音识别错误率均较高,其中,中国地区的识别错误率达到0.7125,表明在400个测试数据中,共有285条识别结果出现错误;讯飞语音识别对各地区的错误率波动较小,均在0.57左右,表明含口音的测试数据输入至讯飞语音识别中,有超过一半的测试数据出现了错误;阿里云语音识别对于北印度地区的口音识别错误率最低,仅达到0.26.因此,不同的语音识别软件对于不同口音的测试数据识别效果不同,识别错误率较高的语音识别软件需要增加相关的语音训练数据或修改模型结构来提高软件对这类语音的识别能力.进一步表明,从用户评论中提出口音这一语音属性对于语音识别软件测试的有效性和必要性.

图4 国家-口音识别错误率图Fig.4 Country-accent recognition error rate

5.2 实验2

为验证通过用户评论对语音属性进行组合生成的测试语音能够提高识别错误率,实验选取100个测试结果正确的语音种子.对于音量、音调、音速和音长的语音属性,每条测试数据分别进行5次变换;对于噪音的语音属性,共3种变换,每种变换生成2个,共生成6个变换;对于口音的语音属性,选择6个地区的口音.因此,对种语音属性进行变换共生成3200条测试数据.对于用户评论中获取的10种语音属性组合,共生成组合后的测试语音共计29600条.

将所有测试数据输入到3款语音识别软件中,分析对语音属性组合而生成的测试语音的识别能力.表4为3种语音识别软件语音属性组合的测试结果,行标签为用户评论中获取的语音属性组合,列标签表示各语音识别软件的识别错误率,语音属性1和2下方的数字表示组合后的识别错误率相对于单独语音属性的变化值.从表中可以清晰地发现,组合后的识别错误率均有所提升.

表4 语音属性组合的测试结果Table 4 Test results of speech attribute combinations

对于阿里云语音识别,音长的识别错误率为0.38,口音的识别错误率为0.382,但当音长和口音组合后,识别错误率达到0.968,逼近100%,即,基于音长属性生成的500条测试语音中包含190个识别错误,600条含口音的测试语音包含230条错误,但当两者组合后生成的3000条语音中,错误识别数目达到2904条,进一步表明组合后生成的测试语音可以有效检测出语音识别软件的错误.

将组合语音属性生成的测试语音输入至百度语音识别后,相对于单独语音属性生成的测试语音,识别错误率音均有了提升.除了口音与音量的组合,比口音的识别错误率低了0.015.经分析可知,当口音的语音增大音量后,能识别准确,而减小音量的仍不能识别准确,因此,组合后的识别错误率反而降低.

在语音属性组合后,讯飞语音识别的识别错误率相对于单个语音属性有所提升,其中,有关音长的组合错误率均很高.

通过计算语音属性组合后识别错误率的变化值,可以发现通过用户评论对语音属性进行组合生成的测试语音能显著提高识别错误率.

5.3 实验对比

本文将从用户评论中获取的语音属性组合与随机组合进行比较.随机组合的方法是从6种语音属性中选择2种语音属性构成一种语音属性组合,共生成10种语音属性组合,随机组合了5次.

图5为百度语音识别的对比实验结果,横坐标为本文方法和其他5种随机组合,纵坐标为识别错误率,图中三角形表示均值,中间线表示中值.图中显示,从用户评论中提取语音属性的组合方法TesGur,识别错误率相对于其他随机组合较高,表明通过用户评论中语音属性的组合生成的测试数据比随机组合更能检测到语音识别软件的错误行为.对于随机组合1来说,识别错误率的整体分布均低于TesGur.随机组合4的最小值及均值均低于TesGur.

图5 对比实验结果(百度语音识别)Fig.5 Comparative experimental result(Baidu ASR)

阿里云语音识别的对比实验结果如图6所示.从用户评论中提取组合的方法在识别错误率中最高,对于随机组合2和随机组合4来说,虽然最大值与TesGur相近似,但最小值低于TesGur,且随机组合4的中值和均值也低于TesGur.

图6 对比实验结果(阿里云语音识别)Fig.6 Comparative experimental result(Ali Cloud ASR)

讯飞语音识别的对比实验结果如图7所示.TesGur方法在识别错误率中最小值、最大值以及均值都是最高.对于随机组合4来说,虽然均值、中位值与TesGur相近似,但最小值低于TesGur.对于随机组合5,除了中值与TesGur近似,其余数值均比TesGur低.

图7 对比实验结果(讯飞语音识别)Fig.7 Comparative experimental result(iFlytek ASR)

在3个语音识别软件上的验证结果表明,从用户评论中提取语音属性组合的方法比随机组合的方法识别错误率高,验证了通过用户评论生成语音属性组合生成的测试数据的有效性,一定程度上提高了识别错误率.

6 有效性威胁

在本文方法实施过程中对有效性存在威胁的因素主要体现在以下方面.

1)本文只提取了选取用户评论中存在的6种语音属性,这6种语音属性一定程度上代表了目前大部分语音识别软件的不足点,均具有测试的必要性.随着技术进步,语音识别软件版本更迭,用户评论不断更新,其他语音属性在用户评论中被提起的占比会越来越大.因此,本方法可随时间的更迭不断更新与扩展.

2)本文在提取语音属性的用户评论时,部分步骤使用了手工分析的方法,尽管一定程度上保证了语音属性相关评论提取的准确性,但手动分析耗时低效.下一步,我们将研究自动化的方法提取语音属性的相关评论.

3)考虑到实验的可行性,本文未能获取到3款语音识别软件的用户评论,故使用了语音相关移动应用的评论.本文提出的方法可以推广至能获取用户评论的语音类产品,根据产品用户评论生成的测试数据更具有针对性,而本文提出的语音属性更具有通用性.

7 结束语

针对语音识别测试数据不足的问题,本文提出了一种用户评论驱动的语音测试数据生成方法,通过分析语音相关应用的用户评论,获取语音属性及其组合,对语音种子进行变换,生成场景丰富的测试语音.通过在百度、阿里云以及讯飞3款语音识别软件上进行实验,表明基于用户评论生成的测试语音可以有效检测出语音识别软件的错误行为,减少了测试人员构造测试数据的时间消耗.

猜你喜欢

口音错误率测试数据
法国立法禁止嘲笑他人口音
别人都在说英语,只有中国人在说口音
小学生分数计算高错误率成因及对策
测试数据管理系统设计与实现
你说话的口音反映出什么?
正视错误,寻求策略
基于自适应粒子群优化算法的测试数据扩增方法
解析小学高段学生英语单词抄写作业错误原因
空间co-location挖掘模式在学生体能测试数据中的应用
降低学生计算错误率的有效策略