RNN-T语音模型记录
RNN-T 模型最后一层的输出是一个 4-D 的 tensor,维度是 (N, T, U, C)
, 其中
-
N
: batch size。数值大小: 一般是几十 -
T
: encoder 的输出帧数。数值大小:一般是好几百。 这里T 可理解为输入的feature帧数,实际可能是做了降采样后的帧数T -
U
: decoder 的输出帧数。数值大小:几十至上百。 RNN-T输入一帧feature可以输出多个字符,这里U 即可理解为 需要生成的U个字符(包括空字符) -
C
: vocabulary size。数值大小:几百至上千
所以,RNN-T 训练时,所需的内存正比于 N
, T
, U
, C
这 4 个数的乘积 NTUC
。
训练 CTC 或者 attention-based 模型时,所需的内存一般与 NTC
或者 NUC
成正比。
见 https://mp.weixin.qq.com/s/bgJHwHp0PyFy0pWGVWvv0w
模型训练阶段 encoder decoder 都会训练,解码识别时 只需要用到encoder的输出。
RNN-T结构如下:包括一个encoder:比如是conformer, 一个decoder/predice network:比如是Embedding + Conv1d, 一个joint network:接收encoder_out和decoder_out计算损失loss
encoder_out:维度(N, T,C) ,
decoder_out:维度(N, U, C),
joint_out:维度(N, T, U, C), RNN-T模型最后一层的输出。
然后使用pruned_loss = k2.rnnt_loss_pruned(logits=logits,symbols=y_padded, ranges=ranges, termination_symbol=blank_id,
boundary=boundary, reduction=reduction,)