CTC算法
- 在OCR或语音识别任务中,经常出现不知道从哪里开始对齐
- 比如对
apple
,OCR出aaappppllle这种东西
如果只是简单的去重的话就变成了aple
Connectionist Temporal Classification 算法就是为了解决这种情况的
引入占位符
如这个hello,先把占位符之间去重,然后把占位符去掉
- 要满足重复的元素之间必须要有占位符,如下就是不合法情况(假设长度固定)
所以算法对齐有一下属性(对于一个已经标定好的音频片段,训练该片段我们希望输出的是标定的文本)
- 输入与输出的对齐方式是单调的,即如果输入下一输入片段时输出会保持不变或者也会移动到下一个时间片段
- 输入与输出是多对一的关系
- 输出的长度小于等于输入
模型
- 上面是RNN或其他模型输出的向量,向量中是每个位置对应的每个符号的概率
- 所以对于一对数据(X,Y)来说,我们希望将下面的概率最大化
我们可以发现,对于上面那张图的合法情况非常的多,[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5dSKg9TH-1600284397691)(https://math.jianshu.com/math?formula=he%5Cepsilon%20l%5Cepsilon%20lo%5Cepsilon)]与[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cj0a088c-1600284397692)(https://math.jianshu.com/math?formula=hee%5Cepsilon%20l%5Cepsilon%20lo)]对应的都是“hello”,不过这个可以用动态规划的方法来解决
- 用dfs或bfs的方法前后搜一遍,然后在中间的点概率乘起来,DP式很好求
最后的优化目标是最小化负对数似然