介绍Facebook语音框架——Wav2letter++篇

语音识别系统一直是深度学习生态系统中最发达的领域之一。当前一代语音识别模型主要依赖于用于声学和语言建模的递归神经网络(RNN)以及用于知识构建的特征提取管道等计算上比较昂贵的工件。虽然已经证明基于RNN的技术在语音识别任务中是有效的,但是它们需要大量的训练数据和计算能力,这通常会导致大多数组织无法使用。最近,Facebook AI Research(FAIR)团队发表了一篇研究论文,提出了一种基于卷积神经网络(CNNs)的新语音识别技术。 FAIR团队不仅进行了研究,并开源了Wav2letter ++,这是一种基于完全卷积方法的高性能语音识别工具包。

神经网络在语音识别系统中的应用在深度学习领域并不新鲜,但大多局限于特定的任务,并且经常与RNN结合成更完整的架构。然而,最近在CNN领域的研究表明,它们有可能在语音识别管道的所有领域实现最先进的性能,包括机器翻译、语言建模的语音合成等需要长时间建模的领域。 CNN相对于替代方案的巨大优势在于它们自然地模拟诸如梅尔频率倒谱系数之类的标准特征的计算建模,而无需昂贵的特征提取技术。因此,深度学习社区长期以来一直看好CNN的使用实现完整的语音识别工作流程,与现有的基于rnn的模型相比,这种工作流程更高效、更具竞争力。

全卷积语音识别架构

经过多次实验,FAIR团队决定依靠一种结合了不同CNN层的架构,有效地实现了从波形处理到语言转录的端到端语音识别管道。该体系结构基于下图所示的“基于离散点”模型:

可学习前端模型的第一层是CNN,它处理初始音频形式并提取其一些关键特征。该层之后是卷积声学模型,该模型是CNN,其中门控单元经过训练以预测来自音频流的字母。卷积语言模型层从声学模型产生候选转录。最后,beach-search 编码器生成组成最终转录的单词序列。

FAIR团队将其完全卷积语音识别模型与最先进的模型进行了对比,该模型通过显著减少的训练数据实现了相当的性能。结果非常有希望,FAIR团队决定将这种方法的初步实施开源。

Wav2letter ++

最近深度学习技术的进步使得开发人员可以使用的自动语音识别(ASR)框架和工具包的数量有所增加。然而,完全卷积语音识别模型中显示的进展激发了FAIR团队创建Wav2letter ++,这是一个完全基于C ++的深度学习语音识别工具包。 Wav2letter ++的核心设计受三个关键原则的驱动:

1)实现基础,以便能够在包含数千小时语音的数据集上有效地训练模型。

2)启用简单且可扩展的模型,以在语音识别系统中表达和合并新的网络架构、损失功能和其他核心操作。

3)简化从语音识别模型的研究到部署的过渡。

以这些设计原则为指导,Wav2latter ++实现了一个非常简单的架构,如下图所示:

为了更好地理解Wav2letter ++体系结构,有一些值得强调的要点:

  • ArrayFire Tensor Library:Wav2letter ++使用ArrayFire作为 tensor 操作的主库。 ArrayFire支持在硬件无关模型中对高性能并行计算进行建模,该模型可在多个后端执行,包括CUDA GPU后端和CPU后端。
  • 数据准备和特征提取:Wav2letter ++支持跨不同音频格式的特征提取。该框架在每次网络评估之前动态计算特性,并强制执行异步和并行化,以便在模型训练期间最大限度地提高效率。
  • 型号:Wav2letter ++包括丰富的端到端序列模型组合以及广泛的网络架构和激活功能。
  • 可扩展的训练:Wav2letter ++支持三种主要的训练模式::train((flat-start 训练),continue(检查点状态)和fork(例如迁移学习)。训练管道使用数据并行、同步随机梯度下降以及由NVIDIA集体通信库提供支持的进程间通信无缝扩展。
  • 解码:Wav2letter ++解码器是基于之前探索过的完全卷积架构的波束搜索解码器。解码器负责输出音频文件的最终转录。

Wav2letter ++ in Action

FAIR团队针对一系列语音识别模型(如ESPNet,Kaldi和OpenSeq2Seq)测试了Wav2letter ++。这些实验基于著名的华尔街日报CSR数据集。最初的结果表明,Wav2letter ++在训练周期的各个方面都能胜过替代方案。

完全基于CNN的语音识别系统的实现当然是一种有趣的方法,其可以优化这些类型的深度学习模型所需的计算能力和训练数据。 Facebook的Wav2letter ++实现这种方法已经被归类为市场上最快的语音识别框架之一。在不久的将来,我们可能会看到这一研究领域取得更多进展。

原文地址:https://www.cnblogs.com/chuangye95/p/10175262.html

时间: 2024-10-21 07:53:30

介绍Facebook语音框架——Wav2letter++篇的相关文章

Facebook开源最先进的语音系统wav2letter++

最近,Facebook AI Research(FAIR)宣布了第一个全收敛语音识别工具包wav2letter++.该系统基于完全卷积方法进行语音识别,训练语音识别端到端神经网络的速度是其他框架的两倍以上.他们在博客中详细介绍了这个开源软件. 由于端到端语音识别技术可以容易地扩展到多种语言并且同时保证在各种环境中的识别质量,因此通常认为它是一种有效且稳定的语音识别技术.虽然递归卷积神经网络在处理具有远程依赖性的建模任务(例如语言建模,机器翻译和语音合成)中占主导地位,但是循环架构是端到端语音识别

Farseer.net轻量级开源框架 中级篇:自定义配置文件

导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: 数据绑定 下一篇:Farseer.net轻量级开源框架 中级篇: 动态数据库访问 什么是自定义配置文件 目前系统提供了多个配置文件,一些开发过程中常用到的一些配置. 既然是配置,那么说明一些设置可能会根据项目的不同而有所不同.比如web.config其实就是个配置文件. 当我们定义好配置文件后,在项目运行的时调用了配置,都将在:~/App_Data/  文件夹中生成(如果不存在这

Farseer.net轻量级开源框架 入门篇:删除数据详解

导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 修改数据详解 下一篇:Farseer.net轻量级开源框架 入门篇: 查询数据详解 相对于修改,删除则简单的多: 1 // 字段值指定 加 1 2 Users.Data.Where(o => o.ID == 1).Delete(); 1 Users.Data.Delete(1); 1 var lst = new List<int> { 1, 2, 3, 4, 5 }; 2

Farseer.net轻量级开源框架 入门篇:分类逻辑层

导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 缓存逻辑层 下一篇:Farseer.net轻量级开源框架 入门篇: 添加数据详解 分类逻辑层 分类逻辑层,主要用在一些需要支持无限递归的树数据.树数据是:必须有一个根节点,根节点有无限个子节点,没有节点限制.比如我们常用的有:(频道.xxx分类) 这里与BaseCacheModel的操作是完全一致.唯一不同的是,BaseCateModel是继承自ModelCateInfo.这个类

Farseer.net轻量级开源框架 入门篇:逻辑层的选择

导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 入门篇:增.删.改.查操作演示 下一篇:Farseer.net轻量级开源框架 入门篇: 实体类 当我们创建了一个实体类后,就需要继承其中一个基类:BaseModel.BaseCacheModel.BaseCateModel.只有继承了这三个基类的其中一个时,框架才能对实体建立数据库关系映射(也就是ORM).并且实现了对数据库的CURD的操作. 本框架与其它一些框架不同之处在于,对

NET Core应用框架之BitAdminCore框架应用篇系列

  BitAdminCore是基于NET Core2.0的后端快速开发框架,本篇主要目标是介绍如何使用框架开发应用.框架的一些特性等. 系列链接 BitAdminCore框架应用篇:(一)使用Cookiecutter创建应用项目 BitAdminCore框架应用篇:(二)创建一个简单的增删改查模块 原文地址:https://www.cnblogs.com/chenyinxin/p/9062292.html

《一头扎进》系列之Python+Selenium框架设计篇3- 价值好几K的框架,狼来了,狼来了....,狼没来,框架真的来了

1. 简介 前边宏哥一边一边的喊框架,就如同一边一边的喊狼来了!狼来了!.....这回是狼没有来,框架真的来了.从本文开始宏哥将会一步一步介绍,如何从无到有地创建自己的第一个自动化测试框架.这一篇,我们介绍,如何封装自己的日志类和浏览器引擎类. 2. 创建项目层级结构 如何创建,怎么创建.这个就需要我们前边介绍的框架概要设计以及框架的详细设计的思维导图,宏哥就是根据那个图,轻松地.清楚的.思路清晰地一步一步创建项目层级结构. 相关步骤: 1. 打开PyCharm,创建如下格式的项目层级结构,为了

《一头扎进》系列之Python+Selenium框架实战篇4- 价值好几K的框架,呵!这个框架有点意思啊!!!

1.简介 前面文章,我们实现了框架的一部分功能,包括日志类和浏览器引擎类的封装,今天我们继续封装一个基类和介绍如何实现POM.关于基类,是这样定义的:把一些常见的页面操作的selenium封装到base_page.py这个类文件,以后每个POM中的页面类,都继承这个基类,这样每个页面类都有基类的方法,这个我们会在这篇文章由宏哥实现. 2.项目层级结构 1. 上一篇中我们已经创建好了项目层级结构,具体项目层级结构如下图.这里不再赘述,相关文件也如下: 3. 定位和截图类封装 1. 在实现封装基类里

《一头扎进》系列之Python+Selenium框架设计篇6 - 价值好几K的框架,呦!这个框架还真牛叉哦!!!

1. 简介 本文开始介绍如何通过unittest来管理和执行测试用例,这一篇主要是介绍unittest下addTest()方法来加载测试用例到测试套件中去.用addTest()方法来加载我们测试用例到suite中去和利用discover()方法去加载一个路径下所有的测试用例. 2. addTest()方法 这里首先介绍unittest下addTest()方法来加载测试用例到测试套件中去.为了演示效果,我在前面文章的脚本基础上,新建了一个测试脚本,这个测试脚本有一个测试用例,加上前面的测试脚本,一