MENU

Human Language Processing——RNA&RNN-T&MochA

July 27, 2020 • Read: 3185 • Deep Learning阅读设置

CTC 每个时间步进行的解码是 independent 的,这样的设定能够简化模型,但却不是很合理。事实上,实际应用中的序列,往往前后 token 都是有约束关系的。为了达到比较好的识别效果,在 CTC 的输出之后,通常需要再经过一个 Language Model 进行后处理。因为本质上来说,Language Model 得到的就是前后 token 之间的转化概率,Language Model 的引入弥补了 CTC 中时间步之间独立假设的缺陷。那能不能不用 Language Model,抛弃时间步独立假设呢?

答案是:可以!这就是 RNA 模型所做的事情

RNA

谷歌的学者发论文很喜欢玩取名的梗,这个模型与核糖核酸 RNA 同名。RNA 是 Recurrent Neural Aligner 的缩写,它是一个介于 CTC 和 RNN-T 的过渡模型,针对 CTC 独立解码问题,把 MLP 换成了 RNN

CTC 或者 RNA 的缺陷在于,这两种模型都是输入一个 vector,输出一个 token。然而,在实际的语音识别任务中,却可能存在输入一个 token,需要输出多个 token 的情况

RNN-T

RNN Transducer 就是为了克服 CTC 和 RNA 输入一个 vector,只输出一个 token 的问题而设计的

RNN-T 在解码过程中是如何确保输入一个隐层,输出多个 token 的呢?输入一个 $h^t$,RNN-T 会决定要产生一个 "t"。这个 "t" 会被放到另一个 RNN 中(下图深蓝色节点),输出的隐层会放回 RNN-T 的解码器中作为隐层和之前的 $h^t$ 输入,来产生新的输出 "h"。再反复一次。由于那另一个 RNN 看到过 "h" 了,就会输出新的东西。这个新东西再与之前的 $h^t$ 输入 RNN-T,可能会得到一个空类别。而另一个 RNN 会无视掉这个空类别,把之前输出 "h",与下一个隐层 ht+1 输入到 RNN-T 得到的新输出 "e"

Neural Transducer

前面的 CTC、RNA 在解码阶段,都是输入一个 vector,输出一个 token,是 1v1 的输入 - 输出方式; RNN-T 是输入一个 vector,输出多个 token,是 1vN 的输入 - 输出方式;那么有没有可能输入多个 vector,也输出多个 token 呢,即采用 NvN 的输入 - 输出方式。 答案是,可以! 这就是 Neural Transducer 的思路

Neural Transducer 的改进主要是在解码的输入端。它不再是输入一个 vector,而是输入 W 个 vector,经过 attention 计算后,得到解码的输入,如下图所示。首先我们会让声学特征通过编码器产生隐层输出,再对一个窗口的小范围隐层做注意力后,再输出给解码的 RNN。若窗口大小内信息已经用完了,解码的 RNN 就会输出空类别。接下来我们再移动窗口,对下一个窗口内的隐层重复刚才的操作

窗口大小要如何设计呢?Neural Transducer 做了实验发现,没有注意力时,窗口一长,结果就会很糟糕。但用了注意力后,窗口大小又没那么重要。它尝试了各种计算注意力的方法,有 DOT 和 MLP,甚至还有 LSTM-ATTENTION。它把注意力权重读进 LSTM 中去,通过 LSTM 来考虑前一个时间步的注意力的位置

MochA

CTC、RNA、RNN-T、Neural Transducer 都有一个相同的问题,就是 $\phi$。因为我们在数据标注的时候很难插入 $\phi$。例如 "好棒" 这个词,他有可能是 "$\phi$ 好 $\phi$ 棒 $\phi$",也有可能是 "好 $\phi\phi\phi$ 棒","好 $\phi\phi$ 棒 $\phi$" 等等。18 年提出的一个新的模型 MochA 就解决了这个问题

MochA 全称为 Monotonic Chunkwise Attention,相比于 Neural Transducer,它最大的改进在于输入的 W 个 vector,不再是固定的,而是浮动的。也就是说,输入 W 个 vector 的起点和终点,是通过网络学习出来的。具体来说,这个网络输入 $z^0$ 和隐层 $h^1$,输出 yes/no,表示要不要把窗口开头放在此处位置。如果不要,就往右移动窗口,再检查下一个位置的隐层 $h^2$。一旦确定放置窗口,就对窗口内的隐层向量做注意力,解码出的 token 不会包含 $\phi$。因为在输入浮动的情况下,事实上已经能够学习到输出 - 输入间的依赖关系,没有必要再引入 $\phi$

模型总结

Last Modified: April 20, 2021
Archives Tip
QR Code for this page
Tipping QR Code
Leave a Comment