来源:feedly blog

编译:Bing

编者按:关于NLP领域的迁移学习我们已经介绍过了,fast.ai也有很多相应的讨论。今天给大家展示一个在亚马逊评论数据集上实现的任务,即将评论分为积极或消极两类。

GitHub地址在这里:github.com/feedly/ml-demos/blob/master/source/TransferLearningNLP.ipynb,感兴趣的同学可以自己动手试试。

  • 相关阅读:《概览迁移学习在NLP领域中的应用》

PS:阅读原文,领取复现代码!

什么是迁移学习?

得益于迁移学习,计算机视觉领域的发展非常迅速。有着几百万个参数的高度非线性模型通常需要大型数据集的训练,经过几天甚至几周的训练,也只能分辨猫狗。

有了ImageNet挑战赛后,每年各种队伍都会设计出不同的图像分类器。我们发现这类模型的隐藏层可以捕捉图像的通用特征(例如线条、形式、风格等)。于是,这样就不用每次都为新的任务重建模型了。

以VGG-16模型为例:

它的结构相对复杂,图层较多,同时参数也很多。论文作者称需要用四个GPU训练三周。

而迁移学习的理念是,由于中间的图层是学习图像一般特征的,所以我们可以将其用作一个大型“特征生成器”!我们可以先下载一个预训练模型(在ImageNet任务上训练了好几周),删去网络的最后一层(全连接层),根据我们的任务进行调整,最后只训练我们的分类器图层。由于使用的数据可能和之前训练的模型所用数据不同,我们也可以花点时间训练所有图层。

由于只在最后一层进行训练,迁移学习会用到更少的标记数据。对数据进行标注非常费时,所以创建不需要大量数据的高质量模型就非常受欢迎了。

NLP中的迁移学习

说实话,迁移学习在自然语言处理中的发展并不像在机器视觉里那样受重视。让机器学习线条、圆圈、方块,然后再用于分析还是比较容易设计的。但是用来处理文本数据似乎不那么容易。

最初用来处理NLP中的迁移学习问题的是词嵌入模型(常见的是word2vec和GloVe),这些词嵌入表示利用词语所在的语境来用向量表示它们,所以相似的词语有相似的词语表示。

然而,词嵌入只能表示大多数NLP模型的第一个图层,之后我们仍需要从零开始训练所有的RNN/CNN等图层。

对语言模型进行微调

今年年初,Jeremy Howard和Sebastian Ruder提出了ULMFiT模型,这也是对NLP领域迁移学习的深入尝试。具体可参考论智此前报道的:《用迁移学习创造的通用语言模型ULMFiT,达到了文本分类的最佳水平》。

他们所研究的问题基于语言模型。语言模型是能够基于已知单词预测下一个单词的模型(例如手机上的智能拼写)。就像图像分类器一样,如果NLP模型能准确预测下一个单词,那就可以认为该模型学了很多自然语言组合的规则了。这一模型可以作为初始化,能够针对不同任务进行训练。

ULMFiT提出要在大型语料上训练语言模型(例如维基百科),然后创建分类器。由于你的文本数据可能和维基百科的语言风格不同,你就需要对参数进行微调,把这些差异考虑进去。然后,我们会在语言模型的顶层添加一个分类图层,并且只训练这个图层!论文建议逐渐解锁各个图层进行训练。

ULMFiT论文中的收获

这篇论文最让人惊喜之处就是用非常少的标记数据训练分类器。虽然未经标记过的数据随处可见,但是标记过的数据获取的成本是很高的。下面是对IMDb进行情感分析之后的结果:

只用了100个案例,他们就达到了和用2万个案例训练出的模型同样的错误率水平。除此之外,他们还提供了对模型进行预训练的代码,因为维基百科有多种语言,这使得我们能快速地进行语言转换。除英语之外,其他语种并没有很多经过标记的公开数据集,所以你可以在语言模型上对自己的数据进行微调。

处理亚马逊评论

为了加深对这种方法的理解,我们在另一个公开数据集上试了试。在Kaggle上发现了这个“亚马逊评论情感分析数据集”(地址:www.kaggle.com/bittlingmayer/amazonreviews/home)。它含有400万条商品评论已经相关的情感标签(积极或消极)。我们用fast.ai提出的ULMFiT对亚马逊的评价进行分类。我们发现,仅用1000个案例,模型就达到了在全部数据上训练的FastText模型的表现成果。而用100个案例进行训练,模型也能表现出不错的性能。

如果你想复现这个实验,可以参考notebook:github.com/feedly/ml-demos/blob/master/source/TransferLearningNLP.ipynb,在微调和分类过程中有一个GPU还是很高效的。

NLP中非监督 vs 监督学习

在使用ULMFiT的过程中,我们用到了非监督和监督学习两种方法。训练一个非监督式语言模型很“便宜”,因为你可以从网上找到很多文本数据。但是,监督式模型的成本就很高了,因为需要标记数据。

虽然语言模型可以捕捉到很多有关自然语言组织的信息,但是仍不能确定模型能否捕捉到文本的含义,即它们能否了解说话者想传达的信息。

Emily Bender在推特上曾提出了一个有趣的“泰语实验”:“假设给你所有泰语书籍,没有译文。假如你一点都不懂泰语,你永远不会从中学会什么。”

所以,我们认为语言模型更多的是学习语法规则,而不是含义。而语言模型能做的不仅仅是预测在语法规则上相近的句子。例如“I ate this computer”和“I hate this computer”两句话结构相同,但是一个良好的模型应该会将后者看作是“更正确”的句子。所以我们可以将语言模型看作是学习自然语言句子的架构的工具,从而帮助我们了解句子含义。

想了解更多这方面的话题,可以观看ACL 2018上Yejin Choi的演讲:sites.google.com/site/repl4nlp2018/home?authuser=0

NLP迁移学习的未来

ULMFiT的出现推动了迁移学习在自然语言处理中的发展,同时也出现了其他的微调工具,例如FineTune Transformer LM。我们注意到随着更多更好地语言模型的出现,迁移的效率也在不断提高。

最后再附上ULMFiT的原论文:arxiv.org/pdf/1801.06146.pdf

原文地址:blog.feedly.com/transfer-learning-in-nlp/

获 论智 授权

PS:阅读原文,领取复现代码!(格式为ipynb格式的,需要电脑上查看)

推荐阅读:

一大批历史精彩文章啦

【机器学习】今天想跟大家聊聊SVM
【机器学习】今天详细谈下Soft Margin SVM和 SVM正则化


到底什么方法 训练1000个样本,就能完成400万条评论分类!相关推荐

  1. 花木兰到底好看不,我用Python爬取了几万条评论!

    对于神仙姐姐刘亦菲,估计很多码农都很喜欢,小编也非常喜欢她.从一开始的金粉世家里面的青涩的白秀珠,到天龙八部的神仙姐姐王语嫣,再到仙剑奇侠传里面的赵灵儿,后来挑战四大名捕里面的无情,演技也是越来越好. ...

  2. 《一出好戏》讲述人性,使用Python抓取猫眼近10万条评论并分析,一起揭秘“这出好戏”到底如何?

    视频课程链接:https://edu.csdn.net/course/detail/9348 黄渤首次导演的电影<一出好戏>自8月10日在全国上映,至今已有10天,其主演阵容强大,相信许多 ...

  3. 《一出好戏》讲述人性,使用Python抓取猫眼近10万条评论并分析,一起揭秘“这出好戏”到底如何?...

    黄渤首次导演的电影<一出好戏>自8月10日在全国上映,至今已有10天,其主演阵容强大,相信许多观众也都是冲着明星们去的. 目前<一出好戏>在猫眼上已经获得近60万个评价,评分为 ...

  4. 《预训练周刊》第51期:无重构预训练、零样本自动微调、一键调用OPT

    No.51 智源社区 预训练组 预 训 练 研究 观点 资源 活动 周刊订阅 告诉大家一个好消息,<预训练周刊>已经开启"订阅功能",以后我们会向您自动推送最新版的&l ...

  5. GPT系列:生成式预训练与零样本学习

    GPT系列:生成式预训练与零样本学习 本文的主要参考是李沐老师关于 GPT 系列的解读:GPT,GPT-2,GPT-3 论文精读[论文精读]. 关于BERT和GPT Transformer/BERT/ ...

  6. #今日论文推荐# 西湖大学工学院姜汉卿课题组提出一种全新的微流体操控方法,可实现“样本进结果出”的即时检测

    #今日论文推荐# 西湖大学工学院姜汉卿课题组提出一种全新的微流体操控方法,可实现"样本进结果出"的即时检测 即时检测(Point-of-care technology, POCT) ...

  7. Python计算训练数据集(测试集)中某个分类变量阴性(阳性)标签样本的不同水平(level)或者分类值的统计个数以及比例

    Python计算训练数据集(测试集)中某个分类变量阴性(阳性)标签样本的不同水平(level)或者分类值的统计个数以及比例 目录

  8. DL之DCGNN:基于TF利用DCGAN实现在MNIST数据集上训练生成新样本

    DL之DCGNN:基于TF利用DCGAN实现在MNIST数据集上训练生成新样本 目录 输出结果 设计思路 实现部分代码 说明:所有图片文件丢失 输出结果 更新-- 设计思路 更新-- 实现部分代码 更 ...

  9. 最邻近方法nn_【庖丁解牛】从零实现RetinaNet(七):使用分布式方法训练RetinaNet...

    下列代码均在pytorch1.4版本中测试过,确认正确无误. 如何把nn.DataParallel模式训练代码改为nn.parallel.DistributedDataParallel分布式训练代码 ...

  10. java sql 写入万条数据_如何快速向数据库插1000万数据?4种方法对比,它简单却速度最快

    目录 场景介绍 项目配置 Mybatis为什么慢? JdbcTemplate让我眼前一亮 原生JDBC就是快啊! 存储过程怎么样? 越简单越快 前言 一直有一种说法:批量插入大量数据到MySQL数据库 ...

最新文章

  1. linux系统无法挂载U盘
  2. layui.table.render设置自定义高度高度
  3. 关于C10K、异步回调、协程、同步阻塞
  4. 一个交易平台源码,全源无接口
  5. Java之WeakReference与SoftReference使用讲解
  6. 福建地震局网站被******挂壮阳广告
  7. java打印日期序列,Java GSON-日期格式
  8. Java并发编程之CountDownLatch闭锁
  9. Linux Man手册的使用示例
  10. 【已解决】ModuleNotFoundError: No module named ‘web’的解决办法:
  11. request.getcontextPath() 详解(转)
  12. console.log、toString方法与js判断变量类型
  13. android弹幕控件,可能是目前轻量级弹幕控件中功能最强大的一款
  14. 各种通信接口的简单对比
  15. 行程单批量打印软件(eTerm航空电子客票行程单打印软件)
  16. 移动和嵌入式人体姿态估计(Mobile and Embedded Human Pose Estimation)
  17. C#实现笔记本摄像头调用、拍照 USB摄像头
  18. 肤色冷暖色测试软件_认识你自己|肤色冷暖测试
  19. 往超级表格导入Excel,让数据处理不再繁杂!
  20. 同城滴滴啦啦啦啦啦啦啦啦

热门文章

  1. web移动端常见问题解决方案 (转)
  2. 初了解JS设计模式,学习笔记
  3. CSS hover 改变另外一个元素状态
  4. halcon图像处理的基本思路
  5. KnockoutJS(4)-控制文本和外观绑定
  6. 如何使用UIAutomation进行iOS 自动化测试(Part II)
  7. STM32F407使用MFRC522射频卡调试及程序移植成功
  8. Yum介绍与常见用法
  9. Uvalive 3713 - Astronauts(2-SAT)
  10. 公司内网机器vm ubuntu proxy 设置