自2018年推出以來,伯特(Bert)改變了自然語言處理。它在情感分析,問題回答和語言推論等任務中表現良好。伯特使用雙向訓練和基於變壓器的自我發揮,引入了一種新的方式來理解文本中的單詞之間的關係。但是,儘管取得了成功,但伯特還是有局限性。它在計算效率,處理更長的文本並提供可解釋性方面掙扎。這導致了Modernbert的發展,這是一個旨在應對這些挑戰的模型。 ModernBert提高了處理速度,更好地處理更長的文本,並為開發人員提供了更大的透明度。在本文中,我們將探討如何使用Modernbert進行情感分析,強調其特徵和對Bert的改進。
學習目標>本文是> > data Science Blogathon的一部分。 >目錄
>什麼是bert?問題> Modernbert通過結合更有效的算法(例如>> flash注意力 > > > > local-local-lobal inter-local-lobal Entercting注意)來解決這些局限性,從而優化了內存使用量並提高了處理速度。此外,ModernBert引入了增強功能,以通過集成諸如 旋轉位置嵌入(ROPE)
>
>現代伯特基鹼有22層和1.49億個參數
>現代伯特·塔爾格(Modernbert-Large)有28層和3.95億個參數
局部 - 全球交替注意
>僅在每三層之後才能參加完整的輸入。這是全球關注。
同時,所有其他層都有一個滑動窗口。在這個滑動窗口中,每個令牌都只能參加最接近的128個令牌。這是當地的關注。旋轉位置嵌入(繩索)是一種變壓器模型技術,它使用旋轉矩陣在序列中編碼令牌的位置。它包含了絕對和相對位置信息,調整了注意機制以了解令牌之間的順序和距離。繩索使用旋轉矩陣編碼令牌的絕對位置,還記下了相對位置信息或令牌之間的順序和距離。
毫無定論和測序>通常用於找到最長的令牌,添加毫無意義的填充令牌以填充其餘的較短序列以等於其長度。這增加了對無意義令牌的計算。毫無用處可以從序列中刪除不必要的填充令牌,減少浪費的計算。
>
>注意:
>我已經使用了A100 GPU在Google Colab上更快地處理。有關更多信息,請參閱:
>通過將情感標籤列(標籤)重命名為“標籤”並刪除不必要的列來準備數據集。 >讓我們使用f1_score作為度量來評估我們的模型。我們將定義一個函數來處理評估預測併計算其F1分數。這是我們將模型的預測與真實標籤進行比較。 >定義超參數和其他配置,用於使用擁抱臉的訓練記錄來微調模型。讓我們理解一些論點:
> Modernbert博客
MODERBERT文檔
> Q5。什麼是旋轉電位嵌入?它們與固定位置嵌入有何不同?與僅捕獲絕對位置的固定位置嵌入相反,旋轉位置嵌入(繩索)使用旋轉矩陣來編碼絕對位置和相對位置。繩索在擴展序列中的性能更好。 Q6。 Modernbert的潛在應用是什麼? Modernbert的某些應用可以在文本分類,情感分析,問答,指定性識別,法律文本分析,代碼理解等領域中進行。 wandb api需要什麼以及為什麼需要?權重和偏見(W&B)是跟踪,可視化和共享ML實驗的平台。它有助於跟踪模型指標,可視化實驗數據,共享結果等等。 它有助於監視指標,例如準確性,可視化進度,調整超參數,跟踪模型的版本等。
>步驟2:使用load_dataset函數加載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:定義計算指標
#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:設置培訓參數
#initialize the model
config = AutoConfig.from_pretrained("answerdotai/ModernBERT-base")
model = AutoModelForSequenceClassification.from_config(config)
>使用培訓師類執行模型培訓和評估過程。
#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:保存微調模型
>保存微調模型和代幣器以進行進一步的重複使用。
>
#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進行了一些改進,但它仍然存在一些局限性:
>
鑰匙要點現代伯特通過修復效率低下和有限的上下文處理等問題來改善BERT。
>它使用閃光注意力和旋轉位置嵌入速度進行更快的處理和更長的文本支持。
> Q1。什麼是僅編碼的體系結構? Ans。 僅編碼器架構過程輸入序列而不生成輸出序列,重點是理解和編碼輸入。 Bert的局限性是什麼? BERT的某些局限性包括高計算資源,固定上下文長度,效率低下,複雜性以及缺乏常識推理。什麼是注意機制?注意機制是一種允許模型專注於輸入的特定部分以確定哪些部分或多或少重要的技術。什麼是交替注意?這種機制在關注文本序列中的本地和全局環境之間交替。 當地的注意力突出了相鄰的單詞或短語,收集細粒度的信息,而全球注意力識別整個文本中的整體模式和關係。
以上是與現代伯特一起增強情感分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!