Transformer
by 熠熠发光的白
Transformer是Sequence-to-sequence的model,输出长度由model决定
通过把语音转化为中文,翻译成有办法阅读的文字
台语转化普通话是有可能实现的,例如YouTube上的乡土剧
问题:倒装可能较难实现
Test-to-Speech Synthesis
文本转语音
Seq2seq for Chatbot
训练大量对话,往往特质化特殊模型可以得到比seq2seq更好的模型,但这里直接采用正式模型即可
Seq2seq for syntactic parsing(句法的分析)
Seq2seq for Multi-label Classification
一个物体归属于多个class,这种情况同样直接使用seq2seq来解决
Seq2seq for Object Detection
通过把物体框出来交给机器进行标记
起源
14年的seq2seq model,但是现在比较有名的仍然是著名的transformer架构
Encoder
可以通过self-attention,RNN,CNN做到input一排向量,输出一排向量
在Transformer中使用的就是self-attention
先经过self-attention,然后经过FC层,得到block的输出
transformer利用了残差的思想,用到了residual connection,然后再经过normalization(layer normalization)
再经过FC层,然后和output加起来,得到结果,再进行一次normalization
Decoder
1. Autoregressive
输入一段声音,输出一段文字。语音经过encoder变为vector,
在操作时,先是进入一个begin符号(one-hot),然后突出一个vector,长度和字典池中的一样,其中数值的总和是一,对应的分数最高的那个位置是输出的结果。
从结构上可以看到,decoder和encoder区别并不大,在最后经过linear和softmax
可以看到,MHA那里变成了Masked Multi-Head Attention,不同的是这次所有输入元素只考虑其右边的条件而不考虑其左边的条件
增加stop-token,来进行结尾
Decoder-Non-autoregressive(NAT)
和AT不同的是,NAT一次进去4个begin,出来四个字,直接结束
为了了解到输出的长度,创建另一个predictor来预测输出长度,或者是给出大量的sequence,并将end后的输出全部忽略。
优点:一步出结果,非常的方便也可控,但是NAT事实上要比AT的效果要差得多,因为multi-modality,后面会看到
Encoder到Decoder的传递
在上图中有个MHA和ADD&Norm模块,这个被称作Cross Attention,两个输入来自encoder,一个来自decoder。
在encoder的数据读入后,进行decoder的操作,先是吃一个begin,经过self-attention(MASK),然后经过如下图所示的操作,即cross attention,最后得到结果。两个输入指的是k和v,一个是q
Training part
在每一次decoder产生的时候,都是进行了一次classification,希望最后的cross entropy越小越好。(4个字的时候应该有五个输出,因为有个end字符,这也需要进行学习)。在decoder训练的时候,会直接把正确的答案输入到decoder里,这被称为teacher forcing(使用正确答案作为输入)
TIPS(训练的小技巧)
-
Copy Mechanism
-
chat-bot
在进行介绍的时候通过复制来完成对话,例如自我介绍之后复制对方的名字进行打招呼
-
summarization
https://arxiv.org/abs/1704.04368 输入document,输出summary
-
Pointer Network
最早的复制模型
-
copy mechanism在seq2seq中的应用
https://arxiv.org/abs/1603.06393
-
Guided Attention
要求机器领导attention,有固定的方式,来强迫attention有固定的变化
-
相关词:Monotonic Attention,Location-aware attention
Beam Search
每次找分数最高的token进行输出(greedy decoding)
这个时候就可以采用beam search来判断全局最优的解法
但是beam search并不是最优解,有的时候,beam search可能会导致一些问题(见参考文献)
关于beam search的具体理解可以查看这个
https://zhuanlan.zhihu.com/p/82829880
通俗易懂,不多赘述(注意最后不需要进行softmax过滤)
在遇到optimization无法解决的问题时,可以使用RI(Reinforcement Learning)
https://arxiv.org/abs/1511.06732
To learn more: NAT Sequence Generation
在NAT训练中,很有可能会出现训练结果十分模糊的情况(有的物体朝左,有的物体朝右)
这个是因为output之间没有进行关系处理,在使用PixelRNN和CGAN就能解决这些问题
一个小总结
Vanilla NAT
在每一个input的地方都能预测output vector的位置。
fertility:用reinforce来预测fine-tune
knowledge distillation:在训练小数据的时候通过大数据训练出的结果直接作为训练结果来训练小数据
Noisy Parallel Decoding(NPD)
1.建立部分sequence样本
2.生成sequence
3.由autogressive模型打分
可以看到,用了fertility以后效果相当的显著
NAT的后续改进
Iterative Refinement/Insertion-based/Insertion+Delete/CTC-based(以后可能会看到)
Iterative Refinement
在第一次decoder之后再迭代进行decode,最后得到结果
可以添加一些noise在第一次迭代的结构y0上,或者是把yt和yt+1交换
Mask-Predict
基于bert的基础上进行的操作
在第一次结果后选取较为垃圾的结果,再次使用mask token来替代进行decode
这个方法的performance是相当好的
Insertion Transformer
优点是可以看到周围的文字,进行训练
CTC
语音辨识,比较难遇到multi-modality的问题,但是还是会输给LAS,而且不能进行refined工作
Imputer(CTC+Mask-predict)
把output出的空位用Mask进行替代,然后进行迭代计算,也可以设置block,在block中强制必须有字
同样的,CTC也能用在文字生成上,1811.04719,2004.07437
结果非常好
Knowledge Distillation in NAT
后面是作业部分了,明天再看。在家里学习效率也忒低了