허깅페이스 트렌스포머 활용강좌, 정확도

본 강좌에서는 허깅페이스의 트랜스포머 라이브러리를 사용하여 자연어 처리(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) 태스크를 쉽고 빠르게 수행할 수 있습니다. 특히, 사전 훈련된 모델을 통해 작은 데이터셋에서도 좋은 성능을 얻을 수 있습니다. 정확도를 평가하는 과정과 이를 통해 모델의 성능을 이해하는 것은 딥러닝을 배우는 데 중요한 부분입니다.

8. 참고 자료