将迁移学习用于文本分类 《 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 ...
随机推荐
- STL算法之find
定义 template <class InputIterator, class T> InputIterator find (InputIterator first, InputItera ...
- js的鼠标右键简单菜单
实现点击鼠标右键时出来菜单代码如下: 主要运用oncontextmenu事件,oncontextmenu 事件在元素中用户右击鼠标时触发并打开上下文菜单. <!DOCTYPE html> ...
- CDH 安装的博客地址记录
1. 集群环境配置 https://www.cnblogs.com/yinzhengjie/articles/11019333.html 2. 二进制方法安装 https://www.cnblogs. ...
- python 设计模式之享元(Flyweight)模式
#写在前面 这个设计模式理解起来很容易.百度百科上说的有点绕口. #享元模式的定义 运用共享技术来有効地支持大量细粒度对象的复用. 它通过共享已经存在的对橡大幅度减少需要创建的对象数量.避免大量相似类 ...
- SQL-W3School-函数:SQL LAST() 函数
ylbtech-SQL-W3School-函数:SQL LAST() 函数 1.返回顶部 1. LAST() 函数 LAST() 函数返回指定的字段中最后一个记录的值. 提示:可使用 ORDER BY ...
- 123457---com.twoapp.shuXueYouXi---小学数学口算
com.twoapp.shuXueYouXi---小学数学口算
- HTTP连接详解
- (四)UML之顺序图(时序图)
一.概念 顺序图是交互图的一种形式,它显示对象沿生命线发展,对象之间随时间的交互表示为从源生命线指向目标生命线的消息.顺序图能很好地显示那些对象与其它那些对象通信,什么消息触发了这些通信,顺序图不能很 ...
- 执行spark-shell报错:
执行spark-shell报错: [ERROR] Terminal initialization failed; falling back to unsupportedjava.lang.NoClas ...
- weblogic12.1.3安装
weblogic weblogic12.1.3安装 环境: centos7.5 ip: 192.168.0.94 1.安装jdk 2.安装 weblogic 下载.解压安装包 wls1213_dev. ...