TensorFlow音频识别

17 Mar 2025 | 5 分钟阅读

音频识别是计算语言学的一个跨学科子领域,它开发方法和技术,使计算机能够识别口语并将口语翻译成文本。语音识别通常用于操作设备、执行命令,以及在没有键盘、鼠标或按下任何按钮的帮助下进行书写。

现在,它通常在装有 ASR (自动语音识别) 软件程序的计算机上完成。 许多 ASR 程序需要用户“训练” ASR 程序来识别其声音,以便它可以更准确地将语音转换为文本。

例如,我们可以说“打开 Google chorme”,计算机就会打开互联网浏览器 chrome。

第一个 ASR 设备于 1952 年使用,可以识别任何用户说的单个数字。 在今天,ASR 程序已在许多行业中使用,包括军事、医疗保健、电信个人计算

我们可能使用过语音识别的示例:谷歌语音、自动电话系统、数字语音、数字助手、车载蓝牙。

语音识别系统类型

自动语音识别是语音识别的一个例子。 以下是一些其他语音识别系统的示例。

  • 说话人相关系统 - 语音识别在使用前需要训练,这要求我们阅读一系列单词短语
  • 说话人无关系统 - 语音识别软件无需训练即可识别大多数用户的声音。
  • 离散语音识别 - 用户必须在每个单词之间暂停,以便语音识别可以识别每个单独的单词。
  • 连续语音识别 - 语音识别可以理解标准的说话速度。
  • 自然语言 - 语音识别不仅可以理解语音,还可以返回对所提问题的答案或其他查询。
    就像用于图像的 MNIST 一样,这应该让我们对所涉及的技术有一个基本的了解。 完成此 TensorFlow 音频识别教程后,我们将拥有一个模型,该模型尝试将一秒钟的音频剪辑分类为
  • 静音
  • 一个未知单词
  • 是的
  • 不能
  • 向上
  • 向下
  • On

TensorFlow 音频识别中的训练

要开始 TensorFlow 音频识别中的训练过程,请表示 TensorFlow 源代码并执行以下操作

此命令可以下载语音数据集,该数据集由 65k. Wav 音频文件组成,人们可以在其中看到 30 个不同的单词。

TensorFlow 中的混淆矩阵

前 400 步将给我们

我们看到第一部分是一个矩阵。 每列代表一组估计为每个关键字的样本。 在上面的矩阵中,第一列代表所有预测为静音的剪辑,第二列代表未知单词,第三列代表“是”,依此类推。

TensorFlow 中的 TensorBoard

我们使用 TensorBoard 可视化训练进度。 事件保存到 /tmp/retrain_logs,并使用以下语法加载


TensorFlow Audio Recognition

音频识别中的完成训练

经过几个小时的训练后,脚本大约完成 20,000 步,打印出最终的混淆矩阵和准确率百分比

我们可以使用给定的代码以紧凑的形式导出到移动设备

语音识别模型的工作

它基于一种 CNN,任何使用过图像识别的人都非常熟悉,就像我们在之前的教程中所做的那样。 音频是一维信号,不要与 2D 空间问题混淆。

现在,我们必须通过定义一个时隙来解决这个问题,我们的口语应该适合该时隙,并将该时隙中的信号转换为图像。 我们可以通过将传入的音频分组为短片段并计算频率强度来做到这一点。 每个片段都像一个数字向量,这些数字按时间排列以形成一个二维数组。 此值数组可以被视为单通道图像,也称为频谱图。 我们可以使用以下方法查看音频样本产生的图像类型

/tmp/spectrogram.png 将向我们展示

TensorFlow Audio Recognition

这是一个二维、单通道的表示,因此我们倾向于也将其视为图像。

然后将生成的图像馈送到多层卷积神经网络中,该网络具有一个全连接层,然后在末尾进行 softmax。

TensorFlow 中的命令识别

TensorFlow Audio Recognition

未知类

我们的应用程序可能会听到不属于我们训练集的声音。 为了让网络学习抵制哪种声音,我们需要提供不属于我们类的音频剪辑。 为此,我们可以创建 boo、meow,并用动物的声音填充它们。 语音命令数据集在其未知类中包含 20 个单词,包括数字零到九以及随机名称。

背景噪音

任何捕获的音频剪辑中都存在背景噪声。 为了构建一个能够抵抗这种噪声的模型,我们需要针对具有相同属性的录制音频训练该模型。 语音命令数据集中的文件是在多个设备上以及在不同的环境中录制的,因此有助于训练。

然后,我们可以随机选择文件中的小片段,并在训练期间以低音量混合到剪辑中。

定制

用于该脚本的模型非常庞大,使用 940k 权重参数,这些参数将有太多的计算量,无法在资源有限的设备上以高速运行。 应对此问题的其他选项是

low_latency_conv: 准确率低于 conv,但权重参数的数量几乎相同,并且速度快得多

我们应该指定 -model-architecture=low_latency_conv 以在命令行上使用此模型。

我们应该添加参数,例如学习率=0.01 和步数=20,000。

low_latency_svdf: 准确率低于 conv,但它只使用 750k 个参数并且具有优化的执行。 在命令行上键入 -model_architecture=low_latency_svdf 以使用该模型,并指定训练率和步数


下一个主题TensorFlow API