如何使用Hugging Face Transformers為情緒分析微調(diào)BERT?
譯文譯者 | 布加迪
審校 | 重樓
情緒分析指用于判斷文本中表達(dá)的情緒的自然語言處理(NLP)技術(shù),它是客戶反饋評估、社交媒體情緒跟蹤和市場研究等現(xiàn)代應(yīng)用背后的一項重要技術(shù)。情緒可以幫助企業(yè)及其他組織評估公眾意見、提供改進(jìn)的客戶服務(wù),并豐富產(chǎn)品或服務(wù)。
BERT的全稱是來自Transformers的雙向編碼器表示,這是一種語言處理模型,最初發(fā)布時通過了解上下文中的單詞,提高NLP的先進(jìn)水平,大大超越了之前的模型。事實證明,BERT的雙向性(同時讀取特定單詞的左右上下文)在情緒分析等用例中特別有價值。
在這篇講解全面的文章中,您將學(xué)會如何使用Hugging Face Transformers庫為您自己的情緒分析項目微調(diào)BERT。無論您是新手還是現(xiàn)有的NLP從業(yè)者,我們都將在這個循序漸進(jìn)的教程中介紹許多實用的策略和注意事項,以確保您完全能夠根據(jù)自己的目的適當(dāng)?shù)匚⒄{(diào)BERT。
搭建環(huán)境
在對模型進(jìn)行微調(diào)之前,需要滿足一些必要的先決條件。具體來說,除了至少需要PyTorch和Hugging Face的數(shù)據(jù)集庫外,還需要至少Hugging Face Transformers。您可以這么做。
pip install transformers torch datasets
預(yù)處理數(shù)據(jù)
您將需要選擇一些數(shù)據(jù)來訓(xùn)練文本分類器。在這里,我們將使用IMDb影評數(shù)據(jù)集,這是用于演示情緒分析的例子之一。不妨接著使用datasets庫加載數(shù)據(jù)集。
from datasets import load_dataset
dataset = load_dataset("imdb")
print(dataset)
我們需要對數(shù)據(jù)進(jìn)行標(biāo)記,以便為自然語言處理算法做好準(zhǔn)備。BERT有一個特殊的標(biāo)記化步驟,確保當(dāng)一個句子片段被轉(zhuǎn)換時,它會為人類盡可能保持連貫性。不妨看看我們?nèi)绾问褂脕碜訲ransformers的BertTokenizer對數(shù)據(jù)進(jìn)行標(biāo)記。
from transformers import BertTokenizer
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
def tokenize_function(examples):
return tokenizer(examples['text'], padding="max_length", truncation=True)
tokenized_datasets = dataset.map(tokenize_function, batched=True)
準(zhǔn)備數(shù)據(jù)集
不妨將數(shù)據(jù)集分成訓(xùn)練集和驗證集,以評估模型的性能。以下是我們這么做的方法。
from datasets import train_test_split
train_testvalid =
tokenized_datasets['train'].train_test_split(test_size=0.2)
train_dataset = train_testvalid['train']
valid_dataset = train_testvalid['test']
數(shù)據(jù)加載器(DataLoader)有助于在訓(xùn)練過程中有效地管理批量數(shù)據(jù)。下面我們將為訓(xùn)練數(shù)據(jù)集和驗證數(shù)據(jù)集創(chuàng)建數(shù)據(jù)加載器。
from torch.utils.data import DataLoader
train_dataloader = DataLoader(train_dataset, shuffle=True, batch_size=8)
valid_dataloader = DataLoader(valid_dataset, batch_size=8)
建立用于微調(diào)的BERT模型
我們將使用BertForSequenceClassification類來加載我們的模型,該模型已經(jīng)為序列分類任務(wù)進(jìn)行了預(yù)訓(xùn)練。以下是我們這么做的方法。
from transformers import BertForSequenceClassification, AdamW
model = BertForSequenceClassification.from_pretrained('bert-base-uncased',
num_labels=2)
訓(xùn)練模型
訓(xùn)練我們的模型包括定義訓(xùn)練循環(huán)、指定損失函數(shù)、優(yōu)化器和額外的訓(xùn)練參數(shù)。下面是我們設(shè)置和運(yùn)行訓(xùn)練循環(huán)的方法。
from transformers import Trainer, TrainingArguments
training_args = TrainingArguments(
output_dir='./results',
evaluation_strategy="epoch",
learning_rate=2e-5,
per_device_train_batch_size=8,
per_device_eval_batch_size=8,
num_train_epochs=3,
weight_decay=0.01,
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_dataset,
eval_dataset=valid_dataset,
)
trainer.train()
評估模型
評估模型包括使用準(zhǔn)確性、精度、召回和F1分?jǐn)?shù)等度量指標(biāo)檢查其性能。下面是我們評估模型的方法。
metrics = trainer.evaluate()
print(metrics)
進(jìn)行預(yù)測
經(jīng)過微調(diào)后,我們現(xiàn)在可以使用該模型拿新數(shù)據(jù)進(jìn)行預(yù)測。下面是我們使用驗證集對我們的模型執(zhí)行推理的方法。
metrics = trainer.evaluate()
print(metrics)
結(jié)語
本教程介紹了使用Hugging Face Transformers為情緒分析微調(diào)BERT,包括搭建環(huán)境、數(shù)據(jù)集準(zhǔn)備和標(biāo)記化、數(shù)據(jù)加載器創(chuàng)建、模型加載和訓(xùn)練,以及模型評估和實時模型預(yù)測。
為情緒分析微調(diào)BERT在許多實際場景下都具有其價值,比如分析客戶反饋、跟蹤社交媒體情緒等。通過使用不同的數(shù)據(jù)集和模型,您可以稍加擴(kuò)展,用于自己的自然語言處理項目。
有關(guān)這些主題的更多信息,請查看以下資源:
- Hugging Face Transformers文檔:https://huggingface.co/transformers/
- PyTorch文檔:https://pytorch.org/docs/stable/index.html
- Hugging Face數(shù)據(jù)集文檔:https://huggingface.co/docs/datasets/
為了更深入地研究這些問題,提高您的自然語言處理和情緒分析能力,這些資源值得研究。
原文標(biāo)題:How to Fine-Tune BERT for Sentiment Analysis with Hugging Face Transformers,作者:Matthew Mayo
鏈接:https://www.kdnuggets.com/how-to-fine-tune-bert-sentiment-analysis-hugging-face-transformers。