NLP领域中更有效的迁移学习方法

摘要: 迁移学习在计算机视觉领域中应用广泛,而NLP领域才刚刚起步。本文介绍了NLP领域中的两种迁移学习方法,分别是与训练的嵌入层及微调模型,嵌入层目前应用较为广泛,但微调模型后来者居上。

在深度学习领域,迁移学习(transfer learning)是应用比较广的方法之一。该方法允许我们构建模型时候不光能够借鉴一些其它科研人员的设计的模型,还可以借用类似结构的模型参数,有些类似于站在巨人的肩膀上进行深入开发。本文将讲述如何在NLP领域中更高效地应用迁移学习。

今年春天,我 在ODSC East会议上发表了题为 “NLP中的有效迁移学习”的演讲。该演讲展示了预训练的单词和文档嵌入层在训练数据集较小时取得的优异结果,并为将这些技术应用于工程任务中提出了一系列实用建议。此外,感谢Alec Radford和OpenAI团队的一些出色研究,使得之前提出的一些建议发生了一些变化。

为了解释发生变化的原因,首先回顾一下之前在Indico会议中使用的评估方法,以评估一种新颖的机器学习方法是否适用于工业用途中。

评估新的机器学习方法

对于广泛的实际应用,机器学习模型必须对照以下大多数要求检验自身:

  • 快速训练
  • 快速预测
  • 需要极少或不需要超参数调整
  • 在训练数据可用性较低时运行良好(100个示例)
  • 适用于广泛的任务及对应的领域
  • 在标记的训练数据上能够很好地扩展

让我们看看预先训练好的单词+文档嵌入层如何满足这些要求:

  • 快速训练
    在预训练嵌入层之上训练轻量级模型所花费的时间在几秒钟内是可能的,尽管计算预训练嵌入层依赖于基础模型复杂度。
  • 快速预测
    预测同样快速,预测与基础模型花费一样的代价。
  • 需要极少或不需要超参数调整
    正则化参数和嵌入类型的交叉验证对其是有所帮助的,并且这种操作足够便宜而且不会引入问题。
  • 在训练数据可用性较低时起作用(100个示例)
    在预训练的单词嵌入层之上应用逻辑回归块仅需要学习100s~1000s的参数而不是数百万的参数,并且模型的简单性意味着它需要非常少的数据就能获得良好的结果。
  • 适用于广泛的任务及对应的领域
    预训练的单词和文档嵌入层通常的表现是“足够好”,但具体任务需要与领域和目标模型相关。
  • 在标记的训练数据上能够很好地扩展
    这种方法非常快速,并且不会从额外的训练数据中获益。学习线性模型有助于用更少的数据产生更好的结果,但这也意味着模型学习到的输入和输出之间复杂关系的能力也要低得多。

简而言之,使用预训练的嵌入层在计算上花费少,并且在训练数据可用性较低的情况下表现良好,但是使用静态表示对从额外的训练数据获得的增益会受到限制。从预先训练的嵌入层中获得良好的性能需要为给定的任务搜索正确的预训练嵌入层,但是很难预测一个预先训练嵌入层是否能够很好地推广到一个新的目标任务,这就需要通过一次次实验来验证了。

计算机视觉中的迁移学习解决方案

值得庆幸的是,在计算机视觉领域中的相关研究提供了一种可行的替代方案。在计算机视觉领域中,使用预先训练的特征表示已经在很大程度上被“微调”预训练模型而不仅仅是学习最终分类层的方法所取代。修改源模型的所有权重,而不是简单地重新初始化和学习最终分类层的权重。随着训练数据可用性的增加,这种额外的模型灵活性开始带来回报。

这种方法的来源基础已有几年历史了——从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个示例)
    模型微调在低至100个示例的数据量表现与使用与训练嵌入层一样。

  • 适用于广泛的任务及领域
    领域与任务匹配的问题似乎比预训练的特征特征表示更少,语言建模目标似乎学习了适用于语义和句法任务的特征。

  • 在标记的训练数据上能够很好地扩展
    使用预先训练的特征表示无法解决的任务,可以通过在足够的训练数据下使用非常复杂的模型解决。随着更多的训练数据变得可用,预训练特征和模型微调之间的差距大大扩大。事实上,微调似乎通常比从头开始训练更加可取——OpenAI的论文“通过生成式预训练提高语言理解”展示了的最新结果。

    虽然它有一定的局限性,但NLP任务的模型微调具有很大的前景,并且已经显示出优于当前使用预训练的文字和文档嵌入层这一最佳实践的明显优势。
    Sebastian Ruder总结到:

“在NLP领域中实践迁移学习的时机已经成熟。鉴于ELMo、ULMFiT和OpenAI取得的令人印象深刻的实证结果,这似乎只是时间问题,最终直到预训练的单词嵌入层将被淘汰,这可能会促进在标签数据量有限的NLP领域中开发出许多新的应用程序。王者已逝,新的王者也诞生!“

NLP模型定位的定量研究

我们早期的基准测试证实,对使用预先训练的表示进行微调模型有一个通用的好处。下面是使用我们的迁移学习基准测试工具Enso获得的最近基准测试的输出示例 。

图中的每个点表示来自完整数据集的随机子集上的5次试验的平均值+ 95%置信区间。X轴表示可用的标记训练数据点数量,Y轴分别是平均ROC AUC和精度。在拟合之前对训练数据集进行过采样,这些结果是拟合约2500个模型的集合。

微调模型是OpenAI的迁移语言模型的实现,基线模型是在手套词嵌入上训练的交叉验证逻辑回归。尽管存在更强的基线用于比较,但是在该训练数据量下,手套嵌入的平均值对于大多数分类任务来说是比较好的基线了。后续希望在未来的基准测试中发布与其他方法的比较,但仍然令人惊讶的是,在只有100个标记的训练样例下,模型微调取得的效果仍优于简单的基线。有关23种不同分类任务的完整基准测试可在s3下载 。

微调:Scikit-Learn 样式模型微调库

鉴于这一最近的发展,Indico开源了一个包装类(wrapper),用于OpenAI在迁移模型微调方面的工作。 我们尝试通过将其打包成易于使用的scikit-learn样式库,使Radford的研究应用更加广泛,后续会讲述如何使用一些简短的代码使用微调来实现对自己任务的改进敬请期待。

本文作者:【方向】
阅读原文
本文为云栖社区原创内容,未经允许不得转载。

推荐阅读更多精彩内容