今天我们讨论的问题是:输入一个序列,输出一个序列,输出序列的长度由模型自己决定
例如:

seq2seq模型在NLP大语言模型中应用的也很广泛:

但是最好不要所有问题都用seq2seq模型,可以进行专门设计
使用seq2seq的其他场景:
一:文法剖析

二:Multi-label Classification
和Multi class Classification不同,class是指有不同的种类,但是Multi-label Classification是指一个东西可以属于多个种类,这种情况可以用seq2seq硬做

三:object detection

seq2seq架构

下图展示的是encoder所作的事情,这里的block和layer不同,一个block相当于好几个layer所做的事情

但是这里面的transformer中的self-attention不像我们之前讲的那么简单,多了一些residual设计,之后再进行layer normalization,和batch normalization不同,他取同一个特征的所有维度加起来算mean平均值,但是在batch中是取同一个维度的不同feature的数值

总结:block架构

Decoder------Autoregressive

为什么要使用encoder+decoder,要先生成语音特征向量,然后输入完整的语音特征结合人类语料进行上下文预测,而不直接用语音生成文字呢?


具体识别过程:

所以有时decoder会产生错误的输出,但是还是会输出给下一个,会导致一步错步步错呢?
但是这要预测会不会导致第一个字预测结果很差,然后导致一整个句子预测结果都是错的?


关于softmax的作用:


decoder的内部结构:
与encoder相比:

Masked Multi-Head Attention是指什么?每次看哪个内容的输出都看她前面的所有数据,但是不看后面的数据

所以被称为masked self-attention,它的输出是一个一个输出的,一般只考虑左边的东西

但是如果一直这样持续的输出会导致一直输出没有停止的地方,一般我们会输出一个和BEGIN一样的符号作为END

上面我们讲的都是AT模型,还有一种模型是NAT模型,它和AT模型的区别在于AT是一个一个输出,而它是一次性输出
这样引出一个问题,机器是如何知道要输出多长的文字呢?一种是将声音向量输入然后预测输出长度,还有一种是直接给出一个足够长的输出向量,遇到END输出自动结束
这也是self attention带来的改变之一,有了self attention,NAT技术变得热门
NAT的优点有并行时间快,可以控制生产长度,但是它的表现一般没有AT技术好

Encoder和Decoder之间是如何传递信息的呢?



如何训练模型
判断模型训练好坏的效果和分类问题很像:比如一开始我们将机器学习中的"机"用一个向量表示,然后输入BEGIN会预测拥有一系列数值的向量,这个向量会和初始设置的那个向量作cross entropy,最终要努力缩小这个cross entropy
和分类问题很像,相当于每次生成一个文字都做了一次分类问题
但是最终也要产生END的输出,同样做cross entropy

在一开始的时候我们会使用teacher forcing作为我们的输入:也就是用正确答案作为输入
训练seq to seq模型的一些小tips:
1.复制功能,不是所有的自此组合都有意义,也不是所有话都需要机器生成,有时候只需要copy一下:

也可以用这个功能生成摘要
2.Guided Attention
当输入长度太短时,也可能造成部分信息丢失,可以使用**Guided Attention,**该技术对于语音变式和语音合成都相当重要
它的作用就是在机器学习中加入固定的限制
3.Beam Search技术
上一个语音变式我们谈到每次选择分数最高的那个字作为下一个字,但是不是每次都这样选择就可以得到一个最佳路径,同时检索所有路径代价又太大,因此可以使用Beam Search方法:
这个方法有时候有用有时候没用,一般来说只有一个答案的任务使用Beam search效果更好,如果需要创造力效果可能并不好

4.BLEU score
我们训练的时候是生成一个字然后进行对比生成对应的cross entropy,但是这不能直接作为评估指标,一般我们会使用BLEU score作为我们的评估指标,也就是对两个完整的句子进行评分

5.Scheduled Sampling
我们是使用正确的结果进行训练的,这样会产生的一个效果就是测试时出现一个错误的结果模型并不会知道怎么处理,导致一步错步步错,一般的处理方法是在训练的时候页=也加入一些错误的训练资料,参考如下方法:
