摘要: 迁移学习在计算机视觉领域中应用普遍,而NLP领域才刚刚起步。本文介绍了NLP领域中的两种迁移学习方法,分别是与训练的嵌入层及微调模型,嵌入层目前应用较为普遍,但微调模型后来者居上。
在深度学习领域,迁移学习(transfer learning)是应用比较广的方法之一。该方法容许咱们构建模型时候不光可以借鉴一些其它科研人员的设计的模型,还能够借用相似结构的模型参数,有些相似于站在巨人的肩膀上进行深刻开发。本文将讲述如何在NLP领域中更高效地应用迁移学习。网络
今年春天,我 在ODSC East会议上发表了题为 “NLP中的有效迁移学习”的演讲。该演讲展现了预训练的单词和文档嵌入层在训练数据集较小时取得的优异结果,并为将这些技术应用于工程任务中提出了一系列实用建议。此外,感谢[Alec Radford和OpenAI团队的一些出色研究](),使得以前提出的一些建议发生了一些变化。app
为了解释发生变化的缘由,首先回顾一下以前在Indico会议中使用的评估方法,以评估一种新颖的机器学习方法是否适用于工业用途中。机器学习
对于普遍的实际应用,机器学习模型必须对照如下大多数要求检验自身:工具
让咱们看看预先训练好的单词+文档嵌入层如何知足这些要求:性能
在预训练嵌入层之上训练轻量级模型所花费的时间在几秒钟内是可能的,尽管计算预训练嵌入层依赖于基础模型复杂度。学习
预测一样快速,预测与基础模型花费同样的代价。测试
正则化参数和嵌入类型的交叉验证对其是有所帮助的,而且这种操做足够便宜并且不会引入问题。spa
在预训练的单词嵌入层之上应用逻辑回归块仅须要学习100s~1000s的参数而不是数百万的参数,而且模型的简单性意味着它须要很是少的数据就能得到良好的结果。设计
预训练的单词和文档嵌入层一般的表现是“足够好”,但具体任务须要与领域和目标模型相关。3d
这种方法很是快速,而且不会从额外的训练数据中获益。学习线性模型有助于用更少的数据产生更好的结果,但这也意味着模型学习到的输入和输出之间复杂关系的能力也要低得多。
简而言之,使用预训练的嵌入层在计算上花费少,而且在训练数据可用性较低的状况下表现良好,可是使用静态表示对从额外的训练数据得到的增益会受到限制。从预先训练的嵌入层中得到良好的性能须要为给定的任务搜索正确的预训练嵌入层,可是很难预测一个预先训练嵌入层是否可以很好地推广到一个新的目标任务,这就须要经过一次次实验来验证了。
值得庆幸的是,在计算机视觉领域中的相关研究提供了一种可行的替代方案。在计算机视觉领域中,使用预先训练的特征表示已经在很大程度上被“微调”预训练模型而不只仅是学习最终分类层的方法所取代。修改源模型的全部权重,而不是简单地从新初始化和学习最终分类层的权重。随着训练数据可用性的增长,这种额外的模型灵活性开始带来回报。
这种方法的来源基础已有几年历史了——从Yosinski、Clune、Bengio等人在2014年探讨了卷积神经网络(CNN)参数的可迁移性开始,直到最近这个过程才成为广泛的作法。如今,在CNN网络中应用微调方法是很常见的,斯坦福大学计算机视觉课程(CS231N)中将这一过程做为课程的一部分,以及Mahajan等人的2018年论文(“探索弱监督预训练的极限”)代表,当模型性能做为相当重要时,应该始终使用微调来代替预训练的特征。
那么为何天然语言处理领域如此落后呢?在Sebastian Ruder的一篇文章中写道 “NLP的ImageNet时刻已经到来”,他认为形成这个现象的缘由是该领域中缺少用于学习可推广基础模型的既定数据集和源任务。直到最近,天然语言处理领域仍然缺少ImageNet相似的数据集。
然而,在最近的论文中,如 Howard 和Ruder的 “通用语言模型微调文本分类” 和Radford的论文 “经过生成性预训练提升语言理解” 已经证实模型微调最终在天然语言领域中显示出前景。尽管在这些论文中采用的源数据集各不相同,但NLP领域彷佛正在将“语言建模”目标标准化,做为训练可迁移基础模型的首选。
简单地说,语言建模是预测序列中下一个单词的任务。鉴于部分句子“我觉得我会按时到达,但最终____5分钟”,对于读者来讲,下一个单词将是“迟到”的同义词是至关明显的。有效地解决这一任务不只须要理解语言结构(名词遵循形容词,动词有主语和对象等),还须要根据普遍的语境线索作出决策的能力(“迟到”是填写在示例中的空白处,由于前面的文本提供了说话者正在谈论时间的线索。)此外,语言建模具备不须要标记的训练数据这一理想特性,且原始文本对于每个可想象的领域都是丰富的。这两个特性使得语言建模成为学习可泛化的基本模型的理想选择。
然而,语言建模目标并非使NLP模型微调的惟一必要条件。使用 “迁移”模型 代替典型的复现模型(LSTM)也发挥了重要做用。在“经过生成性预训练提升语言理解力”中看到,微调迁移模型的性能与微调复现(LSTM)模型之间存在显着差别。LSTM再也不是序列建模的标准——非循环模型已经在各种任务中表现出强有力的竞争性。
John Miller的博客文章中写道,“当递归模型不须要递归”,暗示LSTM理论上的无限记忆可能实际上并不存在。此外,固定的上下文窗口存储器可能足以解决诸如语言建模之类的任务,而且迁移模型的残余块结构彷佛很适合迁移学习应用程序。简而言之,迁移模型的理论缺点被其优点所抵消,例如更快的训练和预测时间。
鉴于最近的进展,让咱们从新看看微调模型如何知足以前的要求:
虽然与预先计算的特征表示相比计算代价更高,但OpenAI的迁移模型能够在约5分钟内经过GPU硬件在几百个示例中进行微调。
预测所花费的代价也更高,吞吐量限于每秒一位数的文档。在普遍实际应用以前,必须改进预测速度。
在各个任务中使用默认超参数的工做效果很是好,虽然基本交叉验证寻找理想的正则化参数是有益的。
模型微调在低至100个示例的数据量表现与使用与训练嵌入层同样。
领域与任务匹配的问题彷佛比预训练的特征特征表示更少,语言建模目标彷佛学习了适用于语义和句法任务的特征。
使用预先训练的特征表示没法解决的任务,能够经过在足够的训练数据下使用很是复杂的模型解决。随着更多的训练数据变得可用,预训练特征和模型微调之间的差距大大扩大。事实上,微调彷佛一般比从头开始训练更加可取——OpenAI的论文“经过生成式预训练提升语言理解”展现了的最新结果。
虽然它有必定的局限性,但NLP任务的模型微调具备很大的前景,而且已经显示出优于当前使用预训练的文字和文档嵌入层这一最佳实践的明显优点。
Sebastian Ruder总结到:
“在NLP领域中实践迁移学习的时机已经成熟。鉴于ELMo、ULMFiT和OpenAI取得的使人印象深入的实证结果,这彷佛只是时间问题,最终直到预训练的单词嵌入层将被淘汰,这可能会促进在标签数据量有限的NLP领域中开发出许多新的应用程序。王者已逝,新的王者也诞生!”
咱们早期的基准测试证明,对使用预先训练的表示进行微调模型有一个通用的好处。下面是使用咱们的迁移学习基准测试工具Enso得到的最近基准测试的输出示例 。
图中的每一个点表示来自完整数据集的随机子集上的5次试验的平均值+ 95%置信区间。X轴表示可用的标记训练数据点数量,Y轴分别是平均ROC AUC和精度。在拟合以前对训练数据集进行过采样,这些结果是拟合约2500个模型的集合。
微调模型是OpenAI的迁移语言模型的实现,基线模型是在手套词嵌入上训练的交叉验证逻辑回归。尽管存在更强的基线用于比较,可是在该训练数据量下,手套嵌入的平均值对于大多数分类任务来讲是比较好的基线了。后续但愿在将来的基准测试中发布与其余方法的比较,但仍然使人惊讶的是,在只有100个标记的训练样例下,模型微调取得的效果仍优于简单的基线。有关23种不一样分类任务的完整基准测试可在s3下载 。
鉴于这一最近的发展,Indico开源了一个包装类(wrapper),用于OpenAI在迁移模型微调方面的工做。 咱们尝试经过将其打包成易于使用的scikit-learn样式库,使Radford的研究应用更加普遍,后续会讲述如何使用一些简短的代码使用微调来实现对本身任务的改进敬请期待。
本文做者:【方向】
本文为云栖社区原创内容,未经容许不得转载。