Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >tensorflow 2.0+ 预训练BERT模型的文本分类

tensorflow 2.0+ 预训练BERT模型的文本分类

作者头像
大数据技术与机器学习
发布于 2021-04-22 03:24:27
发布于 2021-04-22 03:24:27
2.5K0
举报
基于transformers的语言模型在许多不同的自然语言处理(NLP)基准任务测试上都取得了很大进展。迁移学习与大规模的transformers语言模型训练的结合正在成为现代NLP的一个标准。在这篇文章,我们对transformers体系结构和文本分类问题做一些必要的理论介绍。然后,我们将演示预训练BERT模型在文本分类任务的微调过程,这里运用的是TensorFlow 2.0+的 Keras API。

文本分类–问题及公式

一般来说, 分类是确定新样本的类别问题。我们有数据集D,在文档中包含文本序列,如

这里 Xi 是每一段文本 而N 是文本的个数。

实现分类的算法称为分类器。文本分类可以根据目标性质分为不同的任务:

多分类问题(multi-class classification)

多标签问题(multi-label classification)

多分类也称为单标签问题,例如,我们为每个样本分配一个标签。名称中的"多"表示我们处理至少 3 个类,对于 2 个类,我们可以使用术语二进制分类(binary classification)。另一方面,多标签任务更为一般,允许我们为每个样本分配多个标签,而不仅仅是一样本一标签。

为什么选择transformers?

在这篇文章中,我们不会详细讨论transformers架构。然而了解 NLP 中的一些难点还是很有用的。NLP 中有两个相辅相成的重要概念:

word embeddings

https://en.wikipedia.org/wiki/Word_embedding

language model

https://en.wikipedia.org/wiki/Language_model

transformers用于构建语言模型,而embeddings 是可以用于预训练的附属品。

基于 RNNs/LSTMs 的方法

大多数较旧的语言建模方法都基于 RNN(recurrent neural network)。简单的 RNN 存在梯度消失/梯度爆炸问题,所以无法对较长的上下文依赖关系进行建模。它们大多数被所谓的长短期记忆网络模型(LSTMs) 所取代, 该神经网络也是 RNN 的一个变种形式,但可以捕获文档中较长的上下文。然而,LSTM 只能单向处理序列,因此基于 LSTM 的最先进方法演变为双向 LSTM,此结构可以从左到右以及从右到左读取上下文。基于LSTM有非常成功的模型,如ELMO或 ULMFIT,这些模型仍然适用于现在的NLP任务。

基于transformers架构的方法

双向 LSTM 的主要限制之一是其顺序性,这使得并行训练非常困难, transformer 架构通过注意力机制(Vashvani et al. 2017) 完全取代LSTM来解决这一个问题。在注意力机制中,我们把整个序列看作一个整体, 因此并行训练要容易得多。我们可以对整个文档上下文进行建模,并使用大型数据集以无人监督学习的方式进行预训练,并微调下游任务。

最先进的transformers模型

有很多基于transformers的语言模型。最成功的是以下这些(截至2020年4月)

Transformer (Google Brain/Research)

BERT (Google Research)

GPT-2 (OpenAI)

XLNet (Google Brain)

CTRL (SalesForce)

Megatron (NVidia)

Turing-NLG (Microsoft)

这些模型之间略有差异,而BERT一直被认为是许多 NLP 任务中最先进的模型。但现在看来,它已被同样来自谷歌的 XLNet 所超越。XLNet 利用置换语言建模,该模型对句子中所有可能的单词排列进行自动回归模型。我们将在本文中使用基于 BERT 的语言模型。

BERT

BERT (Bidirectional Encoder Representations from Transformers) (Devlint et al., 2018) 是一种预训练语言表示的方法。我们不会讨论太多细节,但与原始transformers (Vaswani et al., 2017) 的主要区别是, BERT没有解码器, 但在基本版本中堆叠了12个编码器,而且在更大的预训练模型中会增加编码器的数量。这种架构不同于 OpenAI 的 GPT-2,它是适合自然语言生成 (NLG) 的自回归语言模型。

Tokenizer

官方 BERT 语言模型是使用切片词汇预训练与使用, 不仅token 嵌入, 而且有区分成对序列的段嵌入, 例如问答系统。由于注意力机制在上下文评估中不考虑位置,因此需要把位置信息嵌入才能将位置感知注入 BERT 模型。

需要注意的是,BERT限制序列的最大长度为 512 个token。对于比最大允许输入短的序列,我们需要添加 [PAD],另一方面,如果序列更长,我们需要剪切序列。对于较长的文本段,您需要了解此对序列最大长度的 BERT 限制,请参阅此 GitHub issue 以了解进一步的解决方案。

非常重要的还有所谓的特殊token,例如 [CLS] token和 [SEP] token。[CLS] token将插入序列的开头,[SEP] token位于末尾。如果我们处理序列对,我们将在最后一个序列对的末尾添加额外的 [SEP] token。

本文全部 获取

关注微信公众号 datanlp ,然后回复关键词 文本分类 即可获取

使用transformers库时,我们首先加载要使用的模型的标记器。然后,我们将按如下方式进行:

在实际编码中,我们将只使用encode_plus函数,它为我们完成所有这些步骤

预训练

预训练是BERT训练的第一阶段,它以无监督的方式完成,由两个主要任务组成:

masked language modelling (MLM)

next sentence prediction (NSP)

从高级别开始,在 MLM 任务中,我们用 [MASK] token替换序列中的一定数量的token。然后我们尝试预测掩蔽的token,MLM 有一些额外的规则,所以描述不完全精确,请查看原始论文(Devlin et al., 2018)以了解更多详细信息。

当我们选择句子对为下一个句子预测,我们将选择上一个句子之后的实际句子的50%标记为IsNext,其他 50% 我们从语料库中选择另一个句子, 与上一个句子无关,标记为NotNext。

这两个任务都可以在文本语料库上执行,而无需标记样本,因此作者使用了诸如BooksCorpus (800m words), English Wikipedia (2500m words)等数据集。

微调(Fine-tuning)

一旦我们自己预训练了模型,或者加载了已预训练过的模型(例如BERT-based-uncased、BERT-based-chinese),我们就可以开始对下游任务(如问题解答或文本分类)的模型进行微调。我们可以看到,BERT 可以将预训练的 BERT 表示层嵌入到许多特定任务中,对于文本分类,我们将只在顶部添加简单的 softmax 分类器。

预训练阶段需要显著的计算能力 (BERT base: 4 days on 16 TPUs; BERT large 4 days on 64 TPUs)。所以保存预训练的模型,然后微调一个特定的数据集非常有用。与预训练不同,微调不需要太多的计算能力,即使在单个 GPU 上,也可以在几个小时内完成微调过程。当对文本分类进行微调时,我们可以选择几个方式,请参阅下图 (Sun et al. 2019)

数据集

使用THUCNews的一个子集进行训练与测试,数据集请自行到THUCTC:一个高效的中文文本分类工具包下载,请遵循数据提供方的开源协议。

http://thuctc.thunlp.org/

本次训练使用了其中的10个分类,每个分类2W条数据。

类别如下:

数据集在 data.txt

https://github.com/NZbryan/MachineLearning/blob/master/NLP/data.txt

现将数据集按照层次抽样划分为训练集、验证集、测试集:

使用TensorFlow 2.0+ keras API微调BERT

现在,我们需要在所有样本中应用 BERT tokenizer 。我们将token映射到词嵌入。这可以通过encode_plus完成。

可以看到,训练集正确率96.88%,验证集正确率93.21%,测试集上正确率94.37%。

由于数据量较大,训练时间长,建议在GPU下运行,或者到colab去跑。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习入门与实战 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
文本分类综述 | 迈向NLP大师的第一步(中)
本系列文章总结自然语言处理(NLP)中最基础最常用的「文本分类」任务,主要包括以下几大部分:
NewBeeNLP
2020/12/08
8280
从BERT、XLNet到MPNet,细看NLP预训练模型发展变迁史
来自 | 知乎 地址 | https://zhuanlan.zhihu.com/p/146325984
朴素人工智能
2020/06/15
1.8K0
从BERT、XLNet到MPNet,细看NLP预训练模型发展变迁史
使用transformer BERT预训练模型进行文本分类 及Fine-tuning
Bert 全称为 Bidirectional Encoder Representations from Transformers(Bert)。和 ELMo 不同,BERT 通过在所有层联合调节左右两个上下文来预训练深层双向表示,此外还通过组装长句作为输入增强了对长程语义的理解。Bert 可以被微调以广泛用于各类任务,仅需额外添加一个输出层,无需进行针对任务的模型结构调整,就在文本分类,语义理解等一些任务上取得了 state-of-the-art 的成绩。
大鹅
2021/07/30
10.8K0
使用transformer BERT预训练模型进行文本分类 及Fine-tuning
Bert 全称为 Bidirectional Encoder Representations from Transformers(Bert)。和 ELMo 不同,BERT 通过在所有层联合调节左右两个上下文来预训练深层双向表示,此外还通过组装长句作为输入增强了对长程语义的理解。Bert 可以被微调以广泛用于各类任务,仅需额外添加一个输出层,无需进行针对任务的模型结构调整,就在文本分类,语义理解等一些任务上取得了 state-of-the-art 的成绩。
大鹅
2021/07/30
4.4K0
使用BERT和TensorFlow构建多标签文本分类器
在多标签分类问题中,训练集由实例组成,每个实例可以被分配有表示为一组目标标签的多个类别,并且任务是预测测试数据的标签集。例如:
代码医生工作室
2019/06/21
10.6K0
使用BERT和TensorFlow构建多标签文本分类器
6种用于文本分类的开源预训练模型
文本分类是自然语言处理的核心思想之一。如果一台机器能够区分名词和动词,或者它能够在客户的评论中检测到客户对产品的满意程度,我们可以将这种理解用于其他高级NLP任务。
磐创AI
2020/06/29
3K0
6种用于文本分类的开源预训练模型
XLM,基于BERT的跨语言模型
这个模型在跨语言分类任务(15个语言的句子蕴含任务)上比其他模型取得了更好的效果,并且显著提升了有预训练的机器翻译效果。
AI科技评论
2019/08/23
1.7K0
【NLP】预训练模型综述
摘要:近年来,预训练模型的出现将自然语言处理带入了一个新的时代。本文概述了面向自然语言处理领域的预训练模型技术。我们首先概述了预训练模型及其发展历史。并详细介绍自然语言处理领域的经典预训练模型,包括最经典的预训练模型技术和现在一系列新式的有启发意义的预训练模型。然后梳理了这些预训练模型在自然语言处理领域的优势和预训练模型的两种主流分类。最后,对预训练技术的未来发展趋势进行了展望。
黄博的机器学习圈子
2020/05/26
2.2K0
【NLP】预训练模型综述
NLP领域预训练模型的现状及分析
小牛翻译,核心成员来自东北大学自然语言处理实验室,由姚天顺教授创建于1980年,现由朱靖波教授、肖桐博士领导,长期从事计算语言学的相关研究工作,主要包括机器翻译、语言分析、文本挖掘等。团队研发的支持140种语言互译的小牛翻译系统已经得到广泛应用,并研发了小牛翻译云(https://niutrans.vip)让机器翻译技术赋能全球企业。
AI科技评论
2019/11/07
1.1K0
NLP领域预训练模型的现状及分析
最强NLP预训练模型!谷歌BERT横扫11项NLP任务记录
作者:Jacob Devlin、Ming-Wei Chang、Kenton Lee、Kristina Toutanova
机器之心
2018/10/22
1.3K0
最强NLP预训练模型!谷歌BERT横扫11项NLP任务记录
【NLP专栏】图解 BERT 预训练模型!
审稿人:Jepson,Datawhale成员,毕业于中国科学院,目前在腾讯从事推荐算法工作。
zenRRan
2020/11/04
1.7K0
【NLP专栏】图解 BERT 预训练模型!
BERT论文解读
BERT的设计是通过在所有层中对左右上下文进行联合调节,来预先训练来自未标记文本的深层双向表示。
程序员一一涤生
2019/10/10
1.2K0
BERT论文解读
自然语言预训练模型大总结​
先来一张图。 本文主要援引复旦大学邱锡鹏教授的论文:NLP预训练模型综述,对预训练模型进行了一些梳理
机器学习之禅
2022/07/11
8400
自然语言预训练模型大总结​
自然语言处理中的预训练模型(上)
本文是最近比较火的一篇关于预训练模型的综述 「Pre-trained Models for Natural Language Processing: A Survey」 的阅读笔记。由于篇幅较长,所以分成两篇发送。
口仆
2020/08/14
1.8K0
【论文笔记】融合标签向量到BERT:对文本分类进行改进
论文简介:融合标签嵌入到BERT:对文本分类进行有效改进 论文标题:Fusing Label Embedding into BERT: An Efficient Improvement for Text Classification 论文链接:https://aclanthology.org/2021.findings-acl.152.pdf 论文作者:{Yijin Xiong etc.}
致Great
2022/03/16
1.4K0
【论文笔记】融合标签向量到BERT:对文本分类进行改进
Transformer预训练模型已经变革NLP领域,一文概览当前现状
在如今的 NLP 领域,几乎每项任务中都能看见「基于 Transformer 的预训练语言模型(T-PTLM)」成功的身影。这些模型的起点是 GPT 和 BERT。而这些模型的技术基础包括 Transformer、自监督学习和迁移学习。T-PTLM 可使用自监督学习从大规模文本数据学习普适性的语言表征,然后将学到的知识迁移到下游任务。这些模型能为下游任务提供优质的背景知识,从而可避免从头开始训练下游任务。
机器之心
2021/10/26
1.3K0
Transformer预训练模型已经变革NLP领域,一文概览当前现状
预训练BERT,官方代码发布前他们是这样用TensorFlow解决的
本文介绍的两个 BERT 实现项目分别基于 TensorFlow 和 Keras,其中基于 TensorFlow 的项目会使用中等数据集与其它技巧降低计算力,并发现使用 TextCNN 代替 Transformer 主干网络,且保留 BERT 预训练任务也能得到非常好的效果。而基于 Keras 的项目尝试使用预训练的 OpenAI Transformer 作为初始化权重,并以较小的计算力重新训练 BERT 预训练模型,再将该预训练的 BERT 应用到不同任务。
机器之心
2018/12/05
9440
NLP文本分类
其实最近挺纠结的,有一点点焦虑,因为自己一直都期望往自然语言处理的方向发展,梦想成为一名NLP算法工程师,也正是我喜欢的事,而不是为了生存而工作。我觉得这也是我这辈子为数不多的剩下的可以自己去追求自己喜欢的东西的机会了。然而现实很残酷,大部分的公司算法工程师一般都是名牌大学,硕士起招,如同一个跨不过的门槛,让人望而却步,即使我觉得可能这个方向以后的路并不如其他的唾手可得的路轻松,但我的心中却一直有一股信念让我义无反顾,不管怎样,梦还是要有的,万一实现了呢~
UM_CC
2022/09/22
4880
NLP文本分类
BERT模型详解
1 简介 BERT全称Bidirectional Enoceder Representations from Transformers,即双向的Transformers的Encoder。是谷歌于2018年10月提出的一个语言表示模型(language representation model)。 1.1 创新点 预训练方法(pre-trained): 用Masked LM学习词语在上下文中的表示; 用Next Sentence Prediction来学习句子级表示。 1.2 成功 强大,效果好。出来之时,
用户1432189
2020/10/27
2.4K0
BERT模型详解
NLP-BERT 谷歌自然语言处理模型:BERT-基于pytorch
从现在的大趋势来看,使用某种模型预训练一个语言模型看起来是一种比较靠谱的方法。从之前AI2的 ELMo,到 OpenAI的fine-tune transformer,再到Google的这个BERT,全都是对预训练的语言模型的应用。 BERT这个模型与其它两个不同的是 它在训练双向语言模型时以减小的概率把少量的词替成了Mask或者另一个随机的词。我个人感觉这个目的在于使模型被迫增加对上下文的记忆。至于这个概率,我猜是Jacob拍脑袋随便设的。 增加了一个预测下一句的loss。这个看起来就比较新奇了。 BERT模型具有以下两个特点: 第一,是这个模型非常的深,12层,并不宽(wide),中间层只有1024,而之前的Transformer模型中间层有2048。这似乎又印证了计算机图像处理的一个观点——深而窄 比 浅而宽 的模型更好。 第二,MLM(Masked Language Model),同时利用左侧和右侧的词语,这个在ELMo上已经出现了,绝对不是原创。其次,对于Mask(遮挡)在语言模型上的应用,已经被Ziang Xie提出了(我很有幸的也参与到了这篇论文中):[1703.02573] Data Noising as Smoothing in Neural Network Language Models。
机器学习AI算法工程
2019/10/28
7830
NLP-BERT 谷歌自然语言处理模型:BERT-基于pytorch
推荐阅读
相关推荐
文本分类综述 | 迈向NLP大师的第一步(中)
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档