(以下内容搬运自飞桨PaddleSpeech语音技术课程,点击链接可直接运行源码)
语音识别——DeepSpeech2
0. 视频理解与字幕
# 下载demo视频
!test -f work/source/subtitle_demo1.mp4 || wget https://paddlespeech.bj.bcebos.com/demos/asr_demos/subtitle_demo1.mp4 -P work/source/
import IPython.display as dp
from IPython.display import HTML
html_str = '''
<video controls width="600" height="360" src="{}">animation</video>
'''.format("work/source/subtitle_demo1.mp4 ")
dp.display(HTML(html_str))
print ("ASR结果为:当我说我可以把三十年的经验变成一个准确的算法他们说不可能当我说我们十个人就能实现对十九个城市变电站七乘二十四小时的实时监管他们说不可能")
Demo实现:https://github.com/PaddlePaddle/PaddleSpeech/blob/develop/demos/automatic_video_subtitiles/
1. 前言
1.1 背景知识
语音识别(Automatic Speech Recognition, ASR) 是一项从一段音频中提取出语言文字内容的任务。

(出处:DLHLP 李宏毅 语音识别课程PPT)
目前该技术已经广泛应用于我们的工作和生活当中,包括生活中使用手机的语音转写,工作上使用的会议记录等等。
1.2 发展历史
- 早期,生成模型流行阶段:GMM-HMM (上世纪90年代)
- 深度学习爆发初期: DNN,CTC[1] (2006)
- RNN流行,Attention提出初期: RNN-T[2](2013), DeepSpeech[3] (2014), DeepSpeech2 [4] (2016), LAS[5](2016)
- Attetion is all you need提出开始[6]: Transformer[6](2017),Transformer-transducer[7](2020) Conformer[8] (2020

Deepspeech2模型包含了CNN,RNN,CTC等深度学习语音识别的基本技术,因此本教程采用了Deepspeech2作为讲解深度学习语音识别的开篇内容。
2. 实战:使用 DeepSpeech2 进行语音识别的流程
Deepspeech2 模型,其主要分为3个部分:
- 特征提取模块:此处使用 linear 特征,也就是将音频信息由时域转到频域后的信息。
- Encoder:多层神经网络,用于对特征进行编码。
- CTC Decoder: 采用了 CTC 损失函数训练;使用 CTC 解码得到结果。

2.1 Deepspeech2 模型结构
2.1.1 Encoder
Encoder 主要采用了 2 层降采样的 CNN(subsampling Convolution layer)和多层 RNN(Recurrent Neural Network)层组成。
其中降采样的 CNN 主要用途在提取局部特征,减少模型输入的帧数,降低计算量,并易于模型收敛。
2.1.1.1 CNN: Receptive field
假如以 F j F_j Fj 代表 L j L_j Lj 的 cnn 滤波器大小, S i S_i Si 代表 L i L_i Li 的CNN滤波器跳跃长度,并设定 S 0 = 1 S_0 = 1 S0=1。那么 L k L_k Lk