首頁 >科技週邊 >人工智慧 >與現代伯特一起增強情感分析

與現代伯特一起增強情感分析

Joseph Gordon-Levitt
Joseph Gordon-Levitt原創
2025-03-09 09:46:11950瀏覽

自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