欢迎关注公众号:DeepL Newer

MENU

Human Language Processing——Alignment

August 3, 2020 • Read: 772 • Deep Learning阅读设置

相较于HMM、CTC和RNN-T,LAS在计算$P(Y|X)$时,是直接计算的,不存在对齐的问题

训练的时候,是找一个最优的模型参数,来让$P(\hat{y}|X)$越大越好。而测试解码的时候,则是用Beam Search来遍历所有可能的$Y$,来让$P(Y|X)$越大越好

对于CTC和RNN-T,它们额外的需要对齐操作。我们需要让状态ab做一些重叠,或插入一些空字符,使其长度变得和输入的序列特征数一致,才能计算$P(Y|X)$。但是,CTC和RNN-T只能计算某一种对齐方式的概率,而难以计算产生某一个声学特征的概率,怎么办呢?我们可以借鉴HMM的做法,把所有可能的对齐方式都加起来。像这样$P(Y|X) = \sum P(h|X)$

那我们要怎么穷举所有可能的对齐方式,然后把所有的对齐方式加起来?怎么训练?HMM用的是向前算法,而CTC和RNN-T用的是梯度下降。对于很多个对齐方式加起来的概率结果,我们要怎样算梯度呢?当模型训练好了,又要怎么做推断呢?

HMM,CTC 和 RNN-T 要做的对齐有相似的地方,也有不同。我们假设输入有6个声学特征向量,输出是三个以英文字母为最小单位的tokens,"c", "a", 和"t"。虽然实际中不会用字符为最小单位,但这里我们只是为了方便比较。对于HMM,它们为隐变量状态。我们需要对cat分别做一些重复,变成 ccaaat 或者 caaaat等等。而对于CTC,它有两种选择,一个是重复,另外一个是加上空类别,变成 c∅aatt 或者 ∅ca∅t∅等等。对于RNN-T,它要加上T个∅。它的运作是每次解码器输出一个∅的时候,它就读下一个声学特征。因此它需要输出6次∅,才能把所有的声学特征读完。变成c∅∅∅a∅∅t∅ 或者 c∅∅a∅∅t∅∅等等。但对于LAS来说,它完全不需要考虑对齐的问题

对于HMM而言,相当于要对每个声学特征向量都标注一个状态。它每一步都要做一个选择,是要向右走还是向右下走,来保证对齐的结果合法。它只考虑走到右下角终点的所有路径。对于一直往右、没走到右下终点的路径,是非法的

CTC和HMM不一样在,它多了一个空类别。这会让它的对齐算法变得很不一样

它每一个位置的动作选择是往右,或者往右下走,或者是往右下走"日"(即越过∅跳到下一个token)

如果你是先产生了∅,你可以往右走选择重复∅,也可以往右下方走选择下一个token。但你不能往右下走"日",跳过下一个token,走到∅上去,这是不合法的

如果出现连续两个一样的token,就不能右下走"日"到下一个token。因为如果产生两个一样的token连在一起,按照CTC处理的规则,它会自动把相同的token合并。这样就不能保证长度对齐了

CTC对齐的最后终点有两个,可以是最后一个token,也可以是它后面加∅

RNN-T的对齐方式是需要把 T 个 ∅ 插在 cat 中间。cat中,我们有4个位置可以选择插入。最终t后面,要保证至少有一个∅。因为产生∅代表要看下一个声学特征向量。所以最终结束的时候,一定会结束在解码输出∅,刚刚好看完最后一个声学特征向量。但在中间就不一定要有∅。因为RNN-T和CTC很大不一样在,给一个输入,它可以连续产生好几个输出

当前位置,你可以选择向右走插入∅,或者垂直向下走选择当前token。为了保证最后一步落在∅处,我们多挖了一个格子,限定最后一步只能向右走

于是,我们可以走出如图的路径。但是在最后一步我们要确保走到右下角,把所有的token都走完。最后一步走到中间是不合法的

如果我们用隐马尔可夫链来可视化三种模型的对齐方式,就可以直观地看到他们的关联

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