前言:
初识别seq2seq是在AIIA网络流量预测竞赛中,赛题要求根据历史流量信息预测未来95天小时粒度的流量信息。通过调研,把任务归到seq2seq问题上,由于没有序列预测经验,只取得了前十的成绩。这是一个encoder输出长度固定的场景,不同于经典的翻译场景。翻译场景中的decoder output的输出长度是可变的。比赛过去有一个月了,心里一直有一个疑问,encoder-decoder在输出固定长度序列的场景下,较普通框架,到底好在哪里?直到在做文本序列标注调研时,看到A Bi-model based RNN Semantic Frame Parsing Model for Intent Detection and Slot Filling 这篇文章,其中的槽值填充也是seq2seq。本文对比了普通框架和encoder-decoder框架的效果,并对原因进行了阐释。
encoder-decoder框架与普通框架的区别和联系:
1)encoder decoder框架与普通框架实验结果对比
下图可以看到,encoder-decoder比普通框架有不到1%的性能提升。
-
2)encoder-decoder优于普通框架原理解释
作者也对此进行了解释,encoder-decoder框架解决输出长度不固定的问题,不需要alignment。另外,encoder-decoder复杂度高于普通框架,所以取得了更好的效果。
2)进一步的理解
作者采用意图识别和槽值填充联合训练的方式。用其中一个任务encoder阶段的隐含来作为另一个任务decoder阶段的输入。encoder-decoder的两个任务计算如下:
普通框架的计算原理如下:
对比发现,encoder-decoder框架较普通框架,多了St这个变量。该变量表示t时刻decoder的隐层输出。也就是说参变量是encoder的隐含层和decoder的隐含层,比普通框架(只有encoder)多了一个decoder隐含层。实际上,encoder距离输出更远,我们也可以看作是多了encoder隐含层这个与输入更近的信息。
总结:
对于输出长度不固定的场景,只用encoder是解决不了的;对于输出长度固定的场景,如AIIA网络流量预测,用seq2seq只是为了增加精度,这时候输出函数的因变量是encoder的隐含层和decoder的隐含层,比普通框架(只有encoder)多了一个隐含层。补充:普通框架只有一个隐含层。模型复杂度提高了,这种复杂度提高,其实还包含像残差网络中对更早信息的利用,从而带来了精度的提升。