RNN-T和CTC的区别?

1. 概率建模

1.1 对于ctc:

k为标签k \in \overline{Y}

不同于CTC将直接将h(k,t)联合建模:h(k,t)=\exp(f_t^k)

k标签的条件概率为:
Pr(k \in \overline{ Y} | t) = \frac{h(k,t)}{ \sum_{k'\in \overline{ Y}} h(k',t) }

1.2 对于RNNT:

定义输出概率分布为h(k,t,u)=\exp(f_t^k + g_u^k)
Pr(k \in \overline{{Y}} | t,u) = \frac{h(k,t,u)}{\sum_{k' \in \overline{\mathit{Y}} }h(k,t,u)}
整个标签k的计算从只依赖于x_t,到同时依赖于x_ty_u。而且,基于x_ty_u,RNNT预测的标签概率为y_{u+1}或者\phi

2. 前向后向计算

2.1 对于RNNT:

前向后向计算主要用于对已知序列y的概率进行求解

rnnt 路径计算

定义:
y(t,u) = Pr(y_{u+1}|t,u) \\ \phi(t,u) = Pr(\phi|t,u)

\alpha (t,u) = \alpha (t-1,u) \phi(t-1,u) + \alpha (t,u-1) y(t,u-1)

2.2 对于CTC

\alpha_t(s) \overset{def}{=} \sum_{\pi \in N^T:\\ \mathit B(\pi_{1:t})=\mathit l_{1:s}} \prod _{t'=1}^Ty_{\pi_t}^t

来自于满足\mathcal B(\pi_{1:t})=\mathit l_{1:s}条件的序列,例如,对于3时刻(\pi_{1:3})到A标(l_{1:2})签对应的序列来自的序列可通过下图规则计算,对应的多条路径

ctc 计算路径

具体形式化为:

\alpha_{t}(s)=\left\{\begin{array}{lc} \bar{\alpha}_{t}(s) y_{l_{s}^{\prime}}^{t} & \text { if } l_{s}^{\prime}=b \text { or } l_{s-2}^{\prime}=l_{s}^{\prime} \\ \left({\bar\alpha}_{t}(s)+\alpha_{t-1}(s-2)\right) y_{l_{s}^{\prime}}^{t} & \text { otherwise } \end{array}\right.

其中\bar{\alpha}_{t}(s)定义直接能行的跳转,包括本字符和前一字符,其中前一时刻为t-1l^{\prime}l插入blk)中的ss-1为:
\bar{\alpha}_{t}(s) \stackrel{\text { def }}{=} \alpha_{t-1}(s)+\alpha_{t-1}(s-1)
初始化为:
\begin{array}{l} \alpha_{1}(1)=y_{b}^{1} \\ \alpha_{1}(2)=y_{1}^{1} \\ \alpha_{1}(s)=0, \forall s>2 \end{array}

3. 总结

3.1 从条件概率角度:

RNN-T联合前一标签输出和前一时刻的特征输出来决定这一时刻的标签概率;

而CTC只基于这一时刻的特征输出标签概率。

3.2 从转移规则来讲:

RNN-T在t,u的转移要不:来自于(前一特征t-1)的这一标签u转移为空标签的概率;要不来自于(这一特征时刻)的前一标签u-1转移到非空标签(u的概率;

而CTC则的特征转移是固定来自于前一时刻,只有标签s的转移。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容