音频深度学习变得简单:自动语音识别 (ASR),它是如何工作的

news2024/11/16 13:22:48

一、说明

        在过去的几年里,随着Google Home,Amazon Echo,Siri,Cortana等的普及,语音助手已经无处不在。这些是自动语音识别 (ASR) 最著名的示例。此类应用程序从某种语言的语音音频剪辑开始,并将说出的单词提取为文本。因此,它们也称为语音转文本算法。

        当然,像Siri和上面提到的其他应用程序,走得更远。他们不仅提取文本,而且还解释和理解所说的语义,以便他们可以用答案做出回应,或者根据用户的命令采取行动。

        在本文中,我将重点介绍使用深度学习进行语音转文本的核心功能。我的目标不仅是了解某件事是如何工作的,而且是了解它为什么会这样工作。

        在我的音频深度学习系列中,我还有一些文章可能会让你觉得有用。他们探讨了这个领域的其他引人入胜的主题,包括我们如何为深度学习准备音频数据,为什么我们将Mel频谱图用于深度学习模型以及如何生成和优化它们。

  1. 最先进的技术(什么是声音以及如何数字化。音频深度学习在我们的日常生活中解决了哪些问题。什么是频谱图以及为什么它们非常重要。
  2. 为什么 Mel 频谱图表现更好(在 Python 中处理音频数据。什么是梅尔频谱图以及如何生成它们)
  3. 数据准备和增强(通过超参数调优和数据增强增强频谱图功能以获得最佳性能)
  4. 声音分类(对普通声音进行分类的端到端示例和架构。适用于各种方案的基础应用程序。
  5. 波束搜索(语音转文本和NLP应用程序通常用于增强预测的算法)

二、语音转文本

        可以想象,人类语音是我们日常个人和商业生活的基础,语音转文本功能具有大量的应用。人们可以使用它来转录客户支持或销售电话的内容,用于面向语音的聊天机器人,或记下会议和其他讨论的内容。

        基本音频数据由声音和噪音组成。人类语言就是其中的一个特例。因此,我在文章中谈到的概念,例如我们如何数字化声音,处理音频数据以及为什么我们将音频转换为频谱图,也适用于理解语音。但是,语音更复杂,因为它对语言进行编码。

音频分类等问题从声音剪辑开始,并从一组给定的类中预测该声音属于哪个类。对于语音转文本问题,训练数据包括:

  • 输入特征(X):口语的音频剪辑
  • 目标标签 (y):所讲内容的文本记录

自动语音识别使用音频波作为输入特征,文本脚本作为目标标签(图片来源:作者)

该模型的目标是学习如何获取输入音频并预测所说的单词和句子的文本内容。

三、数据预处理

        在声音分类文章中,我将逐步解释用于处理深度学习模型的音频数据的转换。对于人类语言,我们也遵循类似的方法。有几个Python库提供了执行此操作的功能,librosa是最受欢迎的库之一。

将原始音频波转换为频谱图图像以输入到深度学习模型(图片来自作者)

3.1 加载音频文件

  • 从输入数据开始,该数据由音频格式(如“.wav”或“.mp3”)的语音的音频文件组成。
  • 从文件中读取音频数据并将其加载到 2D Numpy 数组中。该数组由一系列数字组成,每个数字代表特定时刻声音强度或振幅的测量值。此类测量的数量由采样率决定。例如,如果采样率为 44.1kHz,则 Numpy 数组将有一行 44,100 个数字,用于 1 秒的音频。
  • 音频可以有一个或两个声道,通常称为单声道或立体声。对于双声道音频,我们将为第二个声道提供另一个类似的振幅数字序列。换句话说,我们的 Numpy 数组将是 3D,深度为 2。

3.2 转换为统一尺寸:采样率、通道和持续时间

  • 我们的音频数据项可能有很多变化。剪辑可能以不同的速率采样,或者具有不同数量的通道。剪辑很可能有不同的持续时间。如上所述,这意味着每个音频项目的尺寸会有所不同。
  • 由于我们的深度学习模型期望所有输入项具有相似的大小,因此我们现在执行一些数据清理步骤来标准化音频数据的尺寸。我们对音频进行重新采样,以便每个项目都具有相同的采样率。我们将所有项目转换为相同数量的频道。所有项目也必须转换为相同的音频持续时间。这涉及填充较短的序列或截断较长的序列。
  • 如果音频质量很差,我们可以通过应用噪声消除算法来消除背景噪声来增强它,以便我们可以专注于语音音频。

3.3 原始音频的数据增强

  • 我们可以应用一些数据增强技术来为我们的输入数据添加更多种类,并帮助模型学会泛化到更广泛的输入。我们可以将音频随机向左或向右移动一小部分,或者将音频的音高或速度更改少量。

3.3 梅尔频谱图

  • 此原始音频现在转换为 Mel 频谱图。频谱图通过将音频分解为其中包含的频率集来捕获音频作为图像的性质。

3.4 MFCC

  • 特别是对于人类语音,有时采取一个额外的步骤并将梅尔频谱图转换为MFCC(梅尔频率倒谱系数)会有所帮助。MFCC 通过仅提取最基本的频率系数来生成 Mel 频谱图的压缩表示,这些频率系数对应于人类说话的频率范围。

3.5 频谱图的数据增强

  • 我们现在可以使用一种称为SpecAugment的技术在Mel频谱图图像上应用另一个数据增强步骤。这涉及频率和时间掩码,随机掩盖任何一个垂直(即。时间掩码)或水平(即频率掩码)频谱图中的信息带。注意:我不确定这是否也适用于MFCC,以及这是否会产生良好的结果。

现在,经过数据清理和增强,我们已将原始原始音频文件转换为Mel频谱图(或MFCC)图像。

我们还需要从成绩单中准备目标标签。这只是由单词句子组成的常规文本,因此我们从成绩单中的每个字符构建词汇表,并将它们转换为字符 ID。

这为我们提供了输入功能和目标标签。这些数据已准备好输入到我们的深度学习模型中。

四、建筑

        ASR 的深度学习架构有许多变体。两种常用的方法是:

  • 一种 CNN(卷积神经网络)和基于 RNN(递归神经网络)的架构,它使用 CTC 损失算法来划分语音中单词的每个字符。例如。百度的深度语音模型。
  • 一种基于 RNN 的序列到序列网络,它将频谱图的每个“切片”视为序列中的一个元素,例如。谷歌的Listen Attend Spell(LAS)模型。

        让我们选择上面的第一种方法,并更详细地探讨它是如何工作的。在高级别上,模型由以下块组成:

  • 由几个残差 CNN 层组成的规则卷积网络,用于处理输入频谱图图像和这些图像的输出特征图。
频谱图由卷积网络处理以生成特征图 

  • 由几个双向 LSTM 层组成的常规循环网络,这些层将特征图处理为一系列不同的时间步长或“帧”,对应于我们所需的输出字符序列。(LSTM是一种非常常用的循环层类型,其完整形式是长短期记忆)。换句话说,它采用作为音频连续表示的特征图,并将它们转换为离散表示。
循环网络处理特征图中的帧 

  • 具有 softmax 的线性层,它使用 LSTM 输出为输出的每个时间步长生成字符概率。
线性图层为每个时间步生成字符概率 

  • 我们还有位于卷积网络和循环网络之间的线性层,有助于将一个网络的输出重塑为另一个网络的输入。

        因此,我们的模型采用频谱图图像,并输出该频谱图中每个时间步长或“帧”的字符概率。

五、对齐序列

        如果你稍微考虑一下,你就会意识到我们的拼图中仍然缺少一个主要的部分。我们的最终目标是将这些时间步或“帧”映射到目标成绩单中的单个字符。

该模型解码字符概率以产生最终输出(图片来自作者)

但是对于特定的频谱图,我们怎么知道应该有多少帧?我们如何确切知道每个帧的边界在哪里?我们如何将音频与文本成绩单中的每个字符对齐?

左边是我们需要的对齐方式。但是我们如何得到它呢?(图片来源:作者)

音频和频谱图图像没有预先分割以向我们提供此信息。

  • 在口语音频中,因此在频谱图中,每个字符的声音可能具有不同的持续时间。
  • 这些字符之间可能存在间隙和停顿。
  • 几个字符可以合并在一起。
  • 有些字符可以重复。例如。在“苹果”这个词中,我们怎么知道音频中的“P”音是否真的对应于成绩单中的一个或两个“P”?

实际上,口语对我们来说并不整齐(图片来自作者)

这实际上是一个非常具有挑战性的问题,也是使ASR难以正确的原因。这是将 ASR 与其他音频应用(如分类等)区分开来的区别特征。

我们解决这个问题的方法是使用一种巧妙的算法,它有一个听起来很花哨的名字——它被称为连接主义时间分类,简称CTC。由于我不是“花哨的人”并且发现很难记住那个长名字,所以我只会用CTC这个名字来指代它😃。

六、CTC 算法 — 训练和推理

        当输入连续且输出是离散的,并且没有明确的元素边界可用于将输入映射到输出序列的元素时,CTC 用于对齐输入和输出序列。

        它之所以如此特别,是因为它会自动执行此对齐,而无需手动提供该对齐作为标记训练数据的一部分。这将使创建训练数据集的成本非常高。

        正如我们上面所讨论的,在我们的模型中,卷积网络输出的特征图被切成单独的帧并输入到循环网络。每一帧对应于原始音频波的某个时间步长。但是,在设计模型时,由您选择帧数和每个帧的持续时间作为超参数。对于每一帧,循环网络后跟线性分类器,然后从词汇表中预测每个字符的概率。

连续音频被切成离散帧并输入到 RNN 

        CTC 算法的工作是获取这些字符概率并导出正确的字符序列。

        为了帮助它处理我们刚刚讨论的对齐和重复字符的挑战,它在词汇表中引入了“空白”伪字符(用“-”表示)的概念。因此,网络输出的字符概率还包括每帧空白字符的概率。

        请注意,空白与“空格”不同。空格是真正的字符,而空白表示没有任何字符,有点像大多数编程语言中的“null”。它仅用于划分两个字符之间的边界。

        CTC 以两种模式工作:

  • CTC 损失(训练期间):它有一个地面真相目标成绩单,并尝试训练网络以最大限度地提高输出正确成绩单的概率。
  • CTC 解码(在推理期间):在这里,我们没有可参考的目标脚本,并且必须预测最可能的字符序列。

        让我们进一步探讨这些内容,以了解算法的作用。我们将从CTC解码开始,因为它更简单一些。

6.1 CTC解码

  • 使用字符概率为每个帧选择最可能的字符,包括空白。例如。“呜呜呜

CTC解码算法(图片来自作者)

  • 合并任何重复的字符,并且不要用空格分隔。例如,我们可以将“oo”合并为单个“o”,但我们不能合并“o-oo”。这就是反恐委员会如何能够区分有两个单独的“o”并产生用重复字符拼写的单词。例如。“-
  • 最后,由于空白已达到其目的,因此它会删除所有空白字符。例如。“”。

6.2 CTC损失

损失计算为网络预测正确序列的概率。为此,该算法列出了网络可以预测的所有可能序列,并从中选择与目标转录本匹配的子集。

为了从完整的可能序列集中识别该子集,该算法按如下方式缩小了可能性范围:

  • 仅保留目标脚本中出现的字符的概率,并丢弃其余字符。它仅保留“G”、“o”、“d”和“-”的概率。
  • 使用过滤的字符子集,对于每个帧,仅选择与目标脚本顺序相同的字符。例如。虽然“G”和“o”都是有效字符,但“Go”的顺序是有效的序列,而“oG”是无效序列。

CTC损失算法(图片来自作者)

有了这些约束,算法现在有一组有效的字符序列,所有这些字符序列都将生成正确的目标脚本。例如。使用推理期间使用的相同步骤,“-G-o-ood”和“ — Go-od-”都将产生“Good”的最终输出。

然后,它使用每个帧的单个字符概率来计算生成所有这些有效序列的总体概率。网络的目标是学习如何最大化该概率,从而降低生成任何无效序列的概率。

严格来说,由于神经网络将损失最小化,因此CTC损失计算为所有有效序列的对数概率。由于网络在训练期间通过反向传播将损失最小化,因此它会调整其所有权重以产生正确的序列。

然而,实际做到这一点比我在这里描述的要复杂得多。挑战在于有大量可能的角色组合来产生序列。仅通过我们的简单示例,我们每帧可以有 4 个字符。用 8 帧给我们 4 ** 8 种组合 (= 65536)。对于任何具有更多字符和更多帧的逼真成绩单,此数字呈指数级增长。这使得简单地详尽列出有效组合并计算其概率在计算上是不切实际的。

有效地解决这个问题是CTC如此创新的原因。这是一个引人入胜的算法,非常值得了解它如何实现这一目标的细微差别。这本身就值得写一篇完整的文章,我计划很快写。但就目前而言,我们专注于建立对CTC工作的直觉,而不是研究它是如何工作的。

七、指标 — 单词错误率 (WER)

        训练我们的网络后,我们必须评估它的性能。语音转文本问题的常用指标是单词错误率(和字符错误率)。它逐字(或逐个字符)比较预测输出和目标成绩单,以找出它们之间的差异数量。

        差异可以是脚本中存在但在预测中缺少的单词(计为删除)、不在脚本中但已添加到预测中的单词(插入),或者在预测和脚本之间更改的单词(替换)。

        计算成绩单和预测之间的插入、删除和替换(图片来自作者)

        指标公式相当简单。它是相对于单词总数的差异百分比。

单词错误率计算(图片来自作者)

八、语言模型

        到目前为止,我们的算法已经将语音音频视为仅对应于某种语言的字符序列。但是,当这些字符组合成单词和句子时,这些字符是否真正有意义并有意义?

        自然语言处理 (NLP) 中的一个常见应用是构建语言模型。它捕获了单词在语言中通常如何用于构造句子、段落和文档。它可以是关于英语或韩语等语言的通用模型,也可以是特定于特定领域(如医学或法律)的模型。

        一旦你有了语言模型,它就可以成为其他应用程序的基础。例如,它可以用来预测句子中的下一个单词,辨别某些文本的情绪(例如,这是一篇积极的书评),通过聊天机器人回答问题,等等。

因此,当然,它也可用于通过指导模型生成更有可能根据语言模型的预测来选择性地提高 ASR 输出的质量。

九、波束搜索

        在推理过程中描述 CTC 解码器时,我们隐含地假设它总是在每个时间步选择概率最高的单个字符。这被称为贪婪搜索。

        但是,我们知道使用称为光束搜索的替代方法可以获得更好的结果。

        虽然Beam Search通常经常用于NLP问题,但它并不是特定于ASR的,所以我在这里提到它只是为了完整。如果您想了解更多信息,请查看我的文章,其中详细介绍了Beam Search。

十、结论

        希望现在这能让您了解用于解决 ASR 问题的构建块和技术。

        在深度学习之前的旧时代,通过经典方法解决这些问题需要理解音素等概念以及许多特定于领域的数据准备和算法。

        然而,正如我们刚刚在深度学习中看到的那样,我们几乎不需要任何涉及音频和语音知识的特征工程。然而,它能够产生出色的结果,继续让我们感到惊讶!

        最后,如果你喜欢这篇文章,你可能还会喜欢我关于变形金刚、地理定位机器学习和图像标题架构的其他系列。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/798082.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

项目文档管理的基本指南

项目文档是一种关键的项目管理资源,它可以提供清晰度,保证参与项目的每个人都在同一页面上,从而确保项目按时、按预算完成。 本文将讨论项目文档的重要性、如何在项目中使用项目文档以及选择好合适的项目文档管理软件的技巧。 什么是项目文…

【C语言】位段枚举联合

鹅,鹅,鹅,曲项向天歌。白毛浮绿水,红掌拨清波。 — 唐代骆宾王《咏鹅》 这篇博客我们会详细介绍位段,以及枚举类型和联合类型 位段是什么?🍀 位段的声明和结构是类似的,有两个不同…

数据库数据恢复-导致oracle数据库数据丢失的常见故障分析

作为存储和处理数据的系统,oracle数据库在使用过程中不可避免会出现各种导致数据丢失和数据损坏的故障。北亚企安数据恢复工程师根据十多年的案例经验,总结出oracle数据库常见故障以及恢复可能性。 1、Oracle数据库无法启动或者启动后无法正常工作。 如果…

如何写一篇吸引人的美食营销软文?纯干货

信息化时代,美食营销软文已经成为了餐饮业吸引顾客的重要手段之一。那么,如何才能写出一篇吸引人的美食营销软文呢?本文伯乐网络传媒将从以下几个方面进行深刻讨论。 一、抓住顾客的心理需求 要写一篇成功的美食营销软文,首先要抓…

最新版Onenet云平台HTTP协议接入上传数据

2023年最新版Onenet更新后,原来的多协议接口已经找不到,由于需要用HTTP接入,就研究了一下新版Onenet云平台,搞清楚Onenet云平台的鉴权信息,就知道怎么上传数据了,包括后续上传实际数据,其实只需…

Jenkins 还可以支持钉钉消息通知?一个插件带你搞定!

Jenkins 作为最流行的开源持续集成平台,其强大的拓展功能一直备受测试人员及开发人员的青睐。大家都知道我们可以在 Jenkins 中安装 Email 插件支持构建之后通过邮件将结果及时通知到相关人员。 但其实 Jenkins 还可以支持钉钉消息通知,其主要通过 Ding…

800*A. Cherry

Example input 4 3 2 4 3 4 3 2 3 1 2 69 69 6 719313 273225 402638 473783 804745 323328output 12 6 4761 381274500335解析: 每次只计算相邻两个数的乘积,乘积的最大值即为答案。 取三个元素 a,b,c,那么其最大值…

Vue3 Radio单选切换展示不同内容

Vue3 Radio单选框切换展示不同内容 环境&#xff1a;vue3tsviteelement plus 技巧&#xff1a;v-if&#xff0c;v-show的使用 实现功能&#xff1a;点击单选框展示不同的输入框 效果实现前的代码&#xff1a; <template><div class"home"><el-row …

HuntingNFT 全新玩法引爆市场,GameFi掘金新热土?

“HuntingNFT v2 版本推出后&#xff0c;全新上线的驻守玩法、献祭玩法正在为玩家带来十分可观且持续的收益&#xff0c;其正在成为 GameFi 掘金的新热土。” 在经历了 2021 年的短暂狂欢后&#xff0c;随着 2022 年年初市场遇冷转熊&#xff0c;GameFi 市场也开始不断降温。根…

IDEA live templates

surround 在SQL的xml里 可以修改变量 官方文档 CDATA not null <if test"$SELECTION$ ! null and $SELECTION$ ! "> and $VAR1$ #{$SELECTION$} </if>not null like mysql <if test"$SELECTION$ ! null and $SELECTION$ ! "> and…

Gitlab 备份与恢复

备份 1、备份数据&#xff08;手动备份&#xff09; gitlab-rake gitlab:backup:create2、备份数据&#xff08;定时任务备份&#xff09; [rootlocalhost ]# crontab -l 00 1 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create 说明&#xff1a;每天凌晨1点备份数据…

WebDAV之π-Disk派盘 + POJO

POJO 支持WebDAV方式连接π-Disk派盘。 Pojo文档管理是一种简单而强大的文档管理方法,利用Java编程语言的普通对象来管理文档。你可以使用Pojo对象来表示和操作文档的属性、内容和元数据。这种面向对象的方法使得文档管理更加灵活和可扩展。 结合派盘,Pojo文档管理变得更加…

按是否手工执行测试的角度划分:手工测试、自动化测试

1.手工测试&#xff08;Manual testing&#xff09; 手工测试是由人一个一个的输入用例&#xff0c;然后观察结果&#xff0c;和机器测试相对应&#xff0c;属于比较原始但是必须的一个步骤。 由专门的测试人员从用户视角来验证软件是否满足设计要求的行为。 更适用针对深度…

炎热夏天,VR全景让你宅家也能逛风景

夏天的快乐都是空调给的&#xff0c;进入三伏天气以来&#xff0c;连续的高温让人坐着都是一身汗&#xff0c;尤其是活泼好动的小朋友们&#xff0c;不出去玩那是不可能的。不妨改变下策略&#xff0c;让小朋友们转战线上&#xff0c;还能学习知识&#xff0c;是不是美滋滋呢~~…

JS逆向之猿人学爬虫第20题-wasm

文章目录 题目地址sign参数分析python算法还原往期逆向文章推荐题目地址 https://match.yuanrenxue.cn/match/20第20题被置顶到了第1页,题目难度 写的是中等 算法很简单,就一个标准的md5算法,主要是盐值不确定, 而盐值就在wasm里面,可以说难点就在于wasm分析 sign参数分…

history命令:显示命令执行时间

1.修改配置文件 vim /etc/profile 添加内容 export HISTTIMEFORMAT"%Y-%m-%d %H:%M:%S " ​ #注意&#xff1a;在末尾的“引号”与“S”之间&#xff0c;加入一位空格&#xff0c;将日期时间和历史命令用空格相隔开来。 你也可以换一种清晰的形式&#xff0c;效果…

java线程中的常见方法(详解)

方法简介 方法名 功能 说明 start() 启动一个新线程&#xff0c;在新的线程运行 run 方法中的代码 start 方法只是让线程进入就绪&#xff0c;里面代码不一定立刻运行&#xff08;CPU 的时间片还没分给它&#xff09;。每个线程对象的start方法只能调用一次&#xff0c;如…

程序员必读十大电子书

程序员必读十大电子书 云原生架构白皮书 2022 版程序员面试宝典Java 工程师成神之路微服务治理技术白皮书Java 开发手册&#xff08;嵩山版&#xff09;必致&#xff08;BizDevOps&#xff09;白皮书 2022Elasticsearch 全观测技术解析与应用&#xff08;构建日志、指标、APM 统…

Tik Tok海外公会是什么?

在数字社交媒体领域&#xff0c;TikTok已成为全球性的热门应用之一&#xff0c;印尼市场也不例外。作为全球第四人口最多的国家&#xff0c;印尼的年轻人口众多&#xff0c;是一个极具潜力的市场。对于希望在印尼市场进行TikTok公会申请的机构来说&#xff0c;了解市场发展趋势…

NLP实验案例100个(1-5)

实验一 array数组&#xff08;01&#xff09; 一、实验目的及要求 1.安装numpy环境&#xff0c;掌握基本的数组知识以及操作。 二、实验设备&#xff08;环境&#xff09;及要求 开发环境&#xff1a;jupyter notebook 开发语言以及相关的库&#xff1a;python开发语言、nu…