将迁移学习用于文本分类 《 Universal Language Model Fine-tuning for Text Classification》
本文发表于自然语言处理领域顶级会议 ACL 2018
原文链接
特别说明:笔记掺杂了本人大量的个人理解,以及口语化的语言,由于本人水平有限,极有可能曲解原文的意思,各位看官随意看看,切莫当真~
摘要
迁移学习在图像领域大放异彩,可是在NLP领域却用途寥寥,这是因为现有的NLP模型都与迁移学习不兼容,每次更新任务都需要重头开始训练模型,否则就会导致模型习得的语言特征灾难性地丢失。本文深知迁移学习才是NLP研究的新方向,故本文提出了一个新型的可以用于所有NLP任务的“超级模型”——ULMFiT !!!!!!! 经过严密实验,本文提出的ULMFiT模型吊打一切现有NLP分类模型,牛得一批!!!!!
模型介绍
假设我们有源任务TsTs,我们想把它迁移到任意一个目标任务TtTt上去,并且我们希望这种迁移效果尽可能的要好,最好我们只要针对源任务TsTs训练一次模型,然后一辈子就靠这个模型打天下,它能适用于全世界所有NLP任务,人们就一劳永逸啦,哈哈哈哈!
有了上述的宏伟理想,我们就要开始朝它努力了啊!
所以我们的模型必须要考虑到NLP任务的方方面面,这样才能打遍天下无敌手,所谓的“长文本语义依赖问题”,“各种粒度的语义分析”啊等等问题,都得考虑到,都是小菜一碟!
我们的模型分为两部分,其一就是一个语言模型。该模型是在一个大型的通用语料库上训练的,因为我们致力于做出一个通用的模型,所以我们的语料库大到你无法想象,反正就是超级大就对了,能够胜任NLP的所有任务! 等该模型训练好之后,我们再对其进行微调就可以让其去解决不同的特定领域的问题啦!哈哈哈!!
说了那么多,我们的模型是啥呢? 没错!当然是目前最先进的AWD-LSTM模型啦!(什么?不知道这模型是啥?百度啊?还指望我解释?!吔屎啦你!)
用通用的大到你无法想象的语料库训练完最先进的AWD-LSTM模型之后,我们接下来该做啥呢?没错!就是对该通用模型进行微调,然后让其适应于特定任务!那么该怎么微调呢? 我们有两个独门秘笈:
Discriminative fine-tuning(为了让秘笈看上去更神秘就不翻译了)
具体而言, 就是为我们的模型的每一层分配不同的学习率, 参数更新时, 各层按照各自的学习率进行更新. 此处作者提出了一个技巧, 先通过只调整最后一层的参数确定一个合适的学习率, 然后往前的每一层都使用后一层学习率的2.6分之一倍.
(我也不知道为啥这么做效果会变好,原文也没说,看来独门秘笈果然是高深莫测我也不知道为啥这么做效果会变好,原文也没说,看来独门秘笈果然是高深莫测)Slanted triangular learning rates(不翻译,理由同上)
具体而言,是一种新型的学习率更新方式,由于采用该方式学习率的变化图形会像一个“三角形”一样,所以该秘笈的名字里也带了“triangular”。如图所示:
其中横轴是模型的迭代次数,纵轴是学习率。具体公式如下:
其中TT是模型的迭代次数
cut_frac=学习率增长的迭代次数迭代的总次数cut_frac=学习率增长的迭代次数迭代的总次数(上图中为2001600=0.1252001600=0.125)
cutcut是学习率增长和下降的分界点(上图中为200)
ratioratio为学习率最大值和最小值的差值
ηmaxηmax为学习率的最大值
ηtηt为模型迭代到第t次时的学习率(注:这些公式的数值是我根据上图方便读者理解从图中用肉眼读出来的,与原文实验无关)。
使用独门秘笈调整完咱们的通用模型之后是不是就万事大吉了呢?当然没有这么简单,要知道,本文的模型,牛逼到你无法想象!
我们接下来要将通用模型应用到特定的分类任务上,那么我们还得针对特定任务对模型增加两个全连接层,这俩全连接层都进行了normalization和dropout,激活函数采用Relu。最后再将这俩层接一个softmax的输出层,输出各个类别的概率就OK啦!
最后注意! 咱们的整个流程中,只有最后的俩全连接层和输出层的参数是从零开始学习的!
还有一个问题,咱们的牛逼模型(AWD-LSTM)与最后俩全连接层咋连接呢?
考虑到文本分类问题中,每个句子内真正对分类有帮助的词语只有极少部分,所以我们必须充分的提取文本的信息才能达到比较好的效果,所以我们将牛逼模型(AWD-LSTM)的隐含层最终状态的输出hThT作为我们全连接层的输入,这样就够了吗?
当然不够!
小小的hThT当然不能充分提取出句子的所有信息,我们要对其进行充分的提取,所以我们将其进行各种pool操作,max_pool,mean_pool,一起上!怎么凶猛怎么操作!直到把GPU的显存全部塞满为止!最后将这些pool操作提取的向量和hThT一起给concat起来,就得到了我们全连接层的输入:
对最后全连接层的调参将极大的影响到我们的最终效果
因为如果调参过于狂野的话, 会导致我们牛逼模型(AWD-LSTM)习得的特征被灾难性地遗忘, 相当于前功尽弃。而如果我们过于调参过于细致的话, 算法的收敛速度又会大幅下降。这可咋办呢?别慌!我们还有秘笈!
Gradual unfreezing(不翻译,理由同上)
具体而言, 就是开始调参的时候,将除最后一层以外所有层的参数都给冻结 (就是设置参数不可更新), 然后再一步步向前一层解冻.
将迁移学习用于文本分类 《 Universal Language Model Fine-tuning for Text Classification》的更多相关文章
- 论文笔记 - Noisy Channel Language Model Prompting for Few-Shot Text Classification
Direct && Noise Channel 进一步把语言模型推理的模式分为了: 直推模式(Direct): 噪声通道模式(Noise channel). 直观来看: Direct ...
- 万字总结Keras深度学习中文文本分类
摘要:文章将详细讲解Keras实现经典的深度学习文本分类算法,包括LSTM.BiLSTM.BiLSTM+Attention和CNN.TextCNN. 本文分享自华为云社区<Keras深度学习中文 ...
- 用于文本分类的RNN-Attention网络
用于文本分类的RNN-Attention网络 https://blog.csdn.net/thriving_fcl/article/details/73381217 Attention机制在NLP上最 ...
- 深度学习之文本分类模型-前馈神经网络(Feed-Forward Neural Networks)
目录 DAN(Deep Average Network) Fasttext fasttext文本分类 fasttext的n-gram模型 Doc2vec DAN(Deep Average Networ ...
- 论文分享|《Universal Language Model Fine-tuning for Text Classificatio》
https://www.sohu.com/a/233269391_395209 本周我们要分享的论文是<Universal Language Model Fine-tuning for Text ...
- 用tensorflow迁移学习猫狗分类
笔者这几天在跟着莫烦学习TensorFlow,正好到迁移学习(至于什么是迁移学习,看这篇),莫烦老师做的是预测猫和老虎尺寸大小的学习.作为一个有为的学生,笔者当然不能再预测猫啊狗啊的大小啦,正好之前正 ...
- AI:深度学习用于文本处理
同本文一起发布的另外一篇文章中,提到了 BlueDot 公司,这个公司致力于利用人工智能保护全球人民免受传染病的侵害,在本次疫情还没有引起强烈关注时,就提前一周发出预警,一周的时间,多么宝贵! 他们的 ...
- 基于深度学习的文本分类案例:使用LSTM进行情绪分类
Sentiment classification using LSTM 在这个笔记本中,我们将使用LSTM架构在电影评论数据集上训练一个模型来预测评论的情绪.首先,让我们看看什么是LSTM? LSTM ...
- 2.keras实现-->深度学习用于文本和序列
1.将文本数据预处理为有用的数据表示 将文本分割成单词(token),并将每一个单词转换为一个向量 将文本分割成单字符(token),并将每一个字符转换为一个向量 提取单词或字符的n-gram(tok ...
随机推荐
- 软阈值迭代算法(ISTA)和快速软阈值迭代算法(FISTA)
缺月挂疏桐,漏断人初静. 谁见幽人独往来,缥缈孤鸿影. 惊起却回头,有恨无人省. 拣尽寒枝不肯栖,寂寞沙洲冷.---- 苏轼 更多精彩内容请关注微信公众号 "优化与算法" ISTA ...
- uboot移植spi驱动
记录一下在uboot内移植spi驱动的过程 芯片:freescale Mpc8308 uboot版本:u-boot-2009.11-rc1.2 需求:我们需要在uboot下通过spi配置一个时钟芯片( ...
- Java并发包线程池之ForkJoinPool即ForkJoin框架(二)
前言 前面介绍了ForkJoinPool相关的两个类ForkJoinTask.ForkJoinWorkerThread,现在开始了解ForkJoinPool.ForkJoinPool也是实现了Exec ...
- 解决Vue编译和打包时频繁内存溢出情况CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
解决Vue编译和打包时频繁内存溢出情况CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 如上图所示:频繁出现此 ...
- web前端之es6对象的扩展
1.属性的简洁表示法 2.属性名表达式 表达式作为对象的属性名 3.方法的 name 属性 例如:函数的name 属性,返回函数名. 4.Object.is() ES 比较两个值是否相等,只有两个运算 ...
- JavaScript箭头函数(Lambda表达式)
箭头函数也叫lambda表达式 据说其主要意图是定义轻量级的内联回调函数 栗有: 1 var arr = ["wei","ze","yang" ...
- React——相关工具概述
Create a New React App Use an integrated toolchain for the best user and developer experience. This ...
- MySQL数据库备份之xtrabackup工具使用
一.Xtrabackup备份介绍及原理 二.Xtrabackup的安装 1.在centos7上基于yum源安装percona-xtrabackup软件 [root@node7 ~]# yum -y i ...
- Linux自动获取IP地址 重启不会消失
网络设置 root用户登录 编辑 /etc/sysconfig/network-scripts/ifcfg-eth0 将ONBOOT=no 改为 ONBOOT=yes 并保存 重启network ...
- Django之model详解
Django中的页面管理后台 Djano中自带admin后台管理模块,可以通过web页面去管理,有点想php-admin,使用步骤: 在项目中models.py 中创建数据库表 class useri ...