本文概述
- 语音识别系统的类型
- TensorFlow音频识别培训
- TensorFlow中的混淆矩阵
- TensorFlow中的TensorBoard
- 完成音频识别培训
- 语音识别模型的工作
- TensorFlow中的命令识别
音频识别是计算语言学的一个跨学科子领域, 它发展了一些方法和技术, 使计算机可以将口语识别和翻译成文本。语音识别通常用于在不借助键盘, 鼠标或按任何按钮的情况下操作设备, 执行命令和进行书写的功能。
如今, 它是在具有ASR(自动语音识别)软件程序的计算机上完成的。许多ASR程序要求用户”培训” ASR程序以识别其语音, 以便它可以更准确地将语音转换为文本。
例如, 我们可以说”打开Google选择框”, 然后计算机将打开Internet浏览器镶边。
第一台ASR设备于1952年投入使用, 任何用户都可以识别出单个数字。在当今时代, ASR程序用于许多行业, 包括军事, 医疗保健, 电信和个人计算机。
我们可能使用语音识别的示例:Google语音, 自动电话系统, 数字语音, 数字助手, 车载蓝牙。
语音识别系统的类型
自动语音识别是语音识别的一个示例。以下是语音识别系统的其他一些示例。
- 取决于说话者的系统-语音识别在使用前需要接受培训, 这要求我们阅读一系列单词和短语。
- 扬声器独立系统-语音识别软件无需培训即可识别大多数用户的语音。
- 离散语音识别-用户必须在每个单词之间停顿, 以便语音识别可以识别每个单独的单词。
- 连续语音识别-语音识别可以理解标准语速。
- 自然语言-语音识别不仅可以理解语音, 还可以返回问题或其他询问的答案。
像图像的MNIST一样, 这应该使我们对所涉及的技术有基本的了解。完成本TensorFlow音频识别教程后, 我们将拥有一个模型, 该模型试图将一秒钟的音频片段分类为: - 安静
- 一个未知的词
- 是
- No
- Up
- 下
- 剩下
- 对
- On
TensorFlow音频识别培训
要开始TensorFlow音频识别中的训练过程, 请代表TensorFlow源并编写以下内容:
Python tensorflow/examples/speech_commands/train.py
此命令可以下载包含65k的语音数据集。 Wav音频文件, 人们可以看到30个不同的单词。
TensorFlow中的混淆矩阵
前400个步骤将为我们提供:
1. I0730 17:57:38.073667 55030 train.py:243] Confusion of the matrix:
2. [[258 0 0 0 0 0 0 0 0 0 0 0 0 ]
3. [ 7 6 76 94 7 49 1 15 50 2 0 11]
4. [ 10 1 107 80 13 33 0 13 10 1 0 4]
5. [ 1 3 16 164 6 48 0 5 10 1 0 17]
6. [ 15 1 17 114 44 13 0 9 22 5 0 9]
7. [ 1 1 6 97 3 86 1 12 46 0 0 10]
8. [ 8 6 84 86 13 24 1 9 9 1 6 0]
9. [ 9 3 32 112 9 26 1 36 19 0 0 9]
10. [ 9 2 12 94 9 49 0 6 72 0 0 2]
11. [ 16 1 39 75 29 52 0 6 37 9 0 3]
12. [ 15 6 17 71 60 37 0 6 32 3 1 9]
13. [ 11 1 6 151 5 43 0 8 16 0 0 20]]
我们看到第一部分是一个矩阵。每列代表一组针对每个关键字估算的样本。在上面的矩阵中, 第一列代表所有被预测为静音的剪辑, 第二列代表未知单词, 第三列为”是”, 依此类推。
TensorFlow中的TensorBoard
我们使用TensorBoard可视化培训进度。这些事件将保存到/ tmp / retrain_logs, 并使用以下语法加载:
tensorboard --logdir /tmp/retrain_logs
完成音频识别培训
经过几个小时的培训, 该脚本完成了大约20, 000个步骤, 打印出了最终的混淆矩阵以及准确率
我们可以使用给定的代码以紧凑的形式导出到移动设备:
python tensorflow speech_commands/freeze.py\
--start_checkpoint=/tmp/speech_commands_train/conv.ckpt-18000 \
--output_file=/tmp/my_frozen_graph.pb
语音识别模型的工作
它基于CNN的类型, 对于像我们在以前的教程之一中已经使用过图像识别的任何人都非常熟悉。音频是一维信号, 不会对二维空间问题感到困惑。
现在, 我们必须解决这一问题, 方法是定义一个适合我们口语的时隙, 并将该时隙中的信号更改为图像。为此, 我们可以将输入的音频分成短段, 然后计算频率强度。每个段都像数字矢量一样对待, 它们按时间排列以形成2D数组。可以像单通道图像一样对待此值数组, 也称为频谱图。我们可以查看音频样本产生的图像类型:
bazel run tensorflow/examples/wav_to_spectogram:wav_to_spectogram -- \
--input_wav=/tmp/speech_dataset/happy/ab00c4b2_nohash_0.wv \
--output_png=/tmp/spectrogram.png
/tmp/spectrogram.png将向我们显示:
这是一个2d单通道表示, 因此我们也倾向于将其像图像一样。
然后将生成的图像输入到多层卷积神经网络中, 该层具有完全连接的层, 最后是softmax。
TensorFlow中的命令识别
未知类别
我们的应用可能会听到不属于我们训练集的声音。为了使网络了解抵制哪种声音, 我们需要提供不属于我们课堂的音频片段。为此, 我们可以创建”嘘声”, “喵”声, 并用动物发出的噪音填充它们。语音命令数据集包括其未知类别中的20个单词, 包括数字(0到9)以及随机名称。
背景噪音
任何捕获的音频片段中都有背景噪音。要构建可抵抗这种噪音的模型, 我们需要针对具有相同属性的录制音频对模型进行训练。语音命令数据集中的文件记录在多个设备上和不同的环境中, 从而为培训提供了帮助。
然后, 我们可以从文件中随机选择少量提取物, 并在训练过程中将其少量混合成片段。
客制化
该脚本使用的模型非常庞大, 它使用940k权重参数, 将进行过多的计算, 无法在资源有限的设备上以高速运行。解决此问题的其他方法是:
low_latency_conv:精度低于conv, 但是权重参数的数量几乎相同, 并且速度更快
我们应该指定-model-architecture = low_latency_conv在命令行上使用此模型。
我们应该添加参数, 学习率= 0.01, 步数= 20, 000。
low_latency_svdf:准确度低于conv, 但仅使用750k参数, 并且执行优化。在命令行上键入-model_architecture = low_latency_svdf以使用模型, 并指定训练速率和步骤数以及:
python tensorflow/examples/speech_commands/train \
--model_architecture=low_latency_svdf \
--how_many_training_steps=100000, 35000 \
--learning_rate=0.01, 0.005
评论前必须登录!
注册