본 강좌에서는 허깅페이스의 트랜스포머 라이브러리를 사용하여 자연어 처리(NLP) 태스크를 수행하는 방법을 설명하고, 모델의 정확도를 평가하는 방법에 대해 다룰 것입니다. 허깅페이스는 다양한 사전 학습(pre-trained) 모델을 제공하여 NLP 작업에서 쉽게 활용할 수 있습니다.
1. 허깅페이스 트랜스포머란?
허깅페이스 트랜스포머 라이브러리는 다양한 최신 NLP 모델을 제공하는 Python 라이브러리입니다. 비지도 학습, 지도 학습을 통해 모델을 훈련시킬 수 있으며, 특히 BERT, GPT, T5 등의 전이 학습 모델을 쉽게 사용할 수 있습니다.
1.1. 주요 특징
- 사전 학습된 모델 다운로드 방법이 간편하다.
- PyTorch 및 TensorFlow와 호환된다.
- 다양한 NLP 태스크를 위한 간단한 API를 제공한다.
2. 환경 구축
코드를 실행하기 위해 필요한 라이브러리를 설치합니다. 아래의 명령어로 트랜스포머 및 관련 라이브러리를 설치합니다:
pip install transformers torch
3. 데이터셋 준비
이제 간단한 감정 분석을 위한 데이터를 준비해보겠습니다. 데이터는 긍정적 및 부정적 리뷰로 구성됩니다.
import pandas as pd
data = {
"text": ["이 영화는 정말 재미있어요!", "최악의 영화였습니다.", "어마어마한 스토리라인!", "다시는 보고 싶지 않아요."],
"label": [1, 0, 1, 0] # 1: 긍정, 0: 부정
}
df = pd.DataFrame(data)
print(df)
4. 모델 불러오기 및 데이터 전처리
허깅페이스 라이브러리를 사용하여 사전 학습된 BERT 모델을 불러오고, 데이터를 전처리합니다.
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_data = df.apply(tokenize_function, axis=1)
print(tokenized_data.head())
5. 모델 훈련
모델을 훈련하기 위해 PyTorch를 사용하여 훈련 루프를 설정하고, 모델을 학습시킵니다.
import torch
from transformers import BertForSequenceClassification
from torch.utils.data import DataLoader, Dataset
class ReviewDataset(Dataset):
def __init__(self, texts, labels):
self.texts = texts
self.labels = labels
def __len__(self):
return len(self.texts)
def __getitem__(self, idx):
return {
'input_ids': self.texts[idx]['input_ids'],
'attention_mask': self.texts[idx]['attention_mask'],
'labels': torch.tensor(self.labels[idx])
}
# 데이터셋 생성
dataset = ReviewDataset(tokenized_data.tolist(), df['label'].tolist())
dataloader = DataLoader(dataset, batch_size=2, shuffle=True)
# 모델 불러오기
model = BertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=2)
# 훈련을 위한 옵티마이저 설정
optimizer = torch.optim.AdamW(model.parameters(), lr=1e-5)
# 모델 훈련
model.train()
for epoch in range(3): # 에포크 수
for batch in dataloader:
optimizer.zero_grad()
outputs = model(input_ids=batch['input_ids'], attention_mask=batch['attention_mask'], labels=batch['labels'])
loss = outputs.loss
loss.backward()
optimizer.step()
print("모델 훈련 완료!")
6. 정확도 평가
모델의 정확도를 평가하기 위해 테스트 데이터셋을 준비하고, 예측을 수행합니다.
from sklearn.metrics import accuracy_score
# 테스트 데이터셋 (임의로 생성된 예시)
test_data = {
"text": ["이 영화는 기대 이상이었어요!", "너무 지루했고, 슬픈 이야기였어요."],
"label": [1, 0]
}
test_df = pd.DataFrame(test_data)
test_tokenized = test_df.apply(tokenize_function, axis=1)
# 예측 수행
model.eval()
predictions = []
with torch.no_grad():
for test_input in test_tokenized:
outputs = model(input_ids=test_input['input_ids'], attention_mask=test_input['attention_mask'])
predictions.append(torch.argmax(outputs.logits, dim=-1).item())
# 정확도 계산
accuracy = accuracy_score(test_df['label'], predictions)
print(f"모델 정확도: {accuracy * 100:.2f}%")
7. 결론
허깅페이스 트랜스포머 라이브러리를 사용하면 자연어 처리(NLP) 태스크를 쉽고 빠르게 수행할 수 있습니다. 특히, 사전 훈련된 모델을 통해 작은 데이터셋에서도 좋은 성능을 얻을 수 있습니다. 정확도를 평가하는 과정과 이를 통해 모델의 성능을 이해하는 것은 딥러닝을 배우는 데 중요한 부분입니다.