小胖有技能|AssemblyAI 在 PyTorch 中建立端到端的语音识别模型,利用


小胖有技能|AssemblyAI 在 PyTorch 中建立端到端的语音识别模型,利用
文章图片
小胖有技能|AssemblyAI 在 PyTorch 中建立端到端的语音识别模型,利用
文章图片
作者|Comet
译者|天道酬勤 , 责编|Carol
出品|AI科技大本营(ID:rgznai100)
这篇文章是由AssemblyAI的机器学习研究工程师MichaelNguyen撰写的 。 AssemblyAI使用Comet记录、可视化和了解模型开发流程 。
深度学习通过引入端到端的模型改变了语音识别的规则 。 这些模型接收音频 , 并直接输出转录 。 目前最流行的两种端到端模型是百度的DeepSpeech和谷歌的ListenAttendSpell(LAS) 。 DeepSpeech和LAS都是基于递归神经网络(RNN)的体系结构 , 对语音识别进行建模有着不同方法 。
DeepSpeech使用连接时态分类(CTC)损失函数来预测语音记录 。 LAS使用序列对网络架构进行预测 。
这些模型通过利用深度学习系统从大型数据集中学习的能力 , 简化了语音识别通道 。 从理论上讲 , 有了足够的数据 , 你就能够构建一个超级强大的语音识别模型 , 该模型可以解决语音中的所有细微差别 , 并且不需要花费大量时间和精力手工设计声学特性或处理复杂的通道(例如 , 老式的GMM-HMM模型架构) 。
深度学习是一个快速发展的领域 , 而DeepSpeech和LAS风格的体系结构已经过时 。 你可以在下面的“最新进展”部分中了解该行业的发展方向 。
小胖有技能|AssemblyAI 在 PyTorch 中建立端到端的语音识别模型,利用
文章图片
如何在PyTorch中构建自己的端到端语音识别模型
让我们逐一介绍如何在PyTorch中构建自己的端到端语音识别模型 。 我们构建的模型受到了DeepSpeech2(百度对其著名模型的第二次修订)的启发 , 并对结构进行了一些个人改进 。
模型的输出是字符的概率矩阵 , 我们使用该概率矩阵来解码音频中最有可能出现的字符 。 你可以找到完整的代码 , 还可以在GoogleColaboratory上的GPU支持下运行它 。
准备数据管道
数据是语音识别中最重要的方面之一 。 我们获取原始音频波 , 并将其转换为Mel频谱图 。
小胖有技能|AssemblyAI 在 PyTorch 中建立端到端的语音识别模型,利用
文章图片
你可以在这篇优秀的文章中阅读更多关于这种转变的细节 。 对于本文 , 你可以将Mel频谱图视为声音的图片 。
小胖有技能|AssemblyAI 在 PyTorch 中建立端到端的语音识别模型,利用
文章图片
为了处理音频数据 , 我们将使用一个非常有用的工具 , 被称为torchaudio , 它是PyTorch团队专门为音频数据创建的一个库 。 我们将在LibriSpeech的一个子集上进行训练 , 该子集是从有声读物中获得的阅读英语语音数据的语料库 , 包括100个小时的转录音频数据 。 你可以使用torchaudio轻松下载此数据集:
importtorchaudiotrain_dataset=torchaudio.datasets.LIBRISPEECH(''./'',url=''train-clean-100'',download=True)test_dataset=torchaudio.datasets.LIBRISPEECH(''./'',url=''test-clean'',download=True)数据集的每个样本都包含波形、音频采样率、话语/标签 , 以及样本上更多的元数据 。 你可以在此处从源代码中查看每个示例 。
数据扩充–SpecAugment
数据扩充是一种用于人为增加数据集多样性来增加数据集大小的技术 。 当数据稀少或模型过度拟合时 , 此策略特别有用 。 对于语音识别 , 你可以执行标准的增强技术 , 比如更改音高 , 速度 , 注入噪声以及向音频数据添加混响 。
我们发现频谱图增强(SpecAugment)是一种更简单、更有效的方法 。 SpecAugment , 最早是在论文SpecAugment:一种用于自动语音识别的简单数据增强方法中介绍的 , 在文中作者发现 , 简单地裁剪连续的时间和频率维度的随机块可以显著提高模型的泛化能力 。


推荐阅读