ULMFiT和其他算法的比较
上篇介绍了ELMo。ELMo有以下几个步骤:
- 利用LM任务进行预训练,
- 再利用目标领域的语料对LM模型做微调,
- 最后针对目标任务进行最后的训练
ULMFiT一样需要执行上述步骤。它的论文名字(Universal Language Model Fine-tuning for Text Classification)顾名思义就是一个利用LM模型给出的统一的在文本分类方面进行transfer learning的解决方案。
一直以来都有人试图在NLP领域进行transfer learning的尝试,可惜从来都没有像ImageNet在CV里那样成功的案例。也许指望某个特定的方法一统江湖是不可能了,但是总结迄今的研究,显然LM基于其对语言内在结构的学习能力成为主流模型。
下面这张表概括一些近年来寻找NLP领域"ImageNet"的尝试:
项目 | 任务 | 数据 | 模型 |
---|---|---|---|
InferSent | NLI | SNLI | encoder: BiLSTM+Maxpooling |
Conversations | Multitask(Input-response&NLI) | SNLI+Reddit | encoder: DAN/Transformer |
QuickThought | classification | BookCorpus/UMBC corpus | encoder: GRU |
ELMo | LM | WMT11 | Stacked BiLSTM |
ULMFiT | LM | Wiki text | stacked forward&backward LSTM |
ELMo和ULMFiT在任务上给出的答案是语言模型LM; 在数据上虽有不同,但是WMT11和Wiki都同为general text数据,并无本质差别。模型方面二者都选择了LSTM,区别仅在于前者是双向的,后者是独立的两个模型:forward和backward的平均。
看来在预训练任务这方面,ELMo和ULMFiT都把这一票投给了语言模型。
前面的文章介绍过另外两种做transfer learning的模型InferSent和Conversations, 它们走的是解决NLI(和Input-response)任务的路子。直觉上,NLI任务的语义学特性很适合作为产生通用语言features的预训练任务。
QuickThought 比较特殊,它的任务是判断给定的句子是否是相邻的句子,属于经典的classification的问题。
哪一种方法更好,当然要看具体的应用。不过粗略的说,还是可以用土办法大概分析一下。围棋上有个术语叫“手割”,用来判断局部的好坏。就是把对弈双方效率相近的棋子拿掉,那么剩下的效率不同的棋子就是决定优劣的关键。这里也可以用手割的方法来分析一下。
直觉上看第一类(ELMo和ULMFiT)的效果会更好,因为它们除了预训练和在目标任务(包括label)上fine tuning,还包括了在目标语料(不包括label)上fine tuning,比其他两类多出了domain adaptation的步骤。
ELMo和ULMFiT之间来比较,ELMo要更好。原因是ELMo在最终解决目标任务时,需要使用下游的模型,并不是直接的把自己的sentence或者doc embeddings拿出来使用。相反,ELMo只提供了自己的word embeddings给下游的模型。相比ULMFiT,ELMo更加“谨慎”,步子迈的更小,只专心把word embedding给做到极致,下游的模型不操心。它不像其他的方法,直接把压缩好的