HMM

输入为语音 语音模型 - 图1,希望预测文本语音模型 - 图2,即为语音模型 - 图3
其中,语音模型 - 图4为 Language Model, 语音模型 - 图5为 Acoustic Model (HMM)

HMM 引入隐状态 语音模型 - 图6, 语音对应的音素 (语音最小单位) 由隐状态决定, 隐状态状态转移由之前隐状态决定(上一时刻). 基于此, 音素序列可以看作是由于隐状态转移产生的.

  • 转移概率: 状态转移的概率分布
  • Emission Probability: 由状态产生输出的概率分布 (GMM: 多个高斯分布, 即所以隐状态对应的分布语音模型 - 图7)

上面的架构是 HMM-GMM (后面也有将 DNN 引入, 采用 DNN-HMM 架构)

Alignment: 如何将状态和 acoustic feature 对应起来 (状态数量和 feature 数量是不对应的, 通常来说 feature 数量是多余状态数量的)

CTC(Connectionist Temporal Classification)

decoder 是 liner 映射的 seq2seq

CTC 只有 encoder,选择单向的 encoder 便于做 on-line 语音识别。encoder 的结果直接经过线性层映射之后得到 token 预测。
语音模型 - 图8

模型训练:

  • 每一个 acoustic feature 都必须对应一个 token(只知道 token 如何于 acoustic feature 对应呢?)
    • 自行构造对应关系(并非严格对应),遍历得到所有的 acoustic feature 和 token 的对应关系,所有的都拿来训练
    • 显然 acoustic features 的量是大于真实 token 的,所以需要在 label 插入 unknown 之类的 token

后处理:

  • 输出的 token 经过后处理,去除重复 token 和未知 token(未知 token:1、可能是无法识别的;2、可能无有效语音)
  • 往往需要后面再加一个模型才能得到较好的结果。

不足之处:分类器产生每个输出只考虑了当前的隐状态信息(很容易产生重复的 token)。

RNN transducer

RNA (Recurrent Neural Aligner)

输入和输出一样长(与 CTC 一样)

将 CTC 中的 linear classifier 输出采用 LSTM 这类结构。

RNN-T

输入一个 hidden state 可以输出多个 token

一个 hidden state 可以对应到多个 token 的输出,当输出为指定标志 token 之后才会采用下一时刻的 hidden state 作为输入。

  • 训练的样本构造和 CTC 类似,文本如何和 acoustic features 对应上很难;
  • 输出采用 LSTM 类似结构,上一时刻输出会影响到下一时刻的结果;

LAS (listen, attention and spell)

采用的是 seq2seq 架构(经典的 seq2seq 架构)

Listen语音模型 - 图9其中语音模型 - 图10为 acoustic feature

encoder 可以采用 CNN 也可以采用 RNN,当然也可以 CNN + RNN 以及 self-attention layer

语音采样率很高,所以语音信息时间维度很长,对其进行时域的 down sample 是有必要的
Down Sample methods:

  • CNN:Time-delay DNN(Dialated CNN)
  • RNN:Pyramid RNN,Pooling over time
  • self-attention:分段 self-attention

Attention:self-attention 利用特征向量 语音模型 - 图11与 encoder 的输出 h 进行相似度计算,然后相似度通过 softmax 得到权值,得到的权值对 h 进行加权得到attention 结果 语音模型 - 图12

Spell语音模型 - 图13作为 decoder 的输入,语音模型 - 图14是 decoder 的隐状态(RNN),语音模型 - 图15语音模型 - 图16以及上一时刻的输出结果共同产生下一个隐状态,隐状态通过映射之后得到输出的分布。每次用当前时刻的隐状态语音模型 - 图17去和 encoder 输出 h 计算 self-attention 得到语音模型 - 图18

  • 语音模型 - 图19如何得到?任意的吗?
  • Spell 输出为字符,字符组合形成单词
  • 字符需要进行(束搜索)Beam Search:找到最大概率的输出结果
    • 很像前缀树,训练得到字符之间变化的概率分布
    • 直接贪婪搜索很难得到最大的概率的路径
    • Beam Search 每次保留 B 个最大概率的路径,增大搜寻到最大概率路径的概率
  • 训练时,利用 GT 替代前一时刻的预测输出到后面(teacher forcing,二阶段的目标检测也是如此;很多网络都是采用这种方式,防止之前的结果是错误的影响训练)

Location-aware attention:首先计算得到一个初始的 attention 向量 语音模型 - 图20,然后之后的 attention 将由 hz语音模型 - 图21共同计算得到(采用 addictive attention,只考虑语音模型 - 图22t 时刻之前的值)

不足之处:得到所有输入之后才进行语音转文字(attention 计算时编码了所有时刻的信息)

Neural Transducer

每次输入一个 window 的 RNN-T(一个窗口得到多个输出)

对 hidden state h 进行分窗,对窗内的特征进行 attention (local-aware attention)产生输出,attention 输出作为翻译的输入。

MoChA

window 可以自由移动的 Neural Transducer

与 Neural Transducer 类似,但其希望引入动态窗口,借助一个网络来确定 window 的位置。