语音识别Overview
- 语音识别输出的数据类型(Token)分类
-
Phoneme:发音的基本单位(类似于音标)
需要一个lexicon记录word与phonemes的对应关系:
-
Grapheme:书写的基本单位
中文:一个字
英文:26个英文单词
无需lexicon的映射关系 -
word:词
不同语言的词汇都非常的多
-morpheme:有意义的基本单位(长度在word和grapheme之间)
例如unbreakable的morepheme可以拆分成:“un” “break” “able” 三个morepheme
但是morpheme的获得比较麻烦,需要语言学家或者统计的方式获得
目前这四种输出的占比为:可以看出用grapheme和phoneme的占据了70%以上
2. 语音识别的输入
通常语音识别的输入可以看成长度是T,维度是d的向量集合。
如下图:
对于一段声音信号:首先会经过一个window(25ms)得到一个向量,再经过采样、(39-dim)MFCC或者(80-dim)fbank:
- ASR深度学习模型介绍
- LAS(listen、attend、spell)
- CTC(Connectionist Temporal Classification)
- RNN-T(RNN Transducer)
LAS
LAS:由三个部分组成Listen、Attend、Spell
- Listen相当于一个编码器,编码器可以由RNN、CNN、Self attention组成。
通常还有有一些下采样的手段,比如Truncated self-attention是在一个范围内进行attention。
- Attend:
这里的attention与之前用的attention并没有什么区别,
match的方式常见的有Dot-product:
h,z分别经过一个矩阵进行transform在进行dot product得到一个a。
对于不同的h经过match后的结果,在经过一个softmax得到c,c就是decoder的输入。
- Spell:
根据attention得到的c作为输入,再经过一个RNN网络进行译码:
- 训练过程:
这里的训练过程大体与分类问题一致,将预测的结果通过交叉熵之后再进行反向传播。其中的一个trick是Teacher Forcing, 因为decoder在预测一个输出的时候需要上一个的结果,因此必须保证上一个预测结果是正确的,才能保证此输出是正常的,因此引入了一个Teacher Forcing,强制输入的是上一个的正确输出。
CTC
因为一个窗口的语音信号非常的短(10ms),很有可能这段acoustic features包含的信息非常少,因此ctc加入了一个空符号代表一个不知道该输出什么。
目前CTC通常用在decoder中,其主要解决的问题是输入的音频特征与输出token的对齐问题alignment。
CTC的问题:CTC的decoder的每个输出是独立地,并且只输入了一个向量。
解决CTC出现的两个问题,提出了RNA模型,其实就是将decode的output用RNN连接起来,添加了输出与输出之间的依赖性。
RNN-T
与RNA最大的不同就是,可以当输入一个h的时候可以持续的输出output直到结束。
例如“th”就只有一个发音但是却有两个字母。
此外为了方便训练RNN-T在output之上又加入了一层RNN,去忽略产生为空的output