2019-04-24 09:37:17 whale52hertz 阅读数 132
  • 云从科技:详解CNN-pFSMN模型以及在语音识别中的应用

    近日,云从科技在语音识别技术上取得重大突破,在全球最大的开源语音识别数据集Librispeech上刷新了世界纪录,错词率(Worderrorrate,WER)降到了2.97%,将Librispeech的WER指标提升了25%,大幅刷新原先记录。本视频课程讲解了:大规模词汇连续语音识别,LVCSR前沿与最新进展,和CNN-pFSMN声学模型。

    1134 人正在学习 去看看 CSDN讲师

来源:ATYUN AI平台 

技术的进步推动了语音界面的发展,通过机器学习工具的普及,使得更多的互联网连接产品能够比以往任何时候都更能倾听和回应我们的声音。许多人将会体验到新的语音设备带来的便利。

语音识别取得了两个里程碑进展 Mozilla发布开源语音识别模型和语音数据集

Mozilla(缩写MF或MoFo)全称Mozilla基金会,是为支持和领导开源的Mozilla项目而设立的一个非营利组织。Mozilla对语音识别的潜力感到兴奋。他们相信这项技术能够并且将会带来一波创新产品和服务的浪潮,并且应该对所有人开放。

上个月29日,Mozilla的机器学习小组的语音识别工作取得了两个重要的里程碑进展。其中之一是Mozilla的开源语音识别模型首次发布,该模型的准确性接近人类在听同样的录音时的感知。其次,Mozilla还发布了世界上第二大公开的语音数据集,这是全球近2万名用户的贡献。

一个接近用户期望性能的开放源码的语音文本引擎
目前只有少数几家大公司的商业质量语音识别服务是可行的。这就减少了用户的选择,也减少了初创公司、研究人员甚至更大的公司的可用功能,这些公司想要为他们的产品和服务提供支持。

这就是为什么Mozilla将DeepSpeech作为一个开放源码项目。Mozilla和一群志同道合的开发人员、公司和研究人员组成的社区一起,应用了复杂的机器学习技术和各种各样的创新,在LibriSpeech的测试数据集上构建了一个语音到文本的引擎,出错率仅为6.5%。

在发布的第一个版本中,引擎包含了Python、NodeJS和一个命令行二进制代码的预构建包,开发者可以马上使用它来进行语音识别。

构建世界上最多样化的公开语音数据集,为训练语音技术最优化
如此少的服务在商业上可用的一个原因是缺乏数据。创业公司、研究人员或任何想要建立语音技术的人都需要高质量的、转录的语音数据来训练机器学习算法。现在,他们只能访问相当有限的数据集。

为了解决这一障碍,Mozilla在今年7月启动了Common Voice项目。目标是让人们可以很容易地把他们的声音捐赠给一个公开的数据库,这样就可以建立一个语音数据集,每个人都可以用它来训练新的语音应用程序。

语音识别取得了两个里程碑进展 Mozilla发布开源语音识别模型和语音数据集

到目前为止,Mozilla已经发布了第一批捐赠者的声音:近40万种录音,相当于500小时的演讲。任何人都可以下载这些数据。

Mozilla收到了来自全球范围内的2万多人提供的不同的声音。通常,现有的语音识别服务无法理解不同的口音,而且大多数情况,比起女性更善于理解男性的语音——这是语音识别服务接受训练的数据中存在的偏见结果。Mozilla希望说话者的数量和他们的不同的口音能够创造出一个全球性的代表数据集,从而带来更具包容性的技术。

为此,Mozilla开始使用英语,并且正在努力确保从2018年上半年开始,Common Voice项目能够支持多种语言的语音捐赠。最后,当经历了寻找可公开的语音数据集的挑战时,Mozilla还收集了所有其他我们所知道的大型语音收集的链接。

Mozilla认为,技术应该是开放的,所有人都可以访问,包括语音。Mozilla开发这种技术的方法是由设计开放的,他们非常欢迎更多的合作者和贡献者与之一起工作。

本文转自ATYUN人工智能媒体平台,原文链接:语音识别取得了两个里程碑进展 Mozilla发布开源语音识别模型和语音数据集

更多推荐

达观数据荣获上海市软件企业核心竞争力评价,推动上海软件行业发展

云从科技 | 从初创企业上位AI“国家队”,看看背后都干了些什么?!

智行者蜗小白“无人清扫车”南翠屏上岗(图)

裤子变裙子,GAN图像转换新进展

欢迎关注ATYUN官方公众号,商务合作及内容投稿请联系邮箱:bd@atyun.com
欢迎关注ATYUN官方公众号,商务合作及内容投稿请联系邮箱:bd@atyun.com

 

2017-08-19 20:14:30 godloveyuxu 阅读数 45285
  • 云从科技:详解CNN-pFSMN模型以及在语音识别中的应用

    近日,云从科技在语音识别技术上取得重大突破,在全球最大的开源语音识别数据集Librispeech上刷新了世界纪录,错词率(Worderrorrate,WER)降到了2.97%,将Librispeech的WER指标提升了25%,大幅刷新原先记录。本视频课程讲解了:大规模词汇连续语音识别,LVCSR前沿与最新进展,和CNN-pFSMN声学模型。

    1134 人正在学习 去看看 CSDN讲师

按:本文原作者 Cindi Thompson,美国德克萨斯大学奥斯汀分校(University of Texas at Austin)计算机科学博士,数据科学咨询公司硅谷数据科学(Silicon Valley Data Science,SVDS)首席科学家,在机器学习、自然语言处理等领域具有丰富的学术研究和产业界从业经验。雷锋网编译。


作为 SVDS 研究团队的成员,我们会经常接触各种不同的语音识别技术,也差不多见证了语音识别技术近几年的发展。直到几年之前,最先进的语音技术方案大多都是以语音为基础的(phonetic-based),包括发音模型(Pronunciation models),声学模型(Acoustic Modelling)和语言模型(Language Model)等。通常情况下,这些模型大多都是以隐马尔可夫模型(HMM)和 N-gram 模型为核心的。未来,我们希望以这些传统模型为基础,探索一些诸如与百度 Deep Speech 等最新的语音识别系统相结合的新技术。当然,目前互联网上可以找到许多针对这些基础模型进行解释、汇总的文章和资料,但针对它们之间的差别和特点展开阐述的却并不多。

为此,我们对比了五款基于 HMM 和 N-gram 模型的语音识别工具:CMU Sphinx,Kaldi,HTK,Julius 和 ISIP。它们都是开源世界的顶级项目,与 Dragon 和 Cortana 等商业语音识别工具不同,这些开源、免费的工具可以为开发者提供更大的自由度以及更低的开发成本,因此在开发圈始终保持着强大的生命力。

需要提前说明的是:以下分析大多来源于我们的主观经验,同时也参考了互联网上的其他信息。而且这篇文章也并非一个覆盖所有语音识别开源工具的汇总类文章,我们只是对比了其中五款相对更主流的产品。另外,HTK 并不是严格开源的,它的代码并不能重新组织发布,也不能用于商业用途。

想知道更多语音识别工具的用户请点击以下链接,其中列出了几乎所有开源/非开源的语音识别工具,非常全面。

https://en.wikipedia.org/wiki/List_of_speech_recognition_software 


  编程语言:

根据你对不同编程语言的熟悉程度,你可能会更偏爱某一种工具。如上图所示,这里列出的五款工具中,除了 ISIP 只支持 C++ 之外,全都支持 Python。你可以直接在它们的官网找到不同语言对应的下载链接。不过,Python 版有可能并不会覆盖工具包的全部功能,有些功能还可能是为其他语言的特性单独设计的。另外值得注意的是,CMU Sphinx 还支持 Java、C 和其他更多语言。

  开发者活跃度:

这里列出的五个项目均源于学术研究。

从名字也能看出,CMU Sphinx 是一款源于卡内基梅隆大学的产品。它的研发历史大约可以追溯到 20 年前,目前在 GitHub 和 SourceForge 平台同步更新。在 GitHub 平台有 C 和 Java 两个版本,而且据说分别只有一个管理员维护。但在 SourceForge 平台却有 9 个管理员和十几个开发者。

Kaldi 源于 2009 年的一场研讨会,代码目前在 GitHub 平台开源,共有 121 位贡献者。 

HTK 始于 1989 年的剑桥大学,曾一度商业化,但目前又回归剑桥。如前所述 HTK 现在并不是一款严格意义的开源工具,而且更新缓慢(虽然它的最新版本更新于 2015 年 12 月,但前一个版本的更新时间却是 2009 年,中间隔了差不多 6 年时间)。

Julius 始于 1997 年,最后一个主要版本更新于 2016 年 9 月,据称其 GitHub 平台有三名管理员维护。

ISIP 是第一个比较先进的开源语音识别系统,起源于密西西比州。它主要在 1996 年到 1999 年之间研发,最后一个版本发布于 2011 年,在 GitHub 平台出现之前就已经停止更新了。


  社区活跃度:

这一部分我们考察了上述五个工具的邮件和社区讨论情况。

CMU Sphinx 的论坛讨论热烈,回帖积极。但其 SourceForge 和 GitHub 平台存在许多重复的 repository。相比之下,Kaldi 的用户则拥有更多交互方式,包括邮件、论坛和 GitHub repository 等。HTK 有邮件列表,但没有公开的 repository。Julius 官网上的论坛链接目前已经不可用,其日本官网上可能有更详细的信息。ISIP 主要用于教育目的,其邮件列表目前已不可用。

  教程和示例:

CMU Sphinx 的文档简单易读,讲解深入浅出,且贴近实践操作。

Kaldi 的文档覆盖也很全面,但是在我看来更难理解。而且,Kaldi 同时包括了语音识别解决方案中的语音和深度学习方法。

如果你并不熟悉语音识别,那么可以通过对 HTK 官方文档(注册后可以使用)的学习对该领域有一个概括的认识。同时,HTK 的文档还适用于实际产品设计和使用等场景。

Julius 专注于日语,其最新的文档也是日语,但团队正在积极推动英文版的发布。

以下链接提供了一些基于 Julius 的语音识别样例。

https://github.com/julius-speech/dictation-kit 

最后是 ISIP,虽然它也有一些文档,但是并不系统。

  预训练模型:

即使你使用这些开源工具的主要目的是想要学习如何去训练一个专业的语音识别模型,但一个开箱即用的预先训练好的模型仍然是一个不可忽略的优点。

CMU Sphinx 包括英语、法语、西班牙语和意大利语在内的诸多可以直接使用的模型,详情可以参考它的说明文档。

Kaldi对现有模型进行解码的指令深藏在文档中,不太容易找到,但我们仍然发现了贡献者在 egs/voxforge 子目录下基于英文 VoxForge 语料库训练好的一个模型,并且还可以通过 online-data 子目录下的一个脚本直接运行。详情可以参考 Kaldi 项目的 repository。

我们没有深入挖掘其他三个软件包的模型训练情况,但它们应该至少包含一些简单可用的预训练模型,而且与 VoxForge 兼容(VoxForge 是一个非常活跃的众包语音识别数据库和经过训练的模型库)。

2019-05-17 15:34:26 muxiue 阅读数 998
  • 云从科技:详解CNN-pFSMN模型以及在语音识别中的应用

    近日,云从科技在语音识别技术上取得重大突破,在全球最大的开源语音识别数据集Librispeech上刷新了世界纪录,错词率(Worderrorrate,WER)降到了2.97%,将Librispeech的WER指标提升了25%,大幅刷新原先记录。本视频课程讲解了:大规模词汇连续语音识别,LVCSR前沿与最新进展,和CNN-pFSMN声学模型。

    1134 人正在学习 去看看 CSDN讲师

开源语音识别工具包

目前开源世界里存在多种不同的语音识别工具包,它们为开发者构建语音识别相关的应用提供了很大的帮助。以下是目前比较流行的语音识别工具包:

  1. CMU Sphinx
  2. Kaldi
  3. HTK
  4. Julius
  5. ISIP
    作为语音识别小白,我将从CMU Sphinx入手,从简单的应用搭建到CMU Sphinx代码的阅读和理解,逐步深入了解语音识别这个深奥的世界。

语音识别简介

语音其实上是一个复杂的现象,人们很少理解语音是怎么产生和感知的,最直观的理解就是语言是由多个单词组成的,而每个单词又是由多个音素(phone)组成的,但事实却并不是这样。事实上,语言/语音是一个连续动态的过程,之间没有明显的分界,如果你用一个语音编辑器来看的话,波形就是下面的样子:
在这里插入图片描述
语音实际上是一个概率问题,从而意味着在一段连续的语音中,单词之间没有明显的分界,所以从语音到文字的转换永远不可能100% 正确,这其实颠覆了许多程序员的认知。作为程序员,大多数都在处理一就是一,二就是二的问题,而不是一有可能是一,也有可能是二的问题,而语音识别就是后者。

语音的构成

语音是一种连续的音频流,这个音频流是稳定状态与动态改变状态的叠加, 在这种状态序列中,可以定义相似类别的声音或音素。对应于每个音素的波形的声学特性受许多因素影响——环境,扬声器,语音风格等。另外,协同发音(指的是一个音受前后相邻音的影响而发生变化,从发声机理上看就是人的发声器官在一个音转向另一个音时其特性只能渐变,从而使得后一个音的频谱与其他条件下的频谱产生差异)的存在使得音素的感知与标准不一样,所以我们需要根据上下文来辨别音素。将一个音素划分为几个亚音素单元。如:数字“three”,音素的第一部分与在它之前的音素存在关联,中间部分是稳定的部分,而最后一部分则与下一个音素存在关联,这就是为什么在用HMM模型做语音识别时,选择音素的三状态HMM模型。上下文相关建模方法在建模时考虑了这一影响,从而使模型能更准确地描述语音,只考虑前一音的影响的称为双音素Bi-Phone,考虑前一音和后一音的影响的称为 3音素Tri-Phone,甚至4音素Qin-phones。
从计算角度出发,只检测3音素的一部分比把3音素作为整体考虑要有用的多,例如,现在你想创建一个3音素头部部分的检测器,那么你只需要一小部分(大约4000个)不同的短的声音检测器,我们称这些检测器为senones。一个senone的上下文依赖比单纯的左右上下文复杂得多,它是一个可以被决策树或者其他方式来定义的复杂函数。
音素phones构成亚单词单元,也就是音节syllables。音节是一个比较稳定的实体,因为当语音变得比较快的时候,音素往往会发生改变,但是音节却不变。音节与节奏语调的轮廓有关。有几种方式去产生音节:基于形态学或者基于语音学。音节经常在词汇语音识别中使用。
亚单词单元(音节)构成单词。单词在语音识别中很重要,因为单词约束了音素的组合。假如共有40个音素,然后每个单词平均有7个音素,那么就会存在40^7个单词,但幸运的是就算一个受过优等教育的人也很少使用过20k个单词,这就使识别变得可行。
单词和一些非语言学声音构成了话语(语句,utterances),我们把非语言学声音称为填充物(fillers),例如呼吸,um,uh,咳嗽等,它们在音频中是以停顿做分离的。所以它们更多只是语义上面的概念,不算是一个句子。

识别过程

语音识别一般的方法是:录制语音波形,再把波形通过静音(语句之间的间断,silences)分割为多个语句,然后去识别每个语句所表达的意思。为了达到这个目的,我们需要用单词的所有可能组合去匹配这段音频,然后选择匹配度最高的组合。
在匹配中有几个关键的概念需要了解的:

  1. 特征
    由于描述一个语音需要的参数个数非常多,这样对处理速度的要求就很高(而且也没必要处理那么多的信息,我们只需要处理对识别有帮助的就行),所以我们需要做优化,进行降维。我们用帧frames去分割语音波形,每帧大概10ms,然后每帧提取可以代表该帧语音的39个数字,这39个数字也就是该帧语音的特征,用特征向量来表示。而如何提取特征向量是当下热门的研究课题,不过简单说来,这些提取方法都是由频谱衍生出来的。
  2. 模型
    模型是用来描述一些数学对象的。这些数学对象描述了一些口语的共同属性。在实际应用中,senone的音频模型就是三态高斯混合模型。简单的说,它就是一个最有可能的特征向量。对于模型,有几个问题需要考虑:模型到底多大程度上可以描述实际情况?在模型本身的局限情况下模型能表现得更优吗?自适应模型如何改变条件?
    经典的语言模型称为隐马尔科夫模型(Hidden Markov Model, HMM),在该模型中,过程被描述为以一定概率彼此改变的状态序列。 此模型旨在描述任何顺序过程,如语音。 HMM已被证明对语音解码非常实用。
  3. 匹配算法
    语音识别需要对所有的特征向量和所有的模型做比较匹配,这是一个非常耗时的工作。而在这方面的优化往往是使用一些技巧,在每一点的匹配时,我们通过保留最好的匹配变体(variants),然后通过它在下一帧产生最好的匹配变体。

模型

根据语音结构,在语音识别中需要用到三种模型:

  1. 声学模型
    一个声学模型包含每个senone的声学属性,包括不依赖上下文的模型和依赖上下文的模型。其中不依赖上下文的模型包括不依赖于上下文的属性(每个音素最大可能的特征向量),而依赖上下文的模型包括依赖于上下文的属性(根据上下文构建的senone)。
  2. 语音学字典
    语音学字典包含了从单词到音素之间的映射,这种映射并不是十分有效,例如,在字典中只标注了两到三个发音变体,但是这种方法在大多数时候够用。字典并不是描述单词到音素之间的映射的唯一方法。可以通过运用机器学习算法去学习得到一些复杂的函数去完成映射功能。
  3. 语言模型
    语言模型是用来约束单词搜索的,它定义了哪些词能跟在上一个已经识别的词的后面(匹配是一个顺序的处理过程),这样就可以为匹配过程排除一些不可能的单词。最常用的语言模型是n-gram模型,它包含了单词序列的统计和有限状态模型,通过有限状态机来定义语音序列,有时候会加入权值。为了达到比较好的识别准确率,语言模型必须能够很好的约束空间搜索,也就是说可以更好的预测下一个词。语言模型是约束词汇包含的单词的,这就出现一个问题,就是名字识别(因为名字可以随便由几个单词组成)。为了处理这种情况,语言模型可以包含更小的块,例如亚单词,甚至音素。但是这种情况,识别准确率将会低于基于单词的语言模型。
    特征、模型和搜索算法三部分构成了一个语音识别系统。如果你需要识别不同的语言,那么就需要修改这三个部分。很多语言,都已经存在声学模型,字典,甚至大词汇量语言模型可供下载了。

其他概念

  • 网格(Lattice)是一个代表识别变体的有向图。一般来说,很难去获得一个最好的语音匹配结果,所以Lattices就是一个比较好的格式去存放语音识别的中间结果。
  • N-best lists of variants和网格(lattice)有点像,但是它没有网格那么密集(也就是保留的结果没有网格多)。N-best搜索和多遍搜索:为在搜索中利用各种知识源,通常要进行多遍搜索,第一遍使用代价低的知识源(如声学模型、语言模型和音标词典),产生一个候选列表或词候选网格,在此基础上进行使用代价高的知识源(如4阶或5阶的N-Gram、4阶或更高的上下文相关模型)的第二遍搜索得到最佳路径。
  • 单词混淆网络是从网格的边缘得到的一个严格的节点顺序序列。
  • 语音数据库是一个从任务数据库得到的典型的录音集。如果我们开发的是一个对话的系统,那么数据库就是包含了多个用户的对话录音。而对于听写系统,包含的就是朗读的录音。语音数据库是用来训练,调整和测试解码系统的(也就是语音识别系统)。
  • 文本数据库是为了训练语言模型而收集的文本,一般是以样本文本的方式来收集形成的。而收集过程存在一个问题就是误把PDFs, web pages, scans等现成文档也当成口语文本的形式放进数据库中。所以,我们就需要把这些文件里的标签和文件头去掉,还有把数字展开为它们的语音形式(例如1展开为英文的one或者汉语的yi),另外还需要把缩写给扩大还原为完整单词。

CMU Sphinx

简介

CMU Sphinx(简称Sphinx)是美国卡内基梅隆大学开发的一系列语音识别工具包以及相关工具(例如声学模型训练软件,语言模型编辑软件和语音词典CMUDICT等)的总称。在2000年,卡内基梅隆的Sphinx小组致力于开源几个语音识别器组件,包括Sphinx 2和后来的Sphinx 3(2001年)。Sphinx包括许多工具包,可以用于搭建具有不同需求的应用。

  • Pocketsphinx - 用C语言编写的轻量级的语音识别库;
  • Sphinxbase - Pocketsphinx的支撑库;
  • Sphinx4 - 用Java编写的自适应的,可修改的语音识别库;
  • Sphinxtrain - 声学模型训练软件;
    现在最新的发布版本是:
  • sphinxbase-5prealpha
  • pocketsphinx - 5prealpha
  • sphinx4 - 5prealpha
  • sphinxtrain - 5prealpha
    Sphinx除了是开源之外,还具有很多优势,可以自己定制声音模型,语言模型,语音学字典,用于多个不同的场景,例如语音搜索,语义分析,翻译,智能助手等。
    如何选择你需要的工具包呢?
  • 由于Sphinx有用不同的编程语言开发的工具包,所以开发者可以根据自己的习惯选择相应的语言识别包。
  • 如果你想要快速和可携带性,那么选择pocketsphinx,如果你想要灵活和可管理,那么可以选择sphinx4.

Sphinx初体验

让我们先来用Sphinx自带的Pocketsphinx来体验一下Sphinx语音识别的效果吧。由于Pocketsphinx依赖于SphinxBase库(提供了公共的函数功能),所以需要同时安装SphinxBase和Pocketsphinx,Pocketsphinx才能正常工作。Pocketsphinx可以安装在Linux,windows,MacOS,iPhone和Android上,本文中我们将在windows上进行安装。

下载

sphinxbase下载页
pocketsphinx下载页

下载"sphinxbase-5prealpha-win32.zip"和“pocketsphinx-5prealpha-win32.zip”,并解压缩。
在这里插入图片描述

编译

  • 编译Sphinxbase
    用visual studio打开sphinxbase\sphinxbase.sln,编译所有项目,其中visual studio版本需要是MS Visual Studio 2012及以上,我使用的是visual studio 2017。由于编译版本不一样,在打开solution时,会弹出如下窗口,选择OK。
    在这里插入图片描述
    在这里插入图片描述
    编译后的结果:
    在这里插入图片描述
  • 编译Pocketsphinx
    用visual studio打开pocketsphinx\pocketsphinx.sln,编译所有项目。其他步骤与编译sphinxbase相同。编译结果如下:
    在这里插入图片描述
  • 拷贝sphinxbase.dll到上图中的文件夹中
    在这个地方有个小trick,理论上应该是我们自己编译出spinxbase.dll之后进行拷贝,但是我们从网站上下载的pocketsphinx中,bin\Debug\Win32下自带拷贝好的sphinxbase.dll,当然你也可以把你编译好的dll重新拷贝覆盖掉之前的dll。提示:如果你编译了pocketsphinx,最好是把你编译的sphinxbase结果也复制过去,否则可能出现不匹配,造成程序如法运行。

运行

运行命令:
bin\Release\Win32\pocketsphinx_continuous.exe -inmic yes -hmm model\en-us\en-us -lm model\en-us\en-us.lm.bin -dict model\en-us\cmudict-en-us.dict

参数说明:

  • inmic:使用麦克风,如果使用file,修改为-infile
  • hmm:指定声学模型
  • lm:指定语言模型
  • dict:指定语言学字典

运行结果:你可以开始说话了,不过识别结果感人,暂时原因未知,还需要继续学习。
在这里插入图片描述

如果在命令行运行时,遇到如下错误:
在这里插入图片描述
其中MSVCR110D.dll是MSVCR110.dll的debug版本。如果遇到这个问题,说明你的phocketsphinx与sphinxbase不匹配,需要将编译好的sphinxbase结果复制过去。

下一篇 PocketSphinx在windows上的应用示例,开发工具Visual Studio

2020-03-18 14:46:36 zstu_wangrui 阅读数 181
  • 云从科技:详解CNN-pFSMN模型以及在语音识别中的应用

    近日,云从科技在语音识别技术上取得重大突破,在全球最大的开源语音识别数据集Librispeech上刷新了世界纪录,错词率(Worderrorrate,WER)降到了2.97%,将Librispeech的WER指标提升了25%,大幅刷新原先记录。本视频课程讲解了:大规模词汇连续语音识别,LVCSR前沿与最新进展,和CNN-pFSMN声学模型。

    1134 人正在学习 去看看 CSDN讲师

PyTorch-Kaldi 深度学习语音识别开源软件

论文:Ravanelli M (Mirco Ravanelli), Parcollet T, Bengio Y. The Pytorch-kaldi Speech Recognition Toolkit. ICASSP 2019 - 2019 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2019: 6465–6469.

GitHub:https://github.com/mravanelli/pytorch-kaldi

SpeechBrain 是 PyTorch-Kaldi 的进阶版,使用 All-in-One PyTorch 的模式。

语音识别与说话人识别的区别:相比较说话人识别,语音识别的流程更加复杂,额外需要内容相关的标签和解码方法。

摘要

Kaldi 是 C++ 实现的语音识别软件,缺少像 Python 的简单与灵活。PyTorch-Kaldi 旨在构建 Kaldi 与 PyTorch 之间的联系,充分利用 Kaldi 高效性与 PyTorch 灵活性。PyTorch-Kaldi 除了建立 Kaldi 与 PyTorch 之间的联系,还嵌入了非常有用的功能,用于开发最新的语音识别器。程序易于加入自定义的声学模型,包含初始化方法和预执行的模型。PyTorch-Kaldi 支持多个特征和标签流、神经网络组合的建模。程序已公开发布在 Github,适用于运行在本地和高性能计算集群上。

引言

近十年,自动语音识别(Automatic Speech Recognition, ASR)迎来了飞速的发展。深度学习技术开始克服传统高斯混合模型(Gaussian Mixture Models, GMMs)的不足,在众多数据集上表现出优异的性能,例如 TIMIT、AMI、DIRHA、CHiME、Babel 和 Aspire。

语音识别开源软件的发展,诸如 HTK、Julius、CMU-Sphinx、RWTH-ASR、LIA-ASR 和 2011 年以后的 Kaldi,极大地推进了 ASR 的发展,为研究的进行和应用的开发提供了便利。

Kaldi 是目前非常流行的 ASR 工具,它提供一系列 C++ 库。

深度学习框架,例如 Theano、TensorFlow、CNTK 和 PyTorch,为 ASR 机器学习系统的发展提供了帮助。这些软件提供了灵活的神经网络设计模式和大量的深度学习应用。

PyTorch 是 Python 语音的 GPU 加速软件,自动梯度工具使其是用于高效地深度学习应用开发。

PyTorch-Kaldi 建立了 Kaldi 与 PyTorch 之间的桥梁。该软件使用 PyTorch 执行声学建模,使用 Kaldi 执行特征提取、标签/对齐、编码等,是用于 DNN-HMM 框架的 ASR 系统。

PyTorch-Kaldi 能够部署在本地机器和高性能计算机上,支持多 GPU 训练、恢复策略、自动数据分块。

PyTorch-Kaldi 项目

Pytorch-Kaldi架构

PyTorch-Kaldi 是 Python 语言开发的基于 Kaldi 和 PyTorch 的 ASR 工具。类似地,PyKaldi 是 Kaldi 的 Python 包装,未提供神经网络建模方法;ESPnet 仅支持 ASR 端到端建模,训练的设计需要非常细心。

Fig. 1 描述了 PyTorch-Kaldi 的框架,Kaldi 执行特征提取与语音解码,PyTorch 执行神经网络建模与后处理。主要脚本 run_exp.py 管理 ASR 系统所有的组成成分,包括:特征与标签提取、训练、验证、解码和评分。

配置文件

配置文件采用 INI 格式,用于 run_exp.py:

  1. [Exp]:高层次信息,例如文件夹、训练的次数、随机种子、执行 CPU/GPU/多 GPUs 等;

  2. [dataset*]:特征与标签的信息(存储的路径、上下文窗口的特效、语音数据划分的 chunks 数量)等;

  3. [architecture*]:神经网络模型的描述;

  4. [model]:神经网络如何结合;

  5. [decoding]:定义解码参数;

  6. 其他。

该项目采用 *.cfg 文件定义配置文件,例如

# Source: https://github.com/mravanelli/pytorch-kaldi/blob/e06682f9b23ca453b2c3fc35bc474e0617a6cc80/cfg/TIMIT_baselines/TIMIT_MLP_mfcc_basic.cfg
[cfg_proto]
cfg_proto = proto/global.proto
cfg_proto_chunk = proto/global_chunk.proto

[exp]
seed = 1234
use_cuda = True
multi_gpu = False

[dataset1]
data_name = TIMIT_tr
n_chunks = 5

[dataset2]
data_name = TIMIT_dev
n_chunks = 1

[dataset3]
data_name = TIMIT_test
n_chunks = 1

[data_use]
train_with = TIMIT_tr
valid_with = TIMIT_dev
forward_with = TIMIT_test

[batches]
batch_size_train = 128
max_seq_length_train = 1000

[architecture1]
arch_name = MLP_layers1

[model]
model_proto = proto/model.proto

[forward]
forward_out = out_dnn1

[decoding]
decoding_script_folder = kaldi_decoding_scripts/

特征

特征模块由 Kaldi 实现,主要功能是提取特征,提供多个特征流的管理功能

  1. 计算系数,存储为 ark,例如 mfcc、fbank、plp;
  2. kaldi-io 实现 chunk 读取;
  3. 执行上下文窗口合成,混洗以及均值和方差归一化。

标签

标签主要用于神经网络声学建模,来自于 Kaldi 计算的语音特征和内容相关音素状态的序列。该模块可提供多标签,支持多任务学习。例如联合训练内容相关和内容无关的目标,执行单音正则化;语音增加和语音识别联合训练;合作网络深度学习。

分块与小批量组成

分块与小批量合成,由 core.pyrun_nn 函数实现:

  1. 数据划分为多块,每块由标签和特征组成;

  2. 每块存入 cpu 或者 GPU,

  3. 训练阶段,动态地组合不同的块形成小批量数据,其中小批量由少量的样本组成。

训练时的组合方法因网络结构而异:

  1. 前馈网络的小批量:从块中随机采样的、混序的特征与标签组成;

  2. 循环网络的小批量:由完整的句子组成,不同时长的句子进行零补长,形成相同长度。

PyTorch-Kaldi 对句子进行增序排列(有助于最小化零补长,减少对 batch normalization statistics 影响)。

神经网络声学建模

DNN 声学建模,包含前馈网络和训练网络,由 neural_networks.py 实现:

  1. 自定义模型:nn.Module,初始化方法,前向方法;

  2. 预训练模型:MLPs、CNN、RNN、LSTM、GRU、Light GRU、twin-regularized RNNs、SincNet。

解码与评分

编码与评分:

  1. 神经网络输出的概率先经过先验归一化,

  2. HMM 编码器利用 n-gram 语言模型进行评分估计,

  3. beam搜索提取文字序列,

  4. NIST SCTK 评分工具箱计算 Word-Error-Rate (WER) 得分。

实验设计

语料与任务:

  1. 语料:TIMIT、DIRHA-English、WSJ、CHiME 4、ET-real、DT-real、LibriSpeech。

  2. 任务:标准音素识别任务、远距离说话场景、四种噪声环境(公交、咖啡厅、住宅区、街道拥堵)。

神经网络设定:

  1. 特征:MFCC、fbanks、fMLLR,25 ms frame,10 ms hop;

  2. 前馈模型权重初始化 Glorot 策略 [38],循环模型权重初始化正交矩阵 [39];

  3. 前馈连接 batch normalization,循环结构 dropout 正则技术;

  4. 优化器 RMSprop,24 epochs;

  5. 学习速率变化:性能相对改进低于 0.1% 之后学习速率减少一半;

  6. 超参数调试:学习速率、隐藏层数量、隐藏层单元数、dropout 因子、twin 正则项参数。

基准性能

实验使用的数据集有 4 个:TIMIT、DIRHA、CHiME 与 LibriSpeech。表 1-4 描述了 TIMIT 数据集上的性能,表 5 对比了其他三个数据集的性能。性能评价指标:PER (Phone Error Rate) 与 WER (Word Error Rate)。结论如下:

  1. 表 1 中 fMLLR 特征性能最佳,得益于说话人自适应过程,Li-GRU 减少 GRU 33% 计算量,且优于 GRU。
  2. 表 2 Incr. Seq. Length 鼓励学习短期依赖,然后再学习长期依赖。
  3. 表 3 表明特征组合和模型组合实现了 TIMIT 最好的公开性能。
  4. 表 4 测试在原始信号或者 FBANK 上的性能,SincNet 优于 CNN。
  5. 表 5 表明 Li-GRU 实现了最优的性能,相比较 CHiME 的 Kaldi 18.1% WER 与 ESPNet 44.99% WER;相比较 Librispeech 的 Kaldi 6.5%。
表 1. 不同网络结构在 TIMIT 测试集上的性能 PER(%)
模型/特征MFCCFBANKfMLLR
MLP18.218.716.7
RNN17.717.215.9
LSTM15.114.314.5
GRU16.015.214.9
Li-GRU15.314.914.2
表 2. 四种模型逐步增加技术之后在 TIMIT 测试集上的性能 PER(%)
技术/模型RNNLSTMGRULi-GRU
Baseline16.516.016.616.3
+ Incr. Seq. Length (从 1s 语音开始,逐步增加(两倍/epoch)裁剪的语音长度)16.615.316.115.4
+ Recurrent Dropout16.415.115.414.5
+ Batch Normalization16.014.815.314.4
+ Monophone Reg. (两个 softmax 分类器,估计内容相关的状态和预测单音目标)15.914.514.914.2
表 3. 特征组合和模型组合在 TIMIT 测试集上的性能 PER(%)
结构特征PER (%)
Li-GRUfMLLR14.2
MLP+Li-GRU+MLPMFCC+FBANK+fMLLR13.8
表 4. CNN 与 SincNet 在 TIMIT 测试集上的性能 PER(%)
模型特征PER (%)
CNNFBANK18.3
CNNRaw waveform18.1
SincNetRaw waveform17.2
表 5. 不同网络结构在 DIRHA, CHiME, 与 LibriSpeech (100h) 数据集上的性能 WER(%)
模型/数据DIRHACHiMELibriSpeech
MLP26.118.76.5
LSTM24.815.56.4
GRU24.815.26.3
Li-GRU23.914.66.2

参考文献

语料

  1. Ravanelli M, Cristoforetti L, Gretter R, et al. The DIRHA-ENGLISH corpus and related tasks for distant-speech recognition in domestic environments. 2015 IEEE Workshop on Automatic Speech Recognition and Understanding, ASRU 2015 - Proceedings. 2016.
  2. Barker J, Marxer R, Vincent E, et al. The third “CHiME” speech separation and recognition challenge: Dataset, task and baselines. 2015 IEEE Workshop on Automatic Speech Recognition and Understanding, ASRU 2015 - Proceedings. 2016.
  3. 有噪声的语料: Ravanelli M, Svaizer P, Omologo M. Realistic multi-microphone data simulation for distant speech recognition. Proceedings of the Annual Conference of the International Speech Communication Association, INTERSPEECH, 2016, 08-12-September-2016: 2786–2790.

模型

  1. Li-GRU: Ravanelli M, Brakel P, Omologo M, et al. Light Gated Recurrent Units for Speech Recognition. IEEE Transactions on Emerging Topics in Computational Intelligence, 2018.
  2. Ravanelli M, Bengio Y. Speaker Recognition from Raw Waveform with SincNet. 2018 IEEE Spoken Language Technology Workshop (SLT). IEEE, 2018: 1021–1028.

开源软件

  1. Ravanelli M, Parcollet T, Bengio Y. The Pytorch-kaldi Speech Recognition Toolkit. ICASSP 2019 - 2019 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2019: 6465–6469.
  2. Can D, Martinez V R, Papadopoulos P, et al. Pykaldi: A python wrapper for kaldi. ICASSP, IEEE International Conference on Acoustics, Speech and Signal Processing - Proceedings. 2018, 2018-April: 5889–5893.
  3. Watanabe S, Hori T, Karita S, et al. ESPNet: End-to-end speech processing toolkit. Proceedings of the Annual Conference of the International Speech Communication Association, INTERSPEECH. 2018, 2018-Septe: 2207–2211.
  4. Povey D, Boulianne G, Burget L, et al. The Kaldi speech recognition toolkit. IEEE 2011 Workshop on Automatic Speech Recognition and Understanding. 2011(January).

作者信息:

  • CSDN:https://blog.csdn.net/i_love_home?viewmode=contents

  • Github:https://github.com/mechanicalsea

2019级同济大学博士研究生 王瑞 rwang@tongji.edu.cn

研究方向:说话人识别、说话人分离

2016-02-05 14:37:12 zc02051126 阅读数 1977
  • 云从科技:详解CNN-pFSMN模型以及在语音识别中的应用

    近日,云从科技在语音识别技术上取得重大突破,在全球最大的开源语音识别数据集Librispeech上刷新了世界纪录,错词率(Worderrorrate,WER)降到了2.97%,将Librispeech的WER指标提升了25%,大幅刷新原先记录。本视频课程讲解了:大规模词汇连续语音识别,LVCSR前沿与最新进展,和CNN-pFSMN声学模型。

    1134 人正在学习 去看看 CSDN讲师

1 kaldi

谢谢@王东老师的辛勤劳动,著名的语音识别开源软件kaldi上终于有一个免费的中文语音识别例子,网址为:网页链接。大家速度围观。@爱可可-爱生活 @好东西传送门

2 卷积神经网络的语音识别

http://yerevann.github.io/2015/10/11/spoken-language-identification-with-deep-convolutional-networks/

没有更多推荐了,返回首页