2.5 示例介绍
除2.4节讲解的YesNo示例外,Kaldi还提供了大量的例子,一方面为用户展示了大部分工具的使用方法,另一方面也为语音识别领域的研究者提供了一个重复他人实验和对比结果的平台。这些示例包括数据示例、竞赛示例和其他示例。
2.5.1 数据示例
数据示例的作用是,如果用户手头有对应的数据,就可以直接使用示例脚本训练模型并测试。英语在语音识别研究领域是使用最为广泛的语言,在Kaldi的数据示例中更新最频繁的也是英语的示例。其中,YesNo属于“玩具”数据,已经在本书2.4节介绍。下面按照数据类型分别介绍其他英语数据。
1.朗读数据
朗读数据包括TIMIT、WSJ、Librispeech等,可以按照规模进行划分。
1)小型数据(10小时以内)
小型数据包括TIDIGIT、TIMIT、RM和AN4。前三个数据集的版权都属于语言数据联合会(LDC),采集时间在1980—1989年。当时正值语音识别快速发展时期,人们期望通过语音控制计算机做出一些实际的操作命令。TIDIGIT录制的内容是数字串,而RM录制的内容是控制指令。TIMIT是为了研究美式英语不同地区的口音之间的差异而录制的,因此也只包含有限的文本。目前,仍有一些实验在TIMIT上检验对音素的区分性能。AN4是由美国卡内基梅隆大学(CMU)于1991年采集的,其内容是个人信息录入,总共包含约50分钟的语音,可以在CMU网站上下载。
2)中型数据(100小时以内)
WSJ是由美国国防高级计划研究局(DARPA)于1992年录制的,版权属于LDC,内容是朗读华尔街日报,共80小时。AURORA4是在WSJ的一部分数据中加入噪声得到的噪声语音库,共12小时,版权属于欧洲语言资源协会(ELRA)。此外,还有一个可以免费下载的中型数据库Voxforge。VoxForge是一个可以上传语音的网站,用户可以朗读网站上随机提供的文本贡献自己的声音,其创建的初衷是为免费和开源的语音识别引擎收集各种语言的带标注数据。Kaldi中的Voxforge示例使用了其中的一部分英语数据,包含美国、英国、澳大利亚和新西兰四个国家人们的口音,共75小时。
3)大型数据(500小时以上)
Librispeech是由Kaldi开发者整理并发布的免费英语朗读数据,其数据总量是960小时,内容来自有声电子书项目LibriVox。CommonVoice是由Mazilla基金会发起的创建开源语音数据集的项目,其采集方式与Voxforge的采集方式类似,由用户在网站上根据提示文本进行录音。此外,还有用户进行数据筛查,随机查看录音与文本是否一致。在2017年,这个项目发布了第一个可以免费公开下载的英语数据集,共包含20000人的500小时录音。
2.电话录音
Vystadial_en示例演示了如何使用Vystadial项目中采集的英语数据子集,采集方式是电话录音,通话主题是所在地附近的餐馆推荐。数据总时长是45小时。这个数据采集时间是2013年,可以在项目网站上免费下载。
SWBD示例使用的数据是Switchboard,这是一个由DARPA发起的电话语音采集项目。通话双方围绕一个话题自由聊天,上限是10分钟。录音者全部使用美式发音,共500多人参与,收集了317小时的录音。由于是自由聊天,因此录音需要标注切分点,内容也需要人工转写,Kaldi的SWBD采用的是由美国密西西比州立大学(MSU)发布的经过人工审核的标注文本。这个数据版权属于LDC。SWBD示例选用的测试集是美国国家标准与技术研究院(NIST)在2000年组织的语音识别评测时使用的测试集,包含20段Switchboard对话和20段CallHome对话。
Fisher_english和Fisher_swbd两个示例都使用了Fisher数据集,其中后者还加入了Switchboard数据。Fisher是在由DARPA牵头的高效可复用语音转写项目(EARS)和全球自动语言利用项目(GALE)中采集的英语电话对话数据。这个数据库的采集方式与Switchboard的采集方式类似,但是对话内容涉及的领域更广,因此标注的准确度也就比Switchboard标注的准确度低。Fisher数据库的采集时间是2003年,共包含一万多段电话录音,总时长达到了1760小时。该数据版权属于LDC。这两个示例的测试数据与SWBD示例的测试数据相同。
3.广播电视
hub4_english示例使用了若干数据集,包含1995—1997年美国多个广播和电视节目的录音,共200小时。这个数据的采集源于DARPA的HUB4项目,版权属于LDC。
tedlium示例使用了共118小时的TED演讲,数据由法国国立缅因大学的信息实验室整理。这个数据可以在开源数据网站OpenSLR上免费下载。
4.其他类型
ami是一个多麦克风阵列的示例,使用的数据库来自一个欧盟的研究项目即增强多方交互(AMI)。采集场景是多方会议现场,使用头戴麦克风和麦克风阵列同时采集,共100小时。该示例的数据可以在项目网站上免费下载,也可以在OpenSLR网站上免费下载。
bn_music_speech示例使用的数据库名字叫作MUSAN,是由Kaldi的开发者制作的,用于语音检测和音乐分离。其中包括60小时来自LibriVox的朗读语音、42小时音乐和6小时噪声。这个数据可以在OpenSLR网站上免费下载。
multi_en示例是上面若干个示例的数据汇总,包括Fisher、Switchboard、WSJ、hub4、Tedlium和Librispeech,总数据时长达到3000小时以上。这个示例展示了在多个不同风格的数据来源下如何训练语音识别模型。
ptb示例只用于语言模型,使用宾州树库(PTB)数据。
voxceleb示例演示了使用VoxCeleb数据库进行说话人识别的方法。VoxCeleb分为两个子集,分别包含1251位名人和6112位普通人的声音,采集来源是视频分享网站Youtube。
callhome_diarization示例演示了使用说话人识别数据训练说话人分割系统的方法。与说话人识别不同,说话人分割的目的是在一段语音中将不同人说的话按照切换时间标记出来。
除英语外,Kaldi还提供了其他多种语言的数据库示例,其中几个使用比较广泛的语言都有不同风格和数据量的示例,如表2-1所示。
表2-1 Kaldi中的非英语语音示例
续表
在数据示例中,大部分语言都有免费公开的数据可供使用。用户可以使用这些数据训练语音识别系统,也可以根据自己的数据量和应用场景,参照示例准备自己的训练环境。训练中文模型的读者可以参考multi_cn示例,它展示了如何使用大约1000小时免费公开的若干中文数据训练一个可用的模型,并示范了如何引入额外的语言模型。
2.5.2 竞赛示例
竞赛示例主要是由Kaldi开发者添加的,用于将自己基于Kaldi提交的参加某次评测的系统开放出来方便重现结果。测试数据都是由竞赛组织方提供的,如果不参加竞赛,就无法获取测试数据,因此用户一般难以准确复现结果,但是可以参照示例脚本搭建自己的特定场景下的训练环境。目前,Kaldi中的竞赛示例分为以下几种。
1.复杂环境下的语音识别
ASPIRE示例,用于参加2014年美国国家情报高级研究计划局(IARPA)混响环境中的自动语音识别竞赛(ASPIRE)。训练数据采用Fisher英语数据,并使用多个混响噪声数据库生成模拟混响环境的数据。在示例中提供了这些混响噪声数据的下载和使用方法,大部分都是可以免费公开获取的。
REVERB示例,最初用于参加2014年IEEE信号处理协会的混响语音增强语识别竞赛(REVERB)。这个竞赛的训练数据使用模拟的混响语音数据,基于WSJCAM0数据库人工加入噪声,这是一个使用WSJ文本的英式英语数据库,由英国剑桥大学录制。测试数据包含两部分,一部分是模拟数据,另一部分是真实混响数据。真实混响数据同样使用WSJ文本,在会议室环境下使用远距离的单声道麦克风、双声道麦克风和一个8头的麦克风阵列同时采集。这两部分数据现在都由LDC负责分发。这个示例在竞赛结束后还在更新,有些混响语音识别新技术的实现可以在这里看到。
CHIME示例,截至本书完稿,Kaldi提供了CHIME1~CHIME5共5个示例。这是由语音分离与识别竞赛(CHIME)的组织者提供的历届竞赛的基线系统及Kaldi开发者的参赛系统。这个竞赛的数据都是在真实嘈杂环境下按照WSJ文本录制的。目前,除第一届的数据可以免费公开下载外,其他的数据都由LDC分发。
2.关键词检出
BABEL示例,BABEL是IARPA的巴别塔计划的简称,目标是现实情况下多语言的语音识别。BABEL示例解决的是其中的关键词检出问题,提供了不同语言的关键词检出系统训练和测试方法。示例的数据仅由计划参与单位持有。
3.说话人识别
SRE示例,包括SRE08、SRE10和SRE16。SRE是美国国家标准与技术研究院(NIST)组织的说话人识别评测,1996—2005年每年举行一次,从2006年开始隔年举行一次。Kaldi的示例对应的是2008年、2010年和2016年的SRE评测。其中,2008年的全部数据和2010年的测试数据已经由LDC负责分发,而2010年的训练数据及从2012年开始的全部数据目前仍然只能由评测参与方持有。SRE08的训练使用了Fisher、Switchboard无线通信版和2004年、2005年SRE的数据。SRE10的训练在SRE08的基础上又增加了Switchboard第二版和2006年、2008年SRE的数据。SRE16的训练去掉了Fisher数据,增加了2010年SRE的数据,并使用了一些噪声数据库来生成更多的数据。
SITW示例,对应的是2016年由美国斯坦福国际研究院(SRI)主办的旨在测试真实环境下的说话人识别性能的评测。示例中采用VoxCeleb作为训练数据,加入了MUSAN噪声和一些模拟混响的噪声数据。
DIHARD_2018示例,是一个说话人分割的示例,展示了用于参加2018年说话人分割评测(DIHARD)的训练环境。这个评测的特点是测试数据都是真实环境下的录音,而参与者可以使用任意数据进行训练。
4.语种识别
LRE07示例。LRE是NIST组织的语种识别评测,与SRE交替隔年举行。这个示例展示了训练一个2007年LRE评测的参赛系统的环境,其测试数据包含18种语言,共66小时。目前,该数据由LDC分发。示例的训练数据包括由LDC开发的多语言电话交谈库CALLFRIEND中的13个语言的子集,以及往年的SRE和LRE的数据。
2.5.3 其他示例
发音错误检测(Mispronunciation Detection)技术可以在音素级别上检测出语音中的发音错误,该技术被广泛地应用于外语教学中。Kaldi提供了一个示例gop,其命名来自于经典的发音良好度(Goodness Of Pronunciation,GOP)算法,该示例演示了如何使用发音良好度算法进行发音错误检测。
除与语音相关的示例外,Kaldi还提供了一些可以用于做图像识别类任务的示例,如表2-2所示。
表2-2 Kaldi中的图像识别类示例
2.5.4 示例结构
打开一个Kaldi的示例通常会看到下面这样的结构:
这就是一个典型的语音识别示例的顶层文件夹结构,其中包含一个描述示例大概任务或数据情况的文件,以及若干不同版本的示例,数字越大或同样数字后面的字母越靠后,表示示例越新。一般有了新的示例版本,以前的版本就不再更新了,大多数的示例只有s5一个版本。在说话人识别和图像的示例中,用字母v代替s,命名规则与语音识别示例的命名规则一致。
进入一个语音识别的示例,可以看到如下结构(这里以Librispeech/s5为例):
1)cmd.sh定义了训练任务提交的方式。在本书第2.3.7节中介绍了单机和集群环境的配置方法,在这里要根据实际需要进行修改。大部分脚本默认使用SGE集群,其设置如下:
如果是单机,则要改成使用run.pl:
如果配置了NFS和免密登录,则可以使用ssh.pl进行任务分发,前提是在训练环境目录下创建.queue文件夹,并在其中创建名为machines的文件,将所要使用的机器名写在里面,例如:
如果是其他集群,则可以根据自己的环境选择对应的任务提交方式,例如:
2)path.sh定义了训练脚本中所使用的若干环境变量的位置,其中最重要的就是Kaldi代码编译的位置。默认情况下,这个路径按照Git复制的结果设置相对路径。
如果把Kaldi的编译结果单独保存起来,则要在这里指明后才可以使用:
3)run.sh是顶层运行脚本,集成了从资源下载、数据准备、特征提取到模型训练和测试的全部脚本,并给出了获取统计结果的方法。
4)RESULTS是结果列表文件,给出了run.sh中每一步训练的模型在测试集上的效果。
5)local是一个文件夹,包含用于处理当前示例数据的脚本、识别测试的脚本及除GMM训练外其他训练步骤的脚本。
6)conf文件夹保存了一些配置文件,如特征提取的配置和识别解码的配置。
7)steps和utils是两个链接,指向WSJ示例中的这两个文件夹。这两个文件夹中的脚本是各个示例通用的。steps中的脚本是各个训练阶段的子脚本,如不同的特征提取、单音素的GMM训练、三音素的GMM训练、神经网络模型训练、解码等。utils中的脚本用于协助处理,如任务管理、文件夹整理、临时文件删除、数据复制和验证等。
除此之外,不同类型的示例还有一些特殊的顶层文件或文件夹。说话人识别和语种识别的示例有一个指向sre08/v1/sid的链接,里面是关于说话人识别的通用脚本。图像示例中有一个指向cifar/v1/image的链接,里面是关于图像处理和图像识别结果统计的通用脚本。用于验证语言模型的示例PTB中有一个指向Kaldi文件夹下的scripts/rnnlm目录的链接,里面是关于神经网络语言模型的脚本。Librispeech示例中也有这个链接,因为在Librispeech中提供了神经网络语言模型的实验脚本。