• 【笔记】DLHLP


    Connectionist Temporal Classification (CTC)

    CTC可以用于线上实时地语音识别,编码器用的是单向的RNN,解码是用MLP来预测文字分布。
    编码器将语音输入(x^i)编码成(h^i),MLP再对它乘上一个权重,接上Softmax,得到词表V大小的概率分布。
    但有时候当前的语音输入可能并不能对应实际的文本token,所以预测要额外多一个为空的类别,表示模型不知道要输出什么。

    CTC中没有使用下采样,所以输入和输出的序列长度都是T。
    模型预测完后要进行后处理,一是把重复的token合并,二是把空类别去掉,得到最终的预测序列。

    CTC的这种预测方式,会让它的数据标注变得很难,因为要确保刚好每个输入声音特征都对应一个正确的token。而标注语料的不足,会直接影响模型评测的表现。
    此外,一个序列正确的标注方式又可以存着很多种,造成标注多标准问题。这也加大标注数据选择的困难。

    由此采用的方法是穷举所有的可能的标注去训练。在数据集充足的情况下,CTC的效果还是不错的。

    CTC模型的问题主要在,每个MLP的解码器工作是独立的。它可能会遇到一个奇怪的问题。
    比如语音数据部分前三帧都在发音c,第一个隐层(h^i)解码出是c后,后面两个隐层就无须再解码出c了。
    但由于它们是独立工作的,后面的解码部分不知道前面解码的是什么,所以第二个可能解码成空或c,第三个也可能解码成空或c。
    但如果编码器是足够深的RNN,它也可能在编码过程中考虑这种前后关系的依赖,让第一个输出隐层包含更多关于c的信息,而后面两个隐层包含更多关于空类别的信息。

    Recurrent Neural Aligner (RNA) and RNN Tansducer (RNN-T)

    RNA:RNA是一个介于CTC和RNN-T的过渡模型,针对CTC独立解码问题,把MLP换成了RNN。

    RNN-T:可以输出多个token。比如要输出th,CTC只能先输出t,然后在下一个时间点解码输出h,而RNN可以输入一个隐层,预测多个tokens。
    不过,RNN-T与CTC一样会遇到训练数据难标注,标注多标准的问题。对此也是穷举所有可能的标注给模型训练。

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

    这里的另一个RNN实际上扮演的角色是一个语言模型LM。它只看token输出。我们可以用大量的文本语料去训练这个RNN,再和编码器一起去做训练。
    这样一来,我们就能确保接上语言模型之后的RNN-T的输出不会有空类别,这样对训练数据的标注就会容易许多。

    Neural Transducer

    CTC,RNA和RNN-T都是每次只读一个声学特征,这样效率很低。
    Neural Transducer做了一个改变,用注意力机制来允许模型一次能读很多个声学特征。

    首先我们会让声学特征通过编码器产生隐层输出,再对一个窗口的小范围隐层做注意力后,再输出给解码的RNN。
    若窗口大小内信息已经用完了,解码的RNN就会输出空类别。接下来我们再移动窗口,对下一个窗口内的隐层重复刚才的操作。

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

    Monotonic Chunkwise Attention (MoChA)

    MoChA能动态地调整移动窗口的距离。它用的是一个类似注意力机制的模块来做这个调整的操作。这个模块输入(z^0)和隐层(h^1),输出yes/no,表示要不要把窗口开头放在此处位置。
    如果不要,就往右移动窗口,再检查下一个位置的隐层(h^2)。一旦确定放置窗口,就对窗口内的隐层向量做注意力,解码出的token不会包含空类别。

    各模型的总结对比

  • 相关阅读:
    vscode 自动换行 关闭
    QGIS geojson 矢量操作 稀释 抽稀 压缩 边界抽稀
    vscode 关闭烦人的 tooltip 提示
    sql函数汉字转拼音
    sql 排名函数
    客户端文件下载 download.js
    Oracle 创建 DBLink 的方法
    RDLC分组序号
    sql server中使用函数验证身份证号码是否合法
    oracle导出数据库exp时报错,ORA12154 TNS: 无法解析指定的连接标识符
  • 原文地址:https://www.cnblogs.com/yanqiang/p/13267172.html
Copyright © 2020-2023  润新知