本文为雷锋字幕组编译的技术博客,原标题 Introducing state of the art text classification with universal language models,作者为 Jeremy Howard and Sebastian Ruder。
翻译 | 翟修川 程添杰 整理 | 凡江
这篇文章向零基础同学介绍我们最新的论文,和以前的方法相比,该论文展示了如何采用更高的精度和更少的数据自动地进行文档分类。我们将使用简单的方式解释几种方法:自然语言处理;文本分类;迁移学习;语言模型以及如何将这些方法有机结合。如果你已经对自然语言处理和深度学习很熟悉,那么你可以直接跳转到自然语言分类网页获取更多的技术链接。
现在,我们发布了「面向文本分类的通用语言模型微调」的论文(以下简称为ULMFiT:https://arxiv.org/abs/1801.06146),预训练的模型和完整的 Python 源代码。在 2018 年计算语言协会年会上,该论文得到了行业内的评议并受邀演讲。相关的链接,包括对于该方法深入探讨的视频,所有用到的 Python 模块,预训练的模型以及训练你自己模型的脚本,请参考我们的 NLP 分类页面(http://nlp.fast.ai/category/classification.html)。
与之前的文本分类方法相比,该方法有着明显的提升,所有的代码和预训练模型允许任何人利用这种新方法更好的解决如下问题:
查找与法律案件相关的文件;
识别垃圾邮件,机器人和让人反感的评论;
分类某种产品正面和负面的评论;
按政治倾向分类文章;
…...还有其他更多的问题。
采用通用语言模型的最新文本分类介绍
那么,这项新技术究竟做了什么呢?首先,让我们想浏览一下论文的概要部分,看看它说了什么,然后在文章的其他部分,我们逐步解析和学习它的准确含义:
迁移学习以及对计算机视觉产生了极大的影响,但是现有的自然语言处理方法仍然要求从头开始特定任务的修改和训练。我们提出了一种有效的迁移学习算法可以应用于任意的自然语言处理任务,并且引入对微调语言模型至关重要的方法。我们的方法在六种分类任务上优势明显,可以在大多数数据集上将错误率降低 18-24%。此外,这种方法仅仅使用 100 个有标签的样本,实现的性能可以媲美从头开始训练 100 倍以上数据达到的性能。
自然语言处理(NLP)是计算机科学和人工智能的一个领域,它指的是使用计算机来处理自然语言。自然语言是指我们每天都在交流使用的语言,比如英语或者中文,而不是专业语言,比如计算机代码或者音乐符号。自然语言处理应用广泛,比如搜索,个人助手,提取总结,等等。总体而言,自然语言处理具有挑战性,因为我们在写代码的时候使用的语言并不适合自然语言的细微差别和灵活性。你可能遇到这些有限的场景而感到尴尬,比如尝试和自动电话应答系统交流,或者和像 Siri 这样能力有限的早期的对话机器人。
在过去的几年,我们已经看到了深度学习大举进入以前计算机鲜有成就的领域。深度学习不是要求程序员定义好的一组固定规则,而是使用神经网络直接从数据中学习大量的非线性关系。最值得注意的是深度学习在计算机视觉上的成功,例如 ImageNet 竞赛上图像分类的快速发展。
正如这篇的纽约时代杂志文章广泛讨论的,在自然语言处理领域,深度学习也有一些成功,例如自动翻译。成功的自然语言处理任务有一个共同点就是使用大量的有标签数据可用于模型训练。但是,到目前为止,这些应用仅限于那些能够收集和标记庞大数据集并且能够拥有长时间在计算机集群上处理的机构。
奇怪的是,在分类这个领域,深度学习在自然语言处理仍然面临很大挑战,而在这个领域深度学习在计算机视觉却成绩斐然。这是指将事物(例如图片或文档)分组(例如猫 vs 狗,或正面 vs 负面,等等)的问题。大量现实世界中的问题主要是分类问题,这就是为什么例如深度学习在 ImageNet 上的成功导致了许多的商业应用。在自然语言处理上,当前的方法能够很好的识别,比如,当一部电影的评论是证明或者负面的,这就是一个情感分析的问题。然而,一旦事物变得模糊,模型就会混乱,因为通常没有足够的标记数据可供学习。
我们的目标是解决以下两个问题:(1)在没有大量数据或者算力的情形下解决 NLP 问题(2)使得 NLP 分类问题更容易。事实证明,我们两个(Jeremy 和 Sebastian)从事于能够解决这些问题的领域——迁移学习。迁移学习指的是,基于一个已经训练好的针对某一特定问题的模型(例如基于 Imagenet 的图片分类模型),来解决另一个相似的问题。一种常见的迁移学习方法是对原模型进行微调(例如把 CT 扫描结果分类为癌变的和没有癌变的——这是 Jeremy 实现的一个迁移学习应用,他据此创建了 Enlitic 公司)。因为微调后的模型不需要从头开始训练,较不使用迁移学习的模型而言,它通常能够使用更少的数据和算力来达到较高的准确率。
较为简单的迁移学习只使用单层的参数(这被称为嵌入),这在近些年十分流行,例如谷歌的 word2vec 嵌入。然而,实践中完整的神经网络模型包含很多层,因此只在单层使用迁移学习并没有触碰到问题的本质。
问题是,为了解决 NLP 问题,我们应该从哪里进行迁移学习呢?对这个问题的回答落在了 Jeremy 的手里。当时他的朋友 Stephen Merity 发布了 AWD LSTM 语言模型,这个模型较先前的语言建模方法有巨大的改进。语言模型是一个用于预测一句话中的下一个单词是什么的自然语言处理模型。例如,如果你的手机键盘能够预测你输入的下一个单词是什么,它就正在使用一个语言模型。语言模型很重要,因为一个能够较好地预测你即将要说的话的语言模型,通常具备很多的常识(例如,「I ate a hot」->「dog」;「It is a very hot」->」weather」),同时它也需要对语法、语义和其他自然语言成分有深刻的理解。而这恰恰就是我们在阅读和分类一个文件时,所下意识使用的知识。
在实践中我们发现,这种模式的迁移学习具备一些特点,使其能够成为自然语言处理领域迁移学习的一般方法:
能够处理不同大小、数量和标记类型的任务
使用相同的模型结构和训练过程
不需要认为的特征工程和预处理
不需要额外的域内文件或标记
采用通用语言模型的最新文本分类介绍
这种想法已经有人尝试过了,但是需要数百万的文件才能达到较好的性能。我们发现,通过更聪明地微调我们的语言模型,就能做的更好。特别地,我们发现,如果我们能够控制模型训练的速度,并对预训练模型进行更新,使其不会遗忘它先前学习的特征,从而模型能够更好地适应新的数据集。让我们感到惊喜的是,我们发现这个模型甚至能从非常有限的样本中学习。在一个二元的文本分类问题中,我们发现,仅使用 100 个有标记样本(以及 50000 个无标记样本),就能达到和使用 10000 个有标记样本从头开始训练一样的效果。
另一个重要发现是,我们能够使用任何大型语言的语料库来创造一个通用的语言模型。这意味着我们能够针对任何特定的语料库进行微调。我们决定使用 Stephen Merity 的 Wikitext 103 数据集,该数据集为一个经过预处理过的英文维基百科的较大子集。
自然语言处理的研究主要集于英语,在其他的语言上训练模型会遇到相对应的困难。一般来说,非英语语言的公开数据集的数量很少。如果你想要在像泰语这样的语言上训练一个文本分类模型,你无疑需要自己搜集数据。在非英语语言上搜集数据,通常意味着你需要自己标注数据,或者找到标注者来处理它们,就像 Amazon Mechanical Trurk 雇佣了很多说英语的标注者做众包服务那样。
有了 ULMFiT,我们就能更容易地训练非英语语言的文本分类模型,我们唯一需要的就是维基百科(维基百科现在支持 301 种语言),以及少量的能够被手动标记的文件,或者额外可选的非标记文件。为了让建模更容易一些,我们即将发布一个 model zoo,里面包含了很多语言的预训练模型。
我们已经发现了,在相同的设定下,这种方法在很多不同的任务中表现良好。除了文本分类之外,还有很多重要的自然语言处理问题,例如序列标记和自然语言生成,这些都是我们希望 ULMFiTz 在将来能够帮助处理的问题。在完成了这些领域的实验和建模之后,我们会更新这个页面。
迁移学习的成功,以及基于 Imagenet 的预训练模型的易获得性,已经彻底改变了计算机视觉领域。很多人,包括创业者、科学家和工程师在内,正在使用微调后的预训练模型来解决涉及计算机视觉的很多重大问题,包括提高非洲的作物产量和建造用于分类乐高积木的机器人。现在,相同的工具在 NLP 领域也出现了,我们希望类似的爆炸性增长在这个领域也能出现。
尽管我们已经展示了最先进的文本分类结果,为了充分利用 NLP 迁移学习,还有很多工作要做。在计算机视觉领域,已经有很多重要的文章深度分析了迁移学习。特别地,Yosinski 等人试图回答「深度神经网络中的特征可迁移性」问题;Hub 等人研究了「为什么 ImageNet 适合迁移」;Yosinski 甚至建立了一个可视化工具箱来帮助实践者更好地理解他们模型中的特征(见下面的视频)
如果你在一个新的问题或数据集上尝试了 ULMFiT 模型,我们十分高兴能够听到这个消息!访问深度学习论坛(deep learning forums),告知我们进展如何(如果在建模过程中遇到了问题,务必让我们知晓)。
原文链接:http://nlp.fast.ai/classification/2018/05/15/introducting-ulmfit.html
NLP领域的C位课程,斯坦福CS224n正在AI慕课学院持续更新中,无限次免费观看!
▼▼▼