来源:大数据文摘
本文长度为7600字,建议阅读10分钟
本文将一步步向你展示,如何建立一个能识别10个不同词语的基本语音识别网络。
你需要知道,真正的语音与音频识别系统要复杂的多,但就像图像识别领域的MNIST,它将让你对所涉及的技术有个基本了解。
完成本教程后,你将拥有一个模型,能够辨别一个1秒钟的音频片段是否是无声的、无法识别的词语,或者是“yes”、“no”、“up”、“down”、“left”、“right”、 “on”、“off”、“stop”、“go”。你还可以使用这个模型并在Android应用程序中运行它。
注:本文含有大量代码,需要代码原文的同学请参考文末来源地址中的内容。
准备工作
确保你已经安装了TensorFlow,由于脚本程序将下载超过1GB的训练数据,你需要畅通的网络连接,而且你的机器需要有足够的空余空间。训练过程本身可能需要几个小时,所以确保你有一台可以使用这么长时间的机器。
训练
开始训练前,在TensorFlow 源码树下运行:
这个脚本程序将开始下载“语音命令数据集”,包括65000条由不同的人说30个不同词语组成的WAVE音频文件。这份数据由Google收集,并在CC-BY协议许可下发行,你可以通过贡献自己五分钟的声音来帮助提升它。这份文件大小超过1GB,所以这部分可能需要一段的时间,但你应该看一下过程日志,一旦它被下载一次,你就不需要再进行这一步了。
这表明初始化进程已经完成,循环训练已经开始,你将看到每一次训练产生的输出信息。这里分别解释一下含义:
在100步之后,你将会看到一行输出如下:
就可以从该点重新开始脚本。
混淆矩阵
在400步之后,将记录如下的信息:
第一部分是混淆矩阵。为了理解它的含义,首先需要知道所使用的标签,它们是 “silence”、 “unknown”、 “yes”、 “no”、 “up”、 “down”、 “left”、 “right”、 “on”、 “off”、“stop”和“go”。每一列代表一组被预测为某个标签的样本,因此第一列代表着所有预测为“silence”的片段,第二列都被预测为“unknown”词,第三列是“yes”,以此类推。
每一行代表着正确的、完全真实为该标签的片段。第一行是所有为“silence”的片段,第二行的片段都是“unknown”词,第三行是“yes”,以此类推。
这个矩阵比单单一个准确率更有用,因为它能很好地总结出网络所犯的错误。在这个例子中,除了第一项之外,第一行中的所有项都是零。因为第一行指的是所有实际上是“silence”的片段,这意味着没有一个被否定地标记为词语,所以我们没有漏报一个“silence”。这表明网络已经能够很好地区分“silence”和词语。