文本情感分类模型之BERT

这篇具有很好参考价值的文章主要介绍了文本情感分类模型之BERT。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

BERT是google开源的一种自然语言处理领域的经典模型,全称是Bidirectional Encoder Representations from Transformers 。它使用多头注意力和位置嵌入,来替换不易并行的循环神经网络。它的出现一举打破自然语言处理领域11个不同问题的记录,直接将自然语言处理推动到了一个新的时代。

本实验使用pytorch的相关神经网络库, 编写BERT 的语言模型, 并基于训练好的词向量,利用少量的训练数据,微调BERT 模型用于文本分类任务。实验使用的数据集是IMDB数据集。实验的主要内容包括:

  1. 实验准备:搭建基于GPU的pytorch实验环境。下载IMDB数据集。
  2. 数据预处理:使用pytorch所提供的标准数据接口,将原始数据处理为方便模型训练脚本所使用的数据结构。
  3. 语言模型:参考《动手学深度学习》,搭建BERT 模型并加载大语料库上预训练的模型参数。推荐的预训练参数来源为huggingface。
  4. 情感分类:基于训练好的语言模型,编写一个情感分类模型,包含一个BERT 模型和一个分类器(MLP)。首先,将一个句子中的每个单词对应的词向量输入BERT,得到句子的向量表征。然后将句向量作为分类器的输入,输出二元分类预测,同样进行loss 计算和反向梯度传播训练,这里的loss是交叉熵loss。此次实验中不固定BERT 模型的参数,而须随分类器一同训练以达到微调的目的。
  5. 超参数调试:通过调整学习率等超参数提高情感分类模型的准确率。
  6. 测试性能:选择在上一步中最合适的一组超参数训练得到最终的模型,然后在测试集上测试性能,并于第二次实验中采用RNN模型的实验结果进行对比分析。

 相关的代码下载链接:从零开始在Pytorch实现Bert模型

                                     Pytorch下用Bert+MLP实现文本情感分类网络 

                                     bert情感分类中用tokenizer实现文本预处理

                                     pytorch实现具备预训练参数加载功能的bert模型

1.搭建实验环境

搭建GPU版Pytorch实验环境如下:

名称

版本

备注

Python

3.8

Pytorch

1.12.1

GPU

RTX2060

安装对应版本的cuda

2.下载IMDB数据集

下载IMDB数据集(地址:
https://ai.stanford.edu/~amaas/data/sentiment/
),解压后得到包含正负样本的电影评论数据集,具体如下:

使用bert模型进行自然语言情感分类,bert,人工智能,深度学习,自然语言处理

 3.数据预处理

对下载的数据集中的test和train分别进行预处理从而方便后续模型训练。预处理主要包括:txt文件读取、文本标签处理、特殊字符过滤、分词,使用了bert预训练模型的tokenizer将文本处理为bert所需输入形式,包括input_ids、token_type_ids和attention_mask以及每个文本的类别标签label。最后将处理后的数据,使用pickle 模块的 dump()方法进行序列化并存储,以方便后续调试。

读取IMDB数据

使用bert模型进行自然语言情感分类,bert,人工智能,深度学习,自然语言处理

加载预训练的tokenizer并利用其对文本进行处理得到训练需要的输入数据集,其功能主要由ClsDataset()实现,核心代码如下。

使用bert模型进行自然语言情感分类,bert,人工智能,深度学习,自然语言处理

数据集包括训练集、验证集和测试集,其中训练集和验证集由IMDB中的train文件夹中数据组成,总共25000个样本,随机分为训练集和验证集,大小分别为训练集20000样本,验证集5000样本,两个数据集不交叉。测试集由IMDB中的test文件夹中数据组成,用于最终的模型性能测试,大小为25000个样本。另外最终模型的训练在train文件夹的25000个样本上进行。

使用bert模型进行自然语言情感分类,bert,人工智能,深度学习,自然语言处理

保存数据集

使用bert模型进行自然语言情感分类,bert,人工智能,深度学习,自然语言处理

4.语言模型搭建和训练

4.1.搭建Bert模型

关于如何搭建Bert模型可以参考网上代码,或者参考本博客的相关文章和资源(

手动搭建Bert模型并实现与训练参数加载和微调)。

4.2.搭建情感分类模型

基于训练好的语言模型,编写一个情感分类模型,包含一个BERT 模型和一个分类器(MLP)。首先,将一个句子中的每个单词对应的词向量输入BERT,得到句子的向量表征。然后将句向量作为分类器的输入,输出二元分类预测,同样进行loss 计算和反向梯度传播训练,这里的loss是交叉熵loss。此次实验中不固定BERT 模型的参数,而须随分类器一同训练以达到微调的目的。

4.2.1.情感分类模型定义

情感分类模型,包含一个BERT 模型和一个分类器(MLP),两者间有一个dropout层,BERT模型实现了预训练参数加载功能。首先,将一个句子中的每个单词对应的词向量输入BERT,得到句子的向量表征。然后将句向量经过dropout层再输入分类器,最后输出二元分类预测。主要步骤及代码段如下:

使用bert模型进行自然语言情感分类,bert,人工智能,深度学习,自然语言处理

4.2.2.训练情感分类模型

1)预训练模型和预处理数据集加载

加载预训练模型和预处理数据集,数据集为IMDB,预处理方法如3.3节所述,基于训练、验证、测试数据集构建了各自的迭代器train_loader、eval_loader、test_loader

使用bert模型进行自然语言情感分类,bert,人工智能,深度学习,自然语言处理

2)模型参数和训练参数定义

分别定义模型结构参数和训练的参数,其中由于GPU内存限制batch_size设置为4,但实际在训练时参数每8步更新一次,可以认为等效于每个batch_size32.具体如下:

使用bert模型进行自然语言情感分类,bert,人工智能,深度学习,自然语言处理

3)训练模型

实列化分类模型,并定义损失函数为CrossEntropyLoss(),优化器为Adam(),训练设备为GPUcuda0),学习率等参数已在上一步说明,这些参数在训练中有调整。Bert模型的参数在实列化时加载了HuggingFace的bert_base_uncased预训练模型参数。

使用bert模型进行自然语言情感分类,bert,人工智能,深度学习,自然语言处理

将模型设置为训练模式,加载输入样本和标签至GPU进行训练。

使用bert模型进行自然语言情感分类,bert,人工智能,深度学习,自然语言处理

每个Epoch结束时,在验证集上测试模型的性能,包括分类准确度等指标,并保存当前表现最好的模型。

使用bert模型进行自然语言情感分类,bert,人工智能,深度学习,自然语言处理

​​​​​​​4.3.超参数分析和调试

在前述情感分类模型基础上对相关超参数进行了不同的调整、比较并分析了情感分类模型在各个情况下的性能。由于GPU内存限制和时间周期限制,并未对不同batchsize大小、不同优化器、MLP结构对模型性能的影响进行分析,仅分析比较了不同dropout和学习率对模型性能的影响。batchsize大小、不同优化器、MLP结构等超参数参考了《动手学深度学习》和网络上的资料设定,batchsize大小为32,优化器选择为AdamMLP使用了1层,hidden_size大小与Bert输出维度一致为768

5.实验结果

修改数据集,将训练集和验证集合并为训练集,在该数据集使用上一节分析得到的最优参数,Bert模型采用HuggingFace的bert_base_uncased预训练模型的结构参数,总共包含了12层Transformer。模型的其他参数也参考了HuggingFace的bert_base_uncased预训练模型的结构参数。vocab_size为bert_base_uncased预训练模型的字典大小,hidden_size为768,attention_head_num为12,intermediate_size为3072,hidden_act与论文中保持一致使用gelu,Dropout为0.1,学习率为5e-6,epoch为5。重新训练模型,并在测试集上进行模型性能测试。

在测试集上测试模型性能,在IMDB的测试数据集上(test,包含25000个样本)测得的结果如下:

使用bert模型进行自然语言情感分类,bert,人工智能,深度学习,自然语言处理

测试结果表明最后的模型在测试集上的准确度为94%。

6.结语

通过本次实验,熟悉了基于Pytorch和nvidiaGPU的深度学习开发环境搭建过程。掌握了自然语言处理中Bert模型的基本原理和实现方法,基于预训练模型的参数加载方法和基于Bert模型实现情感分析的模型架构、搭建和训练方法。通过对文本情感分类网络的调参分析和模型训练掌握了超参数调节方法、各种超参数对训练过程、模型性能的影响。文章来源地址https://www.toymoban.com/news/detail-778768.html

到了这里,关于文本情感分类模型之BERT的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用Bert,ERNIE,进行中文文本分类

    GitHub - 649453932/Bert-Chinese-Text-Classification-Pytorch: 使用Bert,ERNIE,进行中文文本分类 使用Bert,ERNIE,进行中文文本分类. Contribute to 649453932/Bert-Chinese-Text-Classification-Pytorch development by creating an account on GitHub. https://github.com/649453932/Bert-Chinese-Text-Classification-Pytorch   gayhub上有一个项目

    2024年02月12日
    浏览(89)
  • 用pytorch进行BERT文本分类

    BERT 是一个强大的语言模型,至少有两个原因: 它使用从 BooksCorpus (有 8 亿字)和 Wikipedia(有 25 亿字)中提取的未标记数据进行预训练。 顾名思义,它是通过利用编码器堆栈的双向特性进行预训练的。这意味着 BERT 不仅从左到右,而且从右到左从单词序列中学习信息。 B

    2024年02月11日
    浏览(47)
  • jupyter快速实现单标签及多标签多分类的文本分类BERT模型

    jupyter实现pytorch版BERT(单标签分类版) nlp-notebooks/Text classification with BERT in PyTorch.ipynb 通过改写上述代码,实现多标签分类 参考解决方案 ,我选择的解决方案是继承BertForSequenceClassification并改写,即将上述代码的ln [9] 改为以下内容:

    2024年02月02日
    浏览(42)
  • 【AI实战】BERT 文本分类模型自动化部署之 dockerfile

    本文主要介绍: 基于BERT的文本分类模型,样本不均衡的多分类loss函数的写法 dockerfile自动构建docker镜像,服务部署 BERT 的全称为 Bidirectional Encoder Representation from Transformers,是一个预训练的语言表征模型。它强调了不再像以往一样采用传统的单向语言模型或者把两个单向语言

    2024年02月12日
    浏览(44)
  • python_谷歌开源BERT模型文本分类出现的相关报错记录

    1、pycharm加载包列表时出错: unknown protocol: e 解决方案1: 网络的问题。加载不了软件包列表多数是网络连接异常导致。 1、首先打开电脑检查网络。 2、其次打开pycharm软件进行测试网络连接是否异常。 3、最后点击重新连接网络后重新登录该软件即可。 结果:不成功。网络无问

    2024年02月05日
    浏览(36)
  • 【自然语言处理NLP】Bert预训练模型、Bert上搭建CNN、LSTM模型的输入、输出详解

    Bert模型的输入 context 张量需要满足以下要求: 张量形状: context 应为二维张量,形状为 [batch_size, sequence_length] ,其中 batch_size 是输入样本的批量大小, sequence_length 是输入序列的长度。 数据类型: context 的数据类型应为整数类型,如 torch.LongTensor 。 值范围: context 中的值应

    2024年02月11日
    浏览(44)
  • 【学习草稿】bert文本分类

    https://github.com/google-research/bert https://github.com/CyberZHG/keras-bert 在 BERT 中,每个单词的嵌入向量由三部分组成: Token 嵌入向量:该向量是 WordPiece 分词算法得到的子单词 ID 对应的嵌入向量。 Segment 嵌入向量:该向量用于表示每个单词所属的句子。对于一个包含两个句子的序列,

    2024年02月07日
    浏览(53)
  • 自然语言处理实战项目8- BERT模型的搭建,训练BERT实现实体抽取识别的任务

    大家好,我是微学AI,今天给大家介绍一下自然语言处理实战项目8- BERT模型的搭建,训练BERT实现实体抽取识别的任务。BERT模型是一种用于自然语言处理的深度学习模型,它可以通过训练来理解单词之间的上下文关系,从而为下游任务提供高质量的语言表示。它的结构是由多

    2024年02月07日
    浏览(58)
  • Bert + 架构解决文本分类任务

    ![在这里插入图片描述] 一般任务 = 预训练 + 架构 + 应用 在本文中,我们将用 BERT + 架构去实现文本分类 任务 未使用BERT架构,使用基本的模型架构解决文本分类任务的可见这篇文章 中文文本分类,基本模型的pytoch实现 - 影子的文章 - 知乎 https://zhuanlan.zhihu.com/p/577121058 BERT 最

    2023年04月13日
    浏览(41)
  • NLP之Bert实现文本分类

    首先,概述一下代码的主要目的和流程。 主要目的 : 此代码的主要目的是使用BERT模型进行序列分类。具体来说,它似乎是在处理某种情感分析任务,因为代码中读取了标签和文本,并试图用BERT模型来进行分类(假设为正面或负面情感,因为 num_labels=2 )。 整体流程 : 导入

    2024年02月05日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包