原文:https://distill.pub/2017/ctc/

考虑语音识别。我们有一个音频剪辑和相应转录本的数据集。不幸的是,我们不知道文本中的字符如何与音频对齐。这使得训练语音识别器比乍看起来要困难。没有这种对齐,我们就无法使用简单的方法。我们可以设计一个规则,比如一个字符对应十个输入。但是人们的语速不同,所以这类规则总是可以打破的。另一种选择是手动对齐每个字符在音频中的位置。从建模的角度来看,这样做效果很好,我们可以知道每个输入时间步长的基本事实。然而,对于任何合理大小的数据集,这都是非常耗时的。这个问题不仅仅出现在语音识别中。我们在其他许多地方也能看到。从图像或笔画序列中识别笔迹就是一个例子。视频中的动作标签是另一个。
CTC理解

连接主义时间分类(CTC)是一种不知道输入和输出之间的对齐的方法。正如我们所看到的,它特别适合语音和手写识别等应用。

CTC理解

CTC理解

  1. X Y长度变化
  2. X Y 比例变化
  3. 不知道X Y 的对齐

CTC算法克服了这些挑战。对于给定的X,它给出了所有可能Y的输出分布。我们可以使用这个分布来推断可能的输出,或者评估给定输出的概率。

算法

CTC算法可以为给定X的任意Y指定一个概率。计算这个概率的关键是CTC如何考虑输入和输出之间的对齐。我们将从这些对齐开始,然后展示如何使用它们来计算损失函数和执行推断。

对齐

CTC算法是无对齐的——它不需要输入和输出之间的对齐。然而,要得到给定输入的输出的概率,CTC的工作方式是将两者之间所有可能对齐的概率相加。为了理解损失函数最终是如何计算的,我们需要理解这些对齐是什么。

要激发CTC对齐的特定形式,首先考虑一种朴素的方法
假设输入长度为6,Y= [c, a, t]。对齐X和Y的一种方法是为每个输入步骤分配一个输出字符并重复折叠。

CTC理解

这种方法有两个问题。

  1. 通常,强迫每个输入步骤都与某个输出对齐是没有意义的。例如,在语音识别中,输入可以有一段没有相应输出。
  2. 我们无法生成一行中包含多个字符的输出。考虑对齐[h, h, e, l, l, l, o]。折叠重复将生成helo而不是hello。

为了解决这些问题,CTC为允许的输出集引入了一个新的令牌。这个新令牌有时称为空白令牌ϵ,它与任何东西都不对应,只是从输出中删除。
CTC允许的对齐长度与输入的长度相同。我们允许任何对齐后映射到Y合并重复和删除ϵ令牌
CTC理解

如果Y连续有两个相同的字符,然后一个有效对齐它们之间必须有一个ϵ。有了这个规则,我们就可以区分折叠为“hello”的对齐和折叠为“helo”的对齐。
让我们回到长度为6的输出[c, a, t]。下面是一些有效对齐和无效对齐的示例。

CTC理解

CTC对齐有几个值得注意的特性。首先,X和Y之间允许的对齐是单调的。如果我们前进到下一个输入,我们可以保持相应的输出不变,或者前进到下一个。第二个特性是X与Y的对齐是多对一的。一个或多个输入元素可以对齐到单个输出元素,但反之则不行。这意味着第三个性质:Y的长度不能大于X的长度

损失函数

CTC对齐为我们提供了一种从每个时间步的概率到输出序列的概率的自然方法。

CTC理解
CTC理解
使用CTC训练的模型通常使用递归神经网络(RNN)估计每个时间步长概率CTC理解
RNN通常工作得很好,因为它考虑了输入中的上下文,但是我们可以自由地使用任何学习算法,只要给定输入的一个固定大小的切片,就可以生成输出类上的分布。
如果我们不小心,CTC的损失可能是非常昂贵的计算。我们可以尝试直接的方法,计算每个对齐的得分,并将它们都加起来。问题是可能有大量的对齐。对于大多数问题来说,这太慢了。幸运的是,我们可以用动态规划算法更快地计算损失。关键的观点是,如果两个对齐在同一步骤达到了相同的输出,那么我们就可以合并它们。
CTC理解
未完。。。

其他:

https://www.jianshu.com/p/e073c9d91b20
一文读懂CRNN+CTC文字识别
https://zhuanlan.zhihu.com/p/43534801

相关文章: