机器学习原来如此有趣:如何用深度学习进行语音识别 (3)

如果我们对每个20毫秒的音频块都重复这个过程,我们最后会得到一个频谱图(从左到右每一列都是一个29毫秒的音频块)

机器学习原来如此有趣:如何用深度学习进行语音识别

频谱图很酷,因为你可以在音频数据中实实在在地看到音符和其他音高模式。对于神经网络来说,相比于原始声波,从这种数据中寻找规律要容易得多。因此,这就是我们将要实际输入到神经网络中去的数据表示方式。

从短音频中识别字符

现在我们已经让音频转变为一个易于处理的格式了,现在我们将要把它输入深度神经网络。神经网络的输入将会是 20 毫秒的音频块。对于每个小的音频切片(audio slice),神经网络都将尝试找出当前正在说的声音所对应的字母。

机器学习原来如此有趣:如何用深度学习进行语音识别

我们将使用一个循环神经网络——即一个拥有记忆,能影响未来预测的神经网络。这是因为它预测的每个字母都应该能够影响它对下一个字母的预测。例如,如果我们到目前为止已经说了「HEL」,那么很有可能我们接下来会说「LO」来完成「Hello」。我们不太可能会说「XYZ」之类根本读不出来的东西。因此,具有先前预测的记忆有助于神经网络对未来进行更准确的预测。

当通过神经网络跑完我们的整个音频剪辑(一次一块)之后,我们将最终得到一份映射(mapping),其中标明了每个音频块和其最有可能对应的字母。这是我说那句「Hello」所对应的映射的大致图案:

机器学习原来如此有趣:如何用深度学习进行语音识别

我们的神经网络正在预测我说的那个词很有可能是「HHHEE_LL_LLLOOO」。但它同时认为我说的也可能是「HHHUU_LL_LLLOOO」,或者甚至是「AAAUU_LL_LLLOOO」。

我们可以遵循一些步骤来整理这个输出。首先,我们将用单个字符替换任何重复的字符:

· HHHEE_LL_LLLOOO 变为 HE_L_LO

· HHHUU_LL_LLLOOO 变为 HU_L_LO

· AAAUU_LL_LLLOOO 变为 AU_L_LO

然后,我们将删除所有空白:

· HE_L_LO 变为 HELLO

· HU_L_LO 变为 HULLO

· AU_L_LO 变为 AULLO

这让我们得到三种可能的转写——「Hello」、「Hullo」和「Aullo」。如果你大声说出这些词,所有这些声音都类似于「Hello」。因为神经网络每次只预测一个字符,所以它会得出一些纯粹表示发音的转写。例如,如果你说「He would not go」,它可能会给出一个「He wud net go」的转写。

解决问题的诀窍是将这些基于发音的预测与基于书面文本(书籍、新闻文章等)大数据库的可能性得分相结合。扔掉最不可能的结果,留下最实际的结果。

在我们可能的转写「Hello」、「Hullo」和「Aullo」中,显然「Hello」将更频繁地出现在文本数据库中(更不用说在我们原始的基于音频的训练数据中了),因此它可能就是正解。所以我们会选择「Hello」作为我们的最终结果,而不是其他的转写。搞定!

稍等一下!

你可能会想「但是如果有人说Hullo」怎么办?这个词的确存在。也许「Hello」是错误的转写!

机器学习原来如此有趣:如何用深度学习进行语音识别

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwsyjg.html