📅  最后修改于: 2021-01-11 11:06:03             🧑  作者: Mango
音频识别是计算语言学的一个跨学科子领域,它发展了各种方法和技术,使计算机可以将口语识别和翻译成文本。语音识别通常用于操作设备,执行命令和书写,而无需借助键盘,鼠标或按任何按钮。
如今,它是在具有ASR (自动语音识别)软件程序的计算机上完成的。许多ASR程序要求用户“培训” ASR程序以识别其语音,以便它可以更准确地将语音转换为文本。
例如,我们可以说“打开Google chorme ”,然后计算机将打开Internet浏览器镶边。
第一台ASR设备于1952年投入使用,任何用户都可以识别出单个数字。在当今时代,ASR程序用于许多行业,包括军事,医疗保健,电信和个人计算机。
我们可能使用语音识别的示例: Google语音,自动电话系统,数字语音,数字助手,车载蓝牙。
自动语音识别是语音识别的一个示例。以下是语音识别系统的其他一些示例。
要开始TensorFlow音频识别中的训练过程,请代表TensorFlow源并编写以下内容:
Python tensorflow/examples/speech_commands/train.py
该命令可以下载包含65k的语音数据集。 Wav音频文件,人们可以看到30个不同的单词。
前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]]
我们看到第一部分是一个矩阵。每列代表一组针对每个关键字估算的样本。在上面的矩阵中,第一列代表所有被预测为静音的剪辑,第二列代表未知单词,第三列为“是”,依此类推。
我们使用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。
未知类别
我们的应用可能会听到不属于我们训练集的声音。为了使网络了解抵制哪种声音,我们需要提供不属于我们课堂的音频片段。为此,我们可以创建“嘘声”,“喵”声,并用动物发出的噪音填充它们。语音命令数据集包括其未知类别中的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以使用模型,并指定训练速度和步骤数以及:
python tensorflow/examples/speech_commands/train \
--model_architecture=low_latency_svdf \
--how_many_training_steps=100000,35000 \
--learning_rate=0.01,0.005