当前位置: 首页 > news >正文

自然语言处理(NLP)中的迁移学习

Transfer Learning in NLP

迁移学习(Transfer Learning)无疑是目前深度学习中的新热点(相对而言)。在计算机视觉领域,它已经应用了一段时间,人们使用经过训练的模型从庞大的ImageNet数据集中学习特征,然后针对较小的数据针对不同的任务对其进行进一步的训练。但是,在NLP中,迁移学习主要限于使用预训练的单词嵌入(这大大改善了基线)。最近,研究人员正在努力将整个模型从一项任务转移到另一项任务,这就是本文的主题。

Sebastian Ruder和Jeremy Howard也许是第一个通过其提出的ULMFiT方法,在NLP中的应用了迁移学习方法,该方法超越了所有最新的文本分类技术。

紧接着,OpenAI 在几个NLP任务上扩大了他们的想法,并超越了SOTA。

在2018年NAACL上,获得最佳论文奖的是介绍ELMo的论文,该论文是一种新的词嵌入技术,与ULMFiT背后的思想非常相似,该技术来自位于UWash的AllenAI和 Luke Zettlemoyer小组的研究人员。

在本文中,我将讨论所有这些新工作以及它们之间的相互关系。让我们从Ruder和Howard的引领潮流的架构开始。

用于文本分类的通用语言模型微调

《Universal Language Model Fine-Tuning for Text Classification》

用于文本分类(或任何其他受监督的NLP任务)的大多数数据集都非常小。这使得训练深度神经网络非常困难,因为深度神经网络倾向于过度拟合这些小的训练数据,并且在实践中不能很好地概括。

在计算机视觉领域,在庞大的ImageNet语料库上对任何模型进行预训练,是近些年的趋势。这比随机初始化好得多,因为该模型可以学习一般的图像特征,然后可以将其用于任何视觉任务(例如字幕或检测)。

Howard和Ruder从这个想法中得到启发,提出了一个bi-LSTM模型,该模型在一般的语言建模(LM)任务上进行训练,然后在文本分类上进行微调。原则上讲,这会很好地执行,因为该模型将能够使用从生成式预训练中获得的语 言语义知识。理想地,可以从任何源任务(source task)S到目标任务(target task)T进行此迁移。作者使用LM作为源任务,因为:

  • 它能够捕获语言的长期依赖long-term dependencies
  • 它有效地合并了层级hierarchical关系
  • 它可以帮助模型学习情绪sentiments
  • LM很容易获得大数据语料库

正式地,“ LM引入了一个假设空间H,该假设空间H对于许多其他NLP任务应该是有用的。”

对于体系结构,他们使用当时的SOTA: AWD-LSTM(应该是一个多层的双向LSTM网络,没有注意力模块,详参Salesforce Research的论文中的详细信息)。该模型在WikiText-103语料库上进行了训练。

训练完通用LM后,可以进行一些微调,将其按原样用于多个分类任务。为了进行这种微调和后续分类,作者提出了3种实现技巧。

区分性微调 Discriminative fine tuning:在LM的微调阶段(针对目标任务),不同的学习速率用于不同的层。这样做是因为这些层捕获了不同类型的信息。

斜三角学习率 Slanted triangular learning rates (STLR):学习率首先线性增加,然后在切割后逐渐降低,即“短暂增加 short increase”和“长时间衰减 long decay”。这类似于积极的余弦退火学习策略,现在很流行。

相关文章:

  • IEEE Latex模版踩雷避坑指南
  • 每日一题《leetcode--117.填充每个结点的下一个右侧结点指针||》
  • 基于transformers框架实践Bert系列6-完形填空
  • C++进程间通信 消息队列
  • STEP 7-MicroWIN SMART
  • TalkingData数据统计的力量
  • 短信平台-平台群发短信
  • 用户接入和认证技术
  • Sql语法3
  • 【芯片验证方法】
  • 大数据技术分享 | Kylin入门系列:基础介绍篇
  • MindSpore实践图神经网络之环境篇
  • Nacos 2.x 系列【12】配置加密插件
  • 【二叉树】:LeetCode:100.相同的数(分治)
  • Spring-注解
  • [nginx文档翻译系列] 控制nginx
  • 08.Android之View事件问题
  • 3.7、@ResponseBody 和 @RestController
  • CSS 三角实现
  • Effective Java 笔记(一)
  • Java精华积累:初学者都应该搞懂的问题
  • mysql常用命令汇总
  • PHP那些事儿
  • react 代码优化(一) ——事件处理
  • Service Worker
  • spring + angular 实现导出excel
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • Zsh 开发指南(第十四篇 文件读写)
  • 大整数乘法-表格法
  • 老板让我十分钟上手nx-admin
  • 目录与文件属性:编写ls
  • 温故知新之javascript面向对象
  • 用Visual Studio开发以太坊智能合约
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • # linux 中使用 visudo 命令,怎么保存退出?
  • # 利刃出鞘_Tomcat 核心原理解析(二)
  • #14vue3生成表单并跳转到外部地址的方式
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • #每天一道面试题# 什么是MySQL的回表查询
  • (C#)一个最简单的链表类
  • (day18) leetcode 204.计数质数
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第6节 (嵌套的Finally代码块)
  • (苍穹外卖)day03菜品管理
  • (二)pulsar安装在独立的docker中,python测试
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (十) 初识 Docker file
  • (转)shell调试方法
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .form文件_一篇文章学会文件上传
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .net MVC中使用angularJs刷新页面数据列表
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调