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 训练时,所需的内存正比于 NT , UC 这 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,)
通过所有的alignment对齐,计算RNN-T的损失loss(score)。logits是joint_out的输出,y_padded是标签,
posted @ 2023-05-25 09:52  wieneralan  阅读(157)  评论(0编辑  收藏  举报