参考自李宏毅课程-人类语言处理
三、BERT和它的家族-ELMo,BERT,GPT,XLNet,MASS,BART,UniLM,ELECTRA等
1. How to pre-train
上一部分是介绍怎么用pre-trained model做一些NLP相关的任务,那么怎样得到这个pre-trained model。
最早的一种pre-train的方法就是利用翻译的任务去train一个encoder和decoder,这个encoder就是我们想要的pre-trained model。用翻译的任务来做是因为翻译的时候需要考虑上下文信息,因此每个token对应的输出也是考虑上下文的,然后用这些输出输入到decoder可以得到正确的翻译说明,这些输出包含了每个token的语义。但是这样做的话,就表示需要去训练这个翻译任务的encoder,需要很多成对的翻译数据,成本非常大。
因此,不需要标注数据的方法进行pre-train,称作self-supervised learning提出,这就是unsupervised learning,LeCun希望人们改口称为self-supervised learning。因为它的本质是用输入的一部分去预测输入的一部分,是自监督的。下图是有监督和自监督的区别:
2. Predict next token
那么怎么做能提取到输入序列的特征,最常见的一种做法是predict next token。输入w1希望模型预测出w2,再输入w2希望模型预测出w3,以此类推。但是设计模型的时候,不要让模型看到答案,否则模型直接copy输入,学不到任何东西。把这个输入wiw_iw