YVES PEIRSMAN作者闫晓雨校对詹荣辉翻译

用spaCy蒸馏BERT模型

本文为大家介绍了用spaCy对BERT进行模型蒸馏,其性能也能接近BERT。

Photo on Blog

序列化和反序列化

迁移学习自然语言处理领域最有影响力的最新突破之一。在其发布不到一年的时间里,谷歌的BERT及其后代(RoBERTa,XLNet等)主导了大多数NLP排行榜。虽然将这些庞大的模型投入生产可能令人头疼,但存在各种解决方案来显著减小其尺寸。在NLPTown,我们成功地应用了模型蒸馏技术来训练spaCy的文本分类器,使其在产品评论的情感分析方面的表现与BERT几乎一样优秀。

最近,自然语言处理的标准方法发生了巨大变化。直到一年前,几乎所有NLP模型都是完全从头开始训练的(通常经过预训练的单词嵌入除外),而如今,最保险的方法是下载诸如BERT这样的预训练模型,并对其进行微调以适应特定的NLP任务。因为这些迁移学习模型已经学习到了大量未标记的文本,所以它们已经获得了许多有关语言的知识:它们了解单词和句子的含义,共指,语法等。令人兴奋的是,像BERT这样的模型具有如此众多的参数,它们相当缓慢且占用大量资源。至少对于某些NLP任务,调BERT就像杀鸡用牛刀一样。

大锤模型

大多数迁移学习模型都很庞大。BERT的基本模型和多语言模型都具有12层,每层隐藏层的神经元大小为768,并具有12个自注意力头——总参数不少于110M。BERT-large拥有高达340M的参数。尽管如此,BERT与更近期的模型相比还是相形见绌,例如具有665M参数的FacebookXLM和具有774M的OpenAI的GPT-2。显然,朝着更大模型的发展将持续一段时间。

Generalmodels like BERT can be finetuned for particular NLP tasks (from: Devlin et al. 2018).

当然,语言是一种复杂的现象。很明显,参数相对较少,更传统,更小的模型无法处理您向它们抛出的所有NLP任务。但是,对于单独的文本分类或序列标记任务,是否确实需要BERT及其同类的所有表达能力是值得怀疑的。这就是研究人员开始研究如何减小这些模型的尺寸的原因。出现了三种可能的方法:通过量化以较少的位进行编码来降低模型中权重的精度,通过修剪来完全删除模型的某些部分(连接权重神经元甚至是全权重矩阵),而蒸馏的目的是训练一个小模型来模仿大模型的行为。

用模型蒸馏进行情感分析

在NLP Town的一个暑期项目中,我们与实习生SimonLepercq一起研究了模型蒸馏在情感分析中的有效性。像庞(Pang),李(Lee)和威赛亚娜(Vaithyanathan)在他们的开创性论文中一样,我们的目标是建立一个能够区分正面和负面评论的NLP模型。我们收集了六种语言的产品评论:英语,荷兰语,法语,德语,意大利语和西班牙语。我们将带有1或2颗星的评论贴上负面标签,带有4或5颗星的评论则视为正面。我们使用了1000个示例进行培训,1000个示例用于开发(提前停止)和1000个示例进行测试。

第一步是确定我们任务的基准。在我们的每个数据集中有相同数量的阳性和阴性实例,随机基线平均将获得50%的准确度。作为一个简单的机器学习基线,我们训练了spaCy文本分类模型:词袋模型和一个相当简单的卷积神经网络堆叠集成,具有均值合并和注意力。在此基础上,我们添加了一个节点的输出层,并让模型输出得分高于0.5时预测为正,否则为负。在测试数据上,此基准达到了79.5%(对于意大利语)和83.4%(对于法语)之间的准确性——不错,但结果也不是很好。

BERT gives anaverage error reduction of 45% over our simpler spaCy models.

由于训练集小,我们的挑战非常适合迁移学习。即使训练数据中没有测试词(例如,很棒的书),BERT也已经知道它与出色的小说,奇妙的读物或训练集中很可能出现的另一个类似的词组相似。因此,与从头开始训练的简单模型相比,它应该能够更加可靠地预测从来没见过的评论的评分。

为了微调BERT,我们改进了PyTorch-Transformers库中的BERTForSequenceClassification类,以用于二进制分类。对于所有六种语言,我们都微调了BERT-multilingual-cased,这是Google目前推荐的多语言模型。结果证实了我们的期望:BERT的准确度在87.2%(荷兰语)和91.9%(西班牙语)之间,平均比我们最初的spaCy模型高出8.4%。这意味着BERT几乎将测试集上的错误数量减半。

模型蒸馏

不幸的是,BERT并非没有缺点。我们的六个微调模型中的每个模型都占用了将近700MB的磁盘空间,其推理时间比spaCy的要长得多。这使得它们难以部署在资源有限的设备上,或者难以同时部署给许多用户。为了解决这些挑战,我们转向模型蒸馏:我们将经过微调的BERT模型作为教师,而spaCy的简单卷积模型则作为学习模仿老师行为的学生。我们遵循Tang (2019)等人描述的模型蒸馏方法。他们展示了将BERT蒸馏成简单的BiLSTM是可能的,并获得类似于具有100倍以上参数ELMo模型的结果。

The processof model distillation.

在我们开始训练我们的小型模型之前,我们需要更多的数据。为了学习和模仿BERT的行为,我们的学生需要查看比原始训练集更多的示例。Tang等人采用了三种方法进行数据扩充(在原始训练数据的基础上创建合成训练数据):

词。例如,我现在喜欢这本书成为我[MASK]这本书。

  • 用相同词性的另一个单词替换训练数据中的其他随机单词。例如,我喜欢这本书就变成我喜欢这个屏幕。
  • 从训练示例中随机抽样一个长度为1到5的n-gram。
  • 由于我们数据集中的产品评论可能相当长,因此我们在上述三个方法中添加了第四个方法:
  • 从训练示例中随机抽取一个句子。

这些增强方法不仅帮助我们创建了一个比原始训练集大很多倍的训练集;通过采样和替换训练数据的各个部分,它们还向学生模型告知哪些单词或短语对其教师的输出有影响。此外,为了给它尽可能多的信息,我们不会向学生显示其老师为某项物品预测的标签,而是显示它的精确输出值。通过这种方式,小型模型可以了解最佳类别到底有多准确,以及与其他类别的比较。Tang等(2019)用老师的对数训练了小模型,但是我们的实验表明使用概率也可以得到很好的结果。 

蒸馏结果

模型蒸馏的最大优点之一是它与模型无关:教师模型可以是一个黑匣子,而学生模型可以具有我们喜欢的任何架构。为使实验简单,我们选择了与基线相同的spaCy文本分类器作为学生。训练过程也保持不变:我们使用相同的批次大小,学习速率,退出和损失函数,并在训练数据的准确性停止上升时停止训练。我们使用上述的扩充方法将每种语言的大约60,000个示例的合成数据集组合在一起。然后,我们收集了经过微调的BERT模型针对这些数据的预测。连同原始训练数据,这已成为我们较小spaCy模型的训练数据。

The distilledspaCy models perform almost as well as the original BERT models.

尽管设置很简单,蒸馏后的spaCy模型却明显优于我们的初始spaCy基线。平均而言,它们的精度提高了7.3%(仅比BERT模型低1%),误差减少了39%。他们的表现表明,对于诸如情感分析之类的特定任务,我们并不需要BERT提供的所有表达能力。训练一个性能几乎与BERT相同但参数少得多的模型是完全可能的。

结论

随着大型迁移学习模型的日益普及,将NLP解决方案投入生产变得越来越具有挑战性。但是,诸如模型蒸馏之类的方法表明,对于许多任务而言,不需要数亿个参数即可实现高精度。我们用六种语言进行情感分析的实验表明,训练spaCy的卷积神经网络来与更复杂的模型架构(例如BERT的模型)相匹敌,是可能的。将来,我们希望在NLP Town更详细地研究模型蒸馏。例如,我们旨在找出什么是最有效的数据增强方法,或者需要多少合成数据来训练一个较小的模型。

原文标题:

Distilling BERT Models with spaCy

原文链接:

https://towardsdatascience.com/distilling-bert-models-with-spacy-277c7edc426c

编辑:黄继彦

校对:林亦霖

译者简介

詹荣辉,美国天普大学福克斯商学院金融专业本科毕业生,对关于计算机的一切事物感兴趣,自学了编程,网站开发,自动驾驶,深度学习等等的不同技术,并且也有深度学习相关的从业经验。希望能够结实更多志同道合的伙伴,毕竟这个世界不是由一个人建立起来的。

THU数据派
THU数据派

THU数据派"基于清华,放眼世界",以扎实的理工功底闯荡“数据江湖”。发布全球大数据资讯,定期组织线下活动,分享前沿产业动态。了解清华大数据,敬请关注姐妹号“数据派THU”。

工程BERTspacy
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

自注意力技术

自注意力(Self-attention),有时也称为内部注意力,它是一种涉及单序列不同位置的注意力机制,并能计算序列的表征。自注意力在多种任务中都有非常成功的应用,例如阅读理解、摘要概括、文字蕴含和语句表征等。自注意力这种在序列内部执行 Attention 的方法可以视为搜索序列内部的隐藏关系,这种内部关系对于翻译以及序列任务的性能非常重要。

基准技术

一种简单的模型或启发法,用作比较模型效果时的参考点。基准有助于模型开发者针对特定问题量化最低预期效果。

词嵌入技术

词嵌入是自然语言处理(NLP)中语言模型与表征学习技术的统称。概念上而言,它是指把一个维数为所有词的数量的高维空间嵌入到一个维数低得多的连续向量空间中,每个单词或词组被映射为实数域上的向量。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

文本分类技术

该技术可被用于理解、组织和分类结构化或非结构化文本文档。文本挖掘所使用的模型有词袋(BOW)模型、语言模型(ngram)和主题模型。隐马尔可夫模型通常用于词性标注(POS)。其涵盖的主要任务有句法分析、情绪分析和垃圾信息检测。

提前停止技术

在机器学习中,提前停止是一种正则化形式,用于在用迭代方法(例如梯度下降)训练学习器时避免过度拟合。 这种方法更新了学习器,使其更好地适合每次迭代的训练数据。 这提高了学习器在训练集之外的数据上的表现。 但是,提高学习器对训练数据的适应性是以增加的泛化误差为代价的。 提前停止规则提供了在学习器开始过度训练之前可以运行多少次迭代的指导。提前停止规则已经在许多不同的机器学习方法中使用,理论基础不尽相同。

损失函数技术

在数学优化,统计学,计量经济学,决策理论,机器学习和计算神经科学等领域,损失函数或成本函数是将一或多个变量的一个事件或值映射为可以直观地表示某种与之相关“成本”的实数的函数。

卷积神经网络技术

卷积神经网路(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。卷积神经网路由一个或多个卷积层和顶端的全连通层(对应经典的神经网路)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网路能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网路在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网路,卷积神经网路需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。 卷积网络是一种专门用于处理具有已知的、网格状拓扑的数据的神经网络。例如时间序列数据,它可以被认为是以一定时间间隔采样的一维网格,又如图像数据,其可以被认为是二维像素网格。

词袋模型技术

词袋模型(英语:Bag-of-words model)是个在自然语言处理和信息检索(IR)下被简化的表达模型。此模型下,像是句子或是文件这样的文字可以用一个袋子装着这些词的方式表现,这种表现方式不考虑文法以及词的顺序。最近词袋模型也被应用在电脑视觉领域。

迁移学习技术

迁移学习是一种机器学习方法,就是把为任务 A 开发的模型作为初始点,重新使用在为任务 B 开发模型的过程中。迁移学习是通过从已学习的相关任务中转移知识来改进学习的新任务,虽然大多数机器学习算法都是为了解决单个任务而设计的,但是促进迁移学习的算法的开发是机器学习社区持续关注的话题。 迁移学习对人类来说很常见,例如,我们可能会发现学习识别苹果可能有助于识别梨,或者学习弹奏电子琴可能有助于学习钢琴。

神经元技术

(人工)神经元是一个类比于生物神经元的数学计算模型,是神经网络的基本组成单元。 对于生物神经网络,每个神经元与其他神经元相连,当它“兴奋”时会向相连的神经元发送化学物质,从而改变这些神经元的电位;神经元的“兴奋”由其电位决定,当它的电位超过一个“阈值”(threshold)便会被激活,亦即“兴奋”。 目前最常见的神经元模型是基于1943年 Warren McCulloch 和 Walter Pitts提出的“M-P 神经元模型”。 在这个模型中,神经元通过带权重的连接接处理来自n个其他神经元的输入信号,其总输入值将与神经元的阈值进行比较,最后通过“激活函数”(activation function)产生神经元的输出。

自然语言处理技术

自然语言处理(英语:natural language processing,缩写作 NLP)是人工智能和语言学领域的分支学科。此领域探讨如何处理及运用自然语言;自然语言认知则是指让电脑“懂”人类的语言。自然语言生成系统把计算机数据转化为自然语言。自然语言理解系统把自然语言转化为计算机程序更易于处理的形式。

批次技术

模型训练的一次迭代(即一次梯度更新)中使用的样本集。

堆叠技术

堆叠泛化是一种用于最小化一个或多个泛化器的泛化误差率的方法。它通过推导泛化器相对于所提供的学习集的偏差来发挥其作用。这个推导的过程包括:在第二层中将第一层的原始泛化器对部分学习集的猜测进行泛化,以及尝试对学习集的剩余部分进行猜测,并且输出正确的结果。当与多个泛化器一起使用时,堆叠泛化可以被看作是一个交叉验证的复杂版本,利用比交叉验证更为复杂的策略来组合各个泛化器。当与单个泛化器一起使用时,堆叠泛化是一种用于估计(然后纠正)泛化器的错误的方法,该泛化器已经在特定学习集上进行了训练并被询问了特定问题。

语言模型技术

语言模型经常使用在许多自然语言处理方面的应用,如语音识别,机器翻译,词性标注,句法分析和资讯检索。由于字词与句子都是任意组合的长度,因此在训练过的语言模型中会出现未曾出现的字串(资料稀疏的问题),也使得在语料库中估算字串的机率变得很困难,这也是要使用近似的平滑n元语法(N-gram)模型之原因。

ELMo技术

ELMO 是“Embedding from Language Models”的简称, ELMO 本身是个根据当前上下文对 Word Embedding 动态调整的思路。ELMO 采用了典型的两阶段过程,第一个阶段是利用语言模型进行预训练;第二个阶段是在做下游任务时,从预训练网络中提取对应单词的网络各层的 Word Embedding 作为新特征补充到下游任务中。

GPT-2技术

GPT-2是OpenAI于2019年2月发布的基于 transformer 的大型语言模型,包含 15 亿参数、在一个 800 万网页数据集上训练而成。据介绍,该模型是对 GPT 模型的直接扩展,在超出 10 倍的数据量上进行训练,参数量也多出了 10 倍。在性能方面,该模型能够生产连贯的文本段落,在许多语言建模基准上取得了 SOTA 表现。而且该模型在没有任务特定训练的情况下,能够做到初步的阅读理解、机器翻译、问答和自动摘要。

量化技术

深度学习中的量化是指,用低位宽数字的神经网络近似使用了浮点数的神经网络的过程。

推荐文章
暂无评论
暂无评论~