借鉴奈奎斯特定理 (Nyquist theorem),我们可以利用数学从间隔的采样中完美地重建原始声波——只要以我们希望得到的最高频率的两倍来进行采样就可以实现。 我提到这一点,是因为几乎每个人都会犯这个错误:认为使用更高的采样率总是能获得更好的音频质量。 采样声音数据的预处理 我们现在有一个数值数组,每个数值代表声波在间隔为 1 / 16,000 秒的时刻时的高度值(振幅)。 我们可以将这些数值输入神经网络。但是试图通过直接处理这些样本来识别语音模式是困难的。相反,我们可以通过对音频数据预处理来简化问题。 让我们将采样的音频以 20 毫秒时间段长进行分组。这是我们第一个 20 毫秒的样本音频,即我们的前 320 个样本。
将这些数值绘制为简单的线图,给出了对于 20 毫秒时间段的原始声波的粗略近似:
虽然这段录音只有 1/50 秒的时长,但即使这样短暂的时长也包含不同频率的声音。有低音、中音,甚至高音混在一起。但总的来说,这些不同频率的声音混合在一起构成了人类复杂的语音。 为了使这些数据更容易进行神经网络处理,我们将这复杂的声波分成不同部分。我们将一步步分离低音部分,下一个最低音部分,以此类推。然后通过将每个频带(从低到高)中的能量相加,我们就为各个类别(音调)的音频片段创建了一个指纹。 想象你有一段某人在钢琴上弹奏 C 大调的音频。这段音频是由三个音符组合而成的 - C,E 和 G – 他们混合在一起组成一个复杂的音频。我们想把这个复杂的音频分解成单独的音符:C,E 和 G。这和我们语音识别的想法一样。 我们可以使用数学中的傅里叶变换来完成。傅里叶变换将复杂的声波分解成简单的声波,一旦我们得到了这些简单声波,我们将每一个声波包含的能量加在一起。 最终结果是从低音(即低音音符)到高音,每个频率范围的重要程度。下面的每个数字表示在我们的 20 毫秒音频剪辑中每个 50Hz 频带中的能量:
表中的每个数值表示每个 50Hz 频带中的能量 当你把它以图表形式画出,你更容易看出:
你可以看出,我们的 20 毫秒的声音片段中有很多低频能量,高频能量较少。这是典型的「男性」的声音。 如果我们以每 20 毫秒的音频块重复这个过程,我们最终会得到一个频谱图(每一列从左到右都是一个 20 毫秒的块):
「hello」声音片段的完整频谱图 频谱图很棒,因为你可以从音频数据中看到音符和其他音高模式。相比于原始声波,神经网络可以更加容易地从这种数据中找到规律。因此,这(频谱图)就是我们将实际输入到神经网络的数据表征方式。 从短声音中识别字符 有了易于处理音频形式,我们将把它输入到深度神经网络。神经网络的输入是 20 毫秒的音频块,对于每个小的音频切片,神经网络都会试图找出与声音对应的字母。
我们将使用循环神经网络——即是具有能影响未来预测的记忆的神经网络。因为它预测的每个字母都将影响它对下一个字母的预测。例如,如果我们已经说出「HEL」,那么接下来我们很可能说出「LO」以说出「Hello」。我们不太可能会说像「XYZ」这种根本无法发音的词。因此,具有先前预测的记忆将有助于神经网络对未来进行更准确的预测。 当我们在神经网络上运行我们的整个音频剪辑(一次一块)后,我们最终将得到与每个音频块最可能对应的字符的一个映射。这是一个看起来像是我说」Hello」时的映射:
我们的神经网络可能预测到我说的是「HHHEE_LL_LLLOOO」,也可能是「HHHUU_LL_LLLOOO」或甚至「AAAUU_LL_LLLOOO」。 我们用几个步骤来整理输出结果。首先,我们会用单个字符替换重复的的字符: HHHEE_LL_LLLOOO becomes HE_L_LO HHHUU_LL_LLLOOO becomes HU_L_LO AAAUU_LL_LLLOOO becomes AU_L_LO 然后,我们将移除所有空白 HE_L_LO 变成 HELLO HU_L_LO 变成 HULLO AU_L_LO 变成 AULLO (责任编辑:本港台直播) |