# 3.9语音识别（Speech recognition）

输入音频片段$$x$$（**an audio clip,x**），生成文本$$y$$：

[![](https://github.com/fengdu78/deeplearning_ai_books/raw/master/images/8da3e9cf049139a8e4a78503bd72e7fd.png)](https://github.com/fengdu78/deeplearning_ai_books/blob/master/images/8da3e9cf049139a8e4a78503bd72e7fd.png)

音频片段横轴是时间。麦克风的作用是测量出微小的气压变化，而气压随着时间而变化。音频数据的常见预处理步骤就是运行这个原始的音频片段，然后生成一个声谱图（**a spectrogram**），横轴是时间，纵轴是声音的频率（**frequencies**），图中不同的颜色显示了声波能量的大小（**the amount of energy**），也就是在不同的时间和频率上这些声音有多大

在**end-to-end**模型中，可以构建一个系统，通过向系统中输入音频片段（**audio clip**），然后直接输出音频的文本（**a transcript**）。这种方法要用一个很大的数据集，需要上千上万个小时的语音素材

如何建立一个语音识别系统：

在输入音频的不同时间帧上，用一个注意力模型来输出文本描述，如"**the quick brown fox**"

[![](https://github.com/fengdu78/deeplearning_ai_books/raw/master/images/4130b85a0694549f02bdf60f7c47a3d7.png)](https://github.com/fengdu78/deeplearning_ai_books/blob/master/images/4130b85a0694549f02bdf60f7c47a3d7.png)

另一种方法是**CTC**损失函数（**CTC cost**），即**Connectionist Temporal Classification**

[![](https://github.com/fengdu78/deeplearning_ai_books/raw/master/images/8f409fc3980b0be00dca49bf4fac2659.png)](https://github.com/fengdu78/deeplearning_ai_books/blob/master/images/8f409fc3980b0be00dca49bf4fac2659.png)

输入$$x$$和输出$$y$$的数量都是一样，这里只是一个简单的单向**RNN**结构，在实际中有可能是双向的**LSTM、GRU**结构，并且通常是很深的模型

在语音识别中，通常输入的时间步数量（**the number of input time steps**）要比输出的时间步的数量（**the number of output time steps**）多出很多。如一段10秒的音频，并且特征（**features**）是100赫兹的，即每秒有100个样本，于是这段10秒的音频片段就会有1000个输入

算法思想如下：

把输出相应字符重复并加入空白（blank），形如：

$$
ttt \_ h\_eee\_ \_ \_ \sqcup\_ \_ \_ qqq\_ \_ \cdots
$$

下划线”\_“表示空白，“$$\sqcup$$“表示两个单词之间的空字符

CTC损失函数的一个基本规则是没有被空白符”\_“分割的重复字符将被折叠到一起，即表示一个字符。**the**和**quick**之间有一个空格符，这段序列折叠成"the &#x71;**"**
