Transformer原本是为机器翻译设计的编码-解码(Encoder-Decoder)结构。在序列分类任务中,主要利用的是Transformer的Encoder模块来获取输入序列的特征表示,而不需要Decoder模块,主要有以下原因:
- 解码模块主要用来生成目标序列,而分类任务只需要判别整个源序列的类别,不需要生成目标序列,所以不需要Decoder。
- Encoder模块可以充分学习输入序列的上下文语义特征,利用[CLS]标记可以获取整个序列的向量表示,已足以判断类别。
- Decoder对于分类任务而言是冗余的,会增加计算量和模型复杂度。
- 一些研究表明仅使用Transformer Encoder模块也能达到很好的序列分类效果,甚至超过RNN等其他模型。
- 一些预训练语言模型如BERT就是仅使用Transformer Encoder堆叠的结构,去掉了Decoder,但效果很好。
- 直接使用Encoder输出给线性分类层,构建一个单向Transformer模型对序列分类任务够用,简单高效。
综上,使用单向的Transformer Encoder而不用Decoder,可以减少计算资源,降低模型复杂度,并能获得状态优异的序列分类效果,所以更适合序列分类任务。这也使得Transformer模型被更广泛地应用到NLP的各种下游任务中。
标签:transformer,分类,Decoder,Transformer,Encoder,模块,decoder,序列 From: https://www.cnblogs.com/gao-ning2000/p/17704176.html