首页 > 科技周边 > 人工智能 > 与现代伯特一起增强情感分析

与现代伯特一起增强情感分析

Joseph Gordon-Levitt
发布: 2025-03-09 09:46:11
原创
941 人浏览过

自2018年推出以来,伯特(Bert)改变了自然语言处理。它在情感分析,问题回答和语言推论等任务中表现良好。伯特使用双向训练和基于变压器的自我发挥,引入了一种新的方式来理解文本中的单词之间的关系。但是,尽管取得了成功,但伯特还是有局限性。它在计算效率,处理更长的文本并提供可解释性方面挣扎。这导致了Modernbert的发展,这是一个旨在应对这些挑战的模型。 ModernBert提高了处理速度,更好地处理更长的文本,并为开发人员提供了更大的透明度。在本文中,我们将探讨如何使用Modernbert进行情感分析,强调其特征和对Bert的改进。

学习目标

    贝特简要介绍以及为什么现代伯特出现
  • >
  • 了解现代的特征
  • >
  • >如何通过情感分析实施现代现代示例
  • 现代伯特
  • 的局限性

>本文是> > data Science Blogathon的一部分。 >目录

>什么是bert?问题
  • 什么是bert?
  • 自2018年Google介绍以来,它代表Transformers的双向编码器表示,它一直是游戏规则改变的 Bert。Bert介绍了双向培训的概念,该概念使该模型可以通过在各个方向上查看周围的单词来理解上下文。这导致了许多NLP任务的模型的表现明显更好,包括问答,情感分析和语言推论。伯特的架构基于仅编码变压器,这些变压器使用自我注意的机制来权衡句子中不同单词的影响,并且只有编码器。这意味着他们只能理解和编码输入,并且不重建或生成输出。因此,伯特(Bert)擅长捕获文本中的上下文关系,使其成为近年来最强大和广泛采用的NLP模型之一。
  • 什么是ModernBert?
  • 尽管伯特取得了突破性的成功,但它仍存在一定的局限性。其中一些是:
    • >计算资源:Bertis是一种计算昂贵的,内存密集型的模型,用于实时应用程序或设置的构成,该设置没有易于访问,功能强大的计算基础结构。
    • >上下文长度:Bert具有固定长度的上下文窗口,该窗口成为处理远距离输入(如冗长的文档)的限制。
    • >可解释性:模型的复杂性使其不如简单模型来解释,从而导致对模型进行调试和执行修改的挑战。
    • 常识推理:伯特缺乏常识推理,并且努力理解给定信息以外的上下文,细微差别和逻辑推理。
    > Bert vs Modernbert

    > Modernbert通过结合更有效的算法(例如>> flash注意力 > > > > local-local-lobal inter-local-lobal Entercting注意)来解决这些局限性,从而优化了内存使用量并提高了处理速度。此外,ModernBert引入了增强功能,以通过集成诸如 旋转位置嵌入(ROPE)>的技术来更有效地处理更长的上下文长度。 >它通过目标更透明和用户友好来增强可解释性,从而使开发人员更容易调试和使模型适应特定任务。此外,Modernbert将常识推理的进步结合在一起,使其能够更好地理解上下文,细微差别和逻辑关系,而不是提供的明确信息。它适用于NVIDIA T4,A100和RTX 4090等常见的GPU。 Modernbert接受了来自各种英语来源的数据,包括Web文档,代码和科学文章的培训。它经过了2万亿个独特令牌的训练,与以前的编码器中流行的标准20-40重复不同。

    >以以下大小发布:

    >

    >现代伯特基碱有22层和1.49亿个参数

    >

    现代伯特·塔尔格(Modernbert-Large)有28层和3.95亿个参数

      了解现代bert的特征
    • >
    • 现代伯特的某些独特特征是:
    • >闪烁注意力

    >这是一种开发的新算法,旨在在时间和记忆使用方面加快变压器模型的注意力机理。可以通过重新安排操作以及使用平铺和重新计算来加强注意力的计算。平铺有助于将大数据分解为可管理的块,并通过根据需要重新计算中间结果来减少记忆使用情况。这将二次记忆的使用量减少到线性,从而使长序列更有效。计算间接费用减少。它比传统的注意机制快2-4倍。闪光注意用于加快变压器模型的训练和推断。

    局部 - 全球交替注意

    > Modernbert最新颖的特征之一是交替关注,而不是全球关注。

    >仅在每三层之后才能参加完整的输入。这是全球关注。

    同时,所有其他层都有一个滑动窗口。在这个滑动窗口中,每个令牌都只能参加最接近的128个令牌。这是当地的关注。

    >

      旋转位置嵌入(绳索)

      旋转位置嵌入(绳索)是一种变压器模型技术,它使用旋转矩阵在序列中编码令牌的位置。它包含了绝对和相对位置信息,调整了注意机制以了解令牌之间的顺序和距离。绳索使用旋转矩阵编码令牌的绝对位置,还记下了相对位置信息或令牌之间的顺序和距离。

      毫无定论和测序

      未加工和序列包装是旨在优化内存和计算效率的技术。>

      >通常用于找到最长的令牌,添加毫无意义的填充令牌以填充其余的较短序列以等于其长度。这增加了对无意义令牌的计算。毫无用处可以从序列中删除不必要的填充令牌,减少浪费的计算。
      • >序列包装将文本的批处理重新组织为紧凑的形式,将较短的序列分组在一起以最大化硬件利用率。
      • >使用Modernbert
      的情感分析

      让我们实际上使用Modernbert实施情感分析。我们将使用ModernBert执行情感分析任务。情感分析是一种特定类型的文本分类任务,旨在将文本(例如,评论)分类为正或负面。

      我们正在使用的数据集是IMDB电影评论数据集将评论分类为正情绪或负面情感。

      >

      >注意:

      >我已经使用了A100 GPU在Google Colab上更快地处理。有关更多信息,请参阅:

      • 培训过程将需要WANDB API密钥。您可以通过以下方式创建一个:>重量和偏见。> 步骤1:安装必要的库
      • >
      • 安装与拥抱脸部变压器一起使用的库。>

      >步骤2:使用load_dataset函数加载IMDB数据集

      命令imdb [“ test”] [0]将在IMDB电影评论数据集的测试拆分中打印第一个示例,即第一个测试审查以及其关联的标签。
      #install libraries
      !pip install  git+https://github.com/huggingface/transformers.git datasets accelerate scikit-learn -Uqq
      !pip install -U transformers>=4.48.0
      
      import torch
      from transformers import AutoTokenizer, AutoModelForSequenceClassification, TrainingArguments, Trainer,AutoModelForMaskedLM,AutoConfig
      from datasets import load_dataset
      登录后复制
      登录后复制

      与现代伯特一起增强情感分析

      >步骤3:tokenization

      使用预先训练的现代基准词架令牌化数据集。此过程将文本转换为适合模型的数值输入。命令“ Tokenized_test_dataset [0]”将打印标记测试数据集的第一个示例,包括标记输入,例如输入ID和标签。

      #Load the dataset
      from datasets import load_dataset
      imdb = load_dataset("imdb")
      #print the first test sample
      imdb["test"][0]
      
      登录后复制
      登录后复制

      >步骤4:初始化现代伯特基本模型的情感分类

      >
      #install libraries
      !pip install  git+https://github.com/huggingface/transformers.git datasets accelerate scikit-learn -Uqq
      !pip install -U transformers>=4.48.0
      
      import torch
      from transformers import AutoTokenizer, AutoModelForSequenceClassification, TrainingArguments, Trainer,AutoModelForMaskedLM,AutoConfig
      from datasets import load_dataset
      登录后复制
      登录后复制

      >步骤5:准备数据集

      >通过将情感标签列(标签)重命名为“标签”并删除不必要的列来准备数据集。

      #Load the dataset
      from datasets import load_dataset
      imdb = load_dataset("imdb")
      #print the first test sample
      imdb["test"][0]
      
      登录后复制
      登录后复制

      步骤6:定义计算指标

      >让我们使用f1_score作为度量来评估我们的模型。我们将定义一个函数来处理评估预测并计算其F1分数。这是我们将模型的预测与真实标签进行比较。 

      #initialize the tokenizer and the model
      tokenizer = AutoTokenizer.from_pretrained("answerdotai/ModernBERT-base")
      model = AutoModelForMaskedLM.from_pretrained("answerdotai/ModernBERT-base")
      
      #define the tokenizer function
      def tokenizer_function(example):
          return tokenizer(
              example["text"],
              padding="max_length",  
              truncation=True,       
              max_length=512,      ## max length can be modified
              return_tensors="pt"
          )
      
      #tokenize training and testing data set based on above defined tokenizer function
      tokenized_train_dataset = imdb["train"].map(tokenizer_function, batched=True)
      tokenized_test_dataset = imdb["test"].map(tokenizer_function, batched=True)
      
      #print the tokenized output of first test sample
      print(tokenized_test_dataset[0])
      登录后复制

      >步骤7:设置培训参数

      >定义超参数和其他配置,用于使用拥抱脸的训练记录来微调模型。让我们理解一些论点:

      • > train_bsz,val_bsz :指示培训和验证的批次大小。批量大小确定在更新模型内部参数之前处理的样品数量。
      • >
      • > lr:学习率控制模型权重相对于损耗梯度的调整。
      • betas :这些是Adam Optimizer的beta参数。
      • > n_epochs :时代的数量,指示完整的通过整个培训数据集。
      • >
      • eps :在分母中添加了一个小常数,以提高亚当优化器中的数值稳定性。
      • > wd :代表体重衰减,这是一种正规化技术,可以防止过度适应大量的重量。
      #initialize the model
      config = AutoConfig.from_pretrained("answerdotai/ModernBERT-base")
      
      model = AutoModelForSequenceClassification.from_config(config)
      登录后复制
      步骤8:模型培训

      >使用培训师类执行模型培训和评估过程。

      #data preparation step - 
      train_dataset = tokenized_train_dataset.remove_columns(['text']).rename_column('label', 'labels')
      test_dataset = tokenized_test_dataset.remove_columns(['text']).rename_column('label', 'labels')
      登录后复制

      与现代伯特一起增强情感分析>步骤9:评估

      在测试数据集上评估训练的模型。

      import numpy as np
      from sklearn.metrics import f1_score
       
      # Metric helper method
      def compute_metrics(eval_pred):
          predictions, labels = eval_pred
          predictions = np.argmax(predictions, axis=1)
          score = f1_score(
                  labels, predictions, labels=labels, pos_label=1, average="weighted"
              )
          return {"f1": float(score) if score == 1 else score}
      登录后复制

      与现代伯特一起增强情感分析

      与现代伯特一起增强情感分析步骤10:保存微调模型

      >保存微调模型和代币器以进行进一步的重复使用。

      >

      步骤11:预测评论的情感
      #define training arguments 
      train_bsz, val_bsz = 32, 32 
      lr = 8e-5
      betas = (0.9, 0.98)
      n_epochs = 2
      eps = 1e-6
      wd = 8e-6
      
      training_args = TrainingArguments(
          output_dir=f"fine_tuned_modern_bert",
          learning_rate=lr,
          per_device_train_batch_size=train_bsz,
          per_device_eval_batch_size=val_bsz,
          num_train_epochs=n_epochs,
          lr_scheduler_type="linear",
          optim="adamw_torch",
          adam_beta1=betas[0],
          adam_beta2=betas[1],
          adam_epsilon=eps,
          logging_strategy="epoch",
          eval_strategy="epoch",
          save_strategy="epoch",
          load_best_model_at_end=True,
          bf16=True,
          bf16_full_eval=True,
          push_to_hub=False,
      )
      登录后复制

      >这里:0表示负面审查,1表示积极的审查。在我的新示例中,输出应为[0,1],因为无聊表示负面评论(0),而壮观的意见则表示为1,因此将以输出为1。>

      #Create a Trainer instance
      trainer = Trainer(
          model=model,                         # The pre-trained model
          args=training_args,                  # Training arguments
          train_dataset=train_dataset,         # Tokenized training dataset
          eval_dataset=test_dataset,           # Tokenized test dataset
          compute_metrics=compute_metrics,     # Personally, I missed this step, my output won't show F1 score  
      )
      登录后复制

      与现代伯特一起增强情感分析现代伯特

      的局限性

      虽然Modernbert对传统Bert进行了一些改进,但它仍然存在一些局限性:>
      1. >培训数据偏见:它在英语和代码数据上进行了训练,因此它不能在其他语言或非代码文本上效率地执行。>
      2. 复杂性
      3. :架构增强功能和新技术(如闪光灯注意力和旋转位置嵌入)为模型增添了复杂性,这可能会使实现和对特定任务进行微调。>>>>> >
      4. 推理速度
      5. :虽然闪光注意提高了推理速度,但使用完整的8,192个令牌窗口可能仍然较慢。>
      6. 结论
      Modernbert以更快的处理,更好地处理长期处理和增强的可解释性来取得伯特的基础,并改善了基础。尽管它仍然面临诸如训练数据偏见和复杂性之类的挑战,但它代表了NLP的重大飞跃。 Modernbert为情感分析和文本分类等任务开辟了新的可能性,使高级语言理解更加有效,更易于访问。

      >

      钥匙要点

      现代伯特通过修复效率低下和有限的上下文处理等问题来改善BERT。

      >它使用闪光注意力和旋转位置嵌入速度进行更快的处理和更长的文本支持。
      • > Modernbert非常适合情感分析和文本分类等任务。>
      • >它仍然有一些局限性,例如对英语和代码数据的偏见。
      • 诸如拥抱脸和wandb之类的工具使实施和使用易于实现。
      • >
      • 参考:

      > Modernbert博客 MODERBERT文档

      • >本文所示的媒体不归Analytics Vidhya拥有,并由作者酌情使用。
      • 常见问题
      > Q1。什么是仅编码的体系结构? Ans。 仅编码器架构过程输入序列而不生成输出序列,重点是理解和编码输入。 Bert的局限性是什么? BERT的某些局限性包括高计算资源,固定上下文长度,效率低下,复杂性以及缺乏常识推理。什么是注意机制?注意机制是一种允许模型专注于输入的特定部分以确定哪些部分或多或少重要的技术。什么是交替注意?这种机制在关注文本序列中的本地和全局环境之间交替。 当地的注意力突出了相邻的单词或短语,收集细粒度的信息,而全球注意力识别整个文本中的整体模式和关系。

      > Q5。什么是旋转电位嵌入?它们与固定位置嵌入有何不同?与仅捕获绝对位置的固定位置嵌入相反,旋转位置嵌入(绳索)使用旋转矩阵来编码绝对位置和相对位置。绳索在扩展序列中的性能更好。

      Q6。 Modernbert的潜在应用是什么? Modernbert的某些应用可以在文本分类,情感分析,问答,指定性识别,法律文本分析,代码理解等领域中进行。 wandb api需要什么以及为什么需要?权重和偏见(W&B)是跟踪,可视化和共享ML实验的平台。它有助于跟踪模型指标,可视化实验数据,共享结果等等。 它有助于监视指标,例如准确性,可视化进度,调整超参数,跟踪模型的版本等。

      >

以上是与现代伯特一起增强情感分析的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板