来源:新智元

本文共2200字建议阅读6分钟。

本文介绍了面向NLP任务的迁移学习新模型ULMFit,只需使用极少量的标记数据,文本分类精度就能和数千倍的标记数据训练量达到同等水平。

[ 导读 ]在本文中,我们将介绍自然语言处理(NLP)在迁移学习上的最新应用趋势,并尝试执行一个分类任务:使用一个数据集,其内容是亚马逊网站上的购物评价,已按正面或负面评价分类。然后在你可以按照这里的说明,用你自己的数据重新进行实验。在数据标记成本高数量少的情况下,这个通用语言微调模型可以大幅降低你的NLP任务训练时间和成本。

迁移学习模型的思路是这样的:既然中间层可以用来学习图像的一般知识,我们可以将其作为一个大的特征化工具使用。下载一个预先训练好的模型(模型已针对ImageNet任务训练了数周时间),删除网络的最后一层(完全连接层),添加我们选择的分类器,执行适合我们的任务(如果任务是对猫和狗进行分类,就选择二元分类器),最后仅对我们的分类层进行训练。

由于我们使用的数据可能与之前训练过的模型数据不同,我们也可以对上面的步骤进行微调,以在相当短的时间内对所有的层进行训练。

除了能够更快地进行训练之外,迁移学习也是特别有趣的,仅在最后一层进行训练,让我们可以仅仅使用较少的标记数据,而对整个模型进行端对端训练则需要庞大的数据集。标记数据的成本很高,在无需大型数据集的情况下建立高质量的模型是很可取的方法。

迁移学习NLP的尴尬

目前,深度学习在自然语言处理上的应用并没有计算机视觉领域那么成熟。在计算机视觉领域中,我们可以想象机器能够学习识别边缘、圆形、正方形等,然后利用这些知识去做其他事情,但这个过程对于文本数据而言并不简单。

最初在NLP任务中尝试迁移学习的趋势是由“嵌入模型”一词带来的。

实验证明,事先将预先训练好的词向量加入模型,可以在大多数NLP任务中改进结果,因此已经被NLP社区广泛采用,并由此继续寻找质量更高的词/字符/文档表示。与计算机视觉领域一样,预训练的词向量可以被视为特征化函数,转换一组特征中的每个单词。

不过,词嵌入仅代表大多数NLP模型的第一层。之后,我们仍然需要从头开始训练所有RNN / CNN /自定义层。

高阶方法:微调语言模型,在上面加一层分类器

今年早些时候,Howard和Ruder提出了ULMFit模型作为在NLP迁移学习中使用的更高级的方法。

论文地址:https://arxiv.org/pdf/1801.06146.pdf

他们的想法是基于语言模型(Language Model)。语言模型是一种能够根据已经看到的单词预测下一个单词的模型(比如你的智能手机在你发短信时,可以为你猜测下一个单词)。就像图像分类器通过对图像分类来获得图像的内在知识一样,如果NLP模型能够准确地预测下一个单词,似乎就可以说它已经学会了很多关于自然语言结构的知识。这些知识可以提供高质量的初始化状态,然后针对自定义任务进行训练。

ULMFit模型一般用于非常大的文本语料库(如维基百科)上训练语言模型,并将其作为构建任何分类器的基础架构。由于你的文本数据可能与维基百科的编写方式不同,因此你可以对语言模型的参数进行微调。然后在此语言模型的顶部添加分类器层,仅仅对此层进行训练。

Howard和Ruder建议向下逐层“解冻”,逐步对每一层进行训练。他们还在之前关于学习速度(周期性学习)的研究成果基础上,提出了他们自己的三角学习速率(triangular learning rates)。

用100个标记数据,达到用20000个标记数据从头训练的结果

这篇文章得出的神奇结论是,使用这种预训练的语言模型,让我们能够在使用更少的标记数据的情况下训练分类器。尽管网络上未标记的数据几乎是无穷无尽的,但标记数据的成本很高,而且非常耗时。

下图是他们从IMDb情感分析任务中报告的结果:

该模型只用了100个示例进行训练,错误率与20000个示例从头到尾进行完全训练的模型相仿。

此外,他们在文中还提供了代码,读者可以自选语种,对语言模型进行预训练。由于维基百科上的语言多种多样,因此我们可以使用维基百科数据快速完成语种的转换。众所周知,公共标签数据集更难以使用英语以外的语言进行访问。在这里,你可以对未标记数据上的语言模型进行微调,花几个小时对几百个至几千个数据点进行手动标注,并使分类器头适应您预先训练的语言模型,完成自己的定制化任务。

为了加深对这种方法的理解,我们在公共数据集上进行了尝试。我们在Kaggle上找了一个数据集。它包含400万条关于亚马逊产品的评论,并按积极/消极情绪(即好评和差评)加上了标记。我们用ULMfit模型对这些评论按好评/差评进行分类。结果发现,该模型用了1000个示例,其分类准确度已经达到了在完整数据集上从头开始训练的FastText模型的水平。甚至在仅仅使用100个标记示例的情况下,该模型仍然能够获得良好的性能。

所以,语言模型了解的是语法还是语义?

我们使用ULMFit模型进行了监督式和无监督式学习。训练无监督的语言模型的成本很低,因为您可以在线访问几乎无限数量的文本数据。但是,使用监督模型就很昂贵了,因为需要对数据进行标记。

虽然语言模型能够从自然语言的结构中捕获大量相关信息,但尚不清楚它是否能够捕捉到文本的含义,也就是“发送者打算传达的信息或概念”或能否实现“与信息接收者的交流”。

我们可以这样认为,语言模型学到的更多是语法而不是语义。然而,语言模型比仅仅预测语法的模型表现更好。比如,“I eat this computer“(我吃这台电脑)和“I hate this computer”(我讨厌这台电脑),两句话在语法上都是正确的,但表现更优秀的语言模型应该能够明白,第二句话比第一句话更加“正确”。语言模型超越了简单的语法/结构理解。因此,我们可以将语言模型视为对自然语言句子结构的学习,帮助我们理解句子的意义。

由于篇幅所限,这里就不展开探讨语义的概念(尽管这是一个无穷无尽且引人入胜的话题)。如果你有兴趣,我们建议你观看Yejin Choi在ACL 2018上的演讲,深入探讨这一主题。

微调迁移学习语言模型,大有前景

ULMFit模型取得的进展推动了面向自然语言处理的迁移学习研究。对于NLP任务来说,这是一个激动人心的事情,其他微调语言模型也开始出现,尤其是微调迁移语言模型(FineTuneTransformer LM)。

我们还注意到,随着更优秀的语言模型的出现,我们甚至可以完善这种知识迁移。高效的NLP框架对于解决迁移学习的问题是非常有前景的,尤其是对一些常见子词结构的语言,比如德语,经过词级训练的语言模型的表现前景非常好。

怎么样?赶紧试试吧~

参考链接:

https://blog.feedly.com/transfer-learning-in-nlp/

Github相关资源:

https://github.com/feedly/ml-demos/blob/master/source/TransferLearningNLP.ipynb

相关论文:

Universal Language Model Fine-tuning for Text Classification(ULMFiT)

https://arxiv.org/pdf/1801.06146.pdf

干货 | 只有100个标记数据,如何精确分类400万用户评论?相关推荐

  1. AI人工智能标记数据的技术:类型、方法、质量控制、应用

    AI人工智能 标记数据 在人工智能(Artificial Intelligence,简称AI)领域中,标记数据是非常重要的一环.它是指对原始数据进行标记和注释,以便机器学习算法可以理解和利用这些数据. ...

  2. 突发!12306 脱库 410 万用户数据究竟从何泄漏?

    年关了,幺蛾子格外多! 有微博用户称,12306用户登录信息被出售了! 被挂出来售卖的,不仅有用户的姓名和电话,还有身份证.和注册时设置的问题以及问题的答案. 笔者获悉.并打码的泄露出来的用户信息 由 ...

  3. 高考成绩等位分查询2021,干货│如何查询等位分?精确填报志愿必备......

    原标题:干货│如何查询等位分?精确填报志愿必备...... 来源:网信四川自然的恩典 国内外名校学子: 祝全国考生金榜题名 绵阳考生.家长注意! 2019年高考成绩已经公布 分数线也已经划定了 文科本 ...

  4. 放弃手工标记数据吧!斯坦福大学开源弱监督框架

    https://www.toutiao.com/a6668443801553469965/ 手工标记大量数据始终是开发机器学习的一大瓶颈.斯坦福AI Lab的研究人员探讨了一种通过编程方式生成训练数据 ...

  5. 【阿里云产品公测】大数据下精确快速搜索OpenSearch

    2019独角兽企业重金招聘Python工程师标准>>> [阿里云产品公测]大数据下精确快速搜索OpenSearch 作者:阿里云用户小柒2012 相信做过一两个项目的人都会遇到上级要 ...

  6. 13 | 线性排序:如何根据年龄给100万用户数据排序?

    三种时间复杂度是 O(n) 的排序算法:桶排序.计数排序.基数排序.因为这些排序算法的时间复杂度是线性的,所以我们把这类排序算法叫作线性排序(Linear sort).之所以能做到线性的时间复杂度,主 ...

  7. ICML2021 | Self-Tuning: 如何减少对标记数据的需求?

    文 | 王希梅,高敬涵,龙明盛,王建民 源 | THUML 本文介绍ICML2021的中稿论文:Self-Tuning for Data-Efficient Deep Learning,就" ...

  8. 收藏 | 100+篇大数据学习资讯,带你玩转大数据分析!

    2019独角兽企业重金招聘Python工程师标准>>> 深度解析如何挑选适合自己的Hadoop平台 什么是Hadoop,怎样学习Hadoop 分布式文件系统HDFS解析 Hadoop ...

  9. 全球100款大数据工具汇总,入行必备

    全球100款大数据工具汇总,入行必备 1. Talend Open Studio 是第一家针对的数据集成工具市场的ETL(数据的提取Extract.传输Transform.载入Load)开源软件供应商 ...

最新文章

  1. asp.net mysql 读写分离_.NET Core实现分表分库、读写分离的通用 Repository功能
  2. python三大特征六大原则_面向对象程序设计(Object Oriented Programming)的三大特性,六大原则...
  3. php resque 计划任务,PHP-RESQUE - 实现重试
  4. steelray project viewer
  5. 用vector实现二维向量
  6. 华为设备的安全配置console及telnet
  7. 解决No version of NDK matched the requested version编译报错的问题
  8. 性能测试有哪些我们测试员必须要掌握的知识点?
  9. 鸿蒙当中使用WebView报空指针的问题
  10. SAP PS 第9节 合并采购申请、组合WBS之详解
  11. 你知道甲醛的危害有多大吗?
  12. 腾讯大王卡免流手机投屏电视看春晚
  13. Python人脸图像特征提取(HOG、Dlib、CNN方法)
  14. 中国 Open Source Summit 演讲提案征集
  15. java.sql.SQLSyntaxErrorException Unknown column····
  16. 关于STM32仿真ITM调试那些事(STM32+JLINK+KEIL)
  17. 李宁——一切皆有可能
  18. Python 获取视频时长(附代码) | Python工具
  19. 技法:对你的应用添加键盘加速键
  20. Fabric 1.0源代码分析(38) Peer #BroadcastClient(Broadcast客户端)

热门文章

  1. 移动端自动化测试(一)appium环境搭建
  2. 云计算:存储之后,IT江湖之上的新大佬
  3. ORACLE中实现表变量的方法
  4. Lowbit Sum 规律
  5. SlickGrid控件最后一行触数据更新条件
  6. 迈入幸福婚姻殿堂的星座女
  7. 使用模板引擎Trimpath
  8. 李昱:百度产品登录协议介绍
  9. php 调用url field,使用 PHP curl 调用 API,如何传递如下格式的 POSTFIELD?
  10. 基于数组实现循环队列(基于Java实现)