허깅페이스 트렌스포머 활용강좌, Trainer 클래스 사전학습

딥러닝은 현재 다양한 분야에서 활용되며, 그 중 자연어 처리(NLP)는 특히 빠르게 발전하고 있는 분야입니다. 허깅페이스(Hugging Face)는 이러한 딥러닝 모델을 쉽게 다룰 수 있도록 다양한 라이브러리를 제공하는 플랫폼으로 유명합니다. 본 강좌에서는 허깅페이스의 Transformers 라이브러리를 활용하여 사전학습(pre-training) 및 Trainer 클래스를 사용하는 방법에 대해 자세히 설명하고, 실습할 수 있는 파이썬 코드 예제를 제공합니다.

1. 허깅페이스 Transformers 소개

허깅페이스 Transformers는 변환기(Transformer) 아키텍처를 기반으로 한 다양한 자연어 처리 모델을 쉽게 사용할 수 있도록 해주는 라이브러리입니다. 이 라이브러리는 BERT, GPT-2, RoBERTa, T5 등과 같은 다양한 사전학습 모델을 제공합니다. 이를 통해 우리는 복잡한 모델 구현 없이도 간편하게 자연어 처리 작업을 수행할 수 있습니다.

2. Trainer 클래스 개요

Trainer 클래스는 허깅페이스 Transformers 라이브러리에서 제공하는 고수준 API로, 모델 훈련과 평가를 간편하게 수행할 수 있도록 돕는 클래스입니다. Trainer 클래스를 사용하면 사용자 정의 훈련 루프를 작성하지 않고도 원하는 모델을 학습할 수 있습니다. Trainer 클래스를 사용할 때는 데이터셋, 모델, 훈련 인자(training arguments), 그리고 평가 인자를 지정해야 합니다.

2.1. 필요한 라이브러리 설치

먼저 라이브러리를 설치해야 합니다. 아래의 명령어를 실행하여 Transformers와 함께 필요한 라이브러리를 설치할 수 있습니다.

!pip install transformers datasets

2.2. Trainer 클래스 사용 준비

Trainer 클래스를 사용하기 위해 필요한 준비 작업은 다음과 같습니다:

  • 모델 로딩: 허깅페이스의 모델 허브에서 원하는 모델을 로딩합니다.
  • 토크나이저 설정: 입력 데이터를 벡터로 변환하기 위해 토크나이저를 설정합니다.
  • 데이터셋 준비: 훈련 및 평가에 사용할 데이터셋을 준비합니다.
  • 훈련 인자 설정: 훈련 과정에서 사용할 다양한 인자들을 설정합니다.

3. 데이터셋 준비하기

여기서는 IMDb 영화 리뷰 데이터셋을 사용하여 긍정 및 부정 리뷰를 분류하는 모델을 학습할 것입니다. 이를 위해 Hugging Face의 datasets 라이브러리를 활용하여 IMDb 데이터셋을 다운로드하겠습니다.

from datasets import load_dataset

dataset = load_dataset("imdb")
train_dataset = dataset["train"]
test_dataset = dataset["test"]

4. 모델과 토크나이저 설정하기

우리는 BERT 모델을 사용할 것이며, Hugging Face에서 제공하는 ‘bert-base-uncased’ 모델을 로드하겠습니다. 동시에 해당 모델에 맞는 토크나이저도 설정해야 합니다.

from transformers import BertTokenizer, BertForSequenceClassification

model_name = "bert-base-uncased"
tokenizer = BertTokenizer.from_pretrained(model_name)
model = BertForSequenceClassification.from_pretrained(model_name)

5. 데이터셋 전처리

데이터셋을 모델에 맞게 전처리해야 합니다. 텍스트 데이터를 토큰화하고, 필요하면 패딩을 추가하여 고정된 길이로 맞추겠습니다.

def preprocess_function(examples):
    return tokenizer(examples["text"], truncation=True, padding="max_length", max_length=512)

train_tokenized = train_dataset.map(preprocess_function, batched=True)
test_tokenized = test_dataset.map(preprocess_function, batched=True)

6. Trainer 클래스 설정

이제 Trainer 클래스를 설정하기 위해 훈련 인자를 정의해야 합니다. 훈련 인자는 훈련 과정의 하이퍼파라미터를 정의합니다.

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_tokenized,
    eval_dataset=test_tokenized,
)

7. 모델 훈련

모델 훈련을 시작합니다. 아래 코드로 훈련을 수행할 수 있습니다.

trainer.train()

8. 모델 평가

훈련 후 모델의 성능을 평가할 수 있습니다. 평가 메트릭을 확인하여 모델이 얼마나 잘 작동하는지 알아보겠습니다.

trainer.evaluate()

9. 모델 예측

이제 훈련된 모델을 사용하여 새로운 데이터에 대한 예측을 수행할 수 있습니다.

def predict(texts):
    inputs = tokenizer(texts, padding=True, truncation=True, return_tensors="pt")
    with torch.no_grad():
        outputs = model(**inputs)
    predictions = torch.argmax(outputs.logits, dim=-1)
    return predictions

sample_texts = ["I love this movie!", "This is the worst film ever."]
predictions = predict(sample_texts)
print(predictions)

10. 마무리

본 강좌에서는 허깅페이스의 Transformers 라이브러리를 활용하여 Trainer 클래스를 이용한 모델 사전학습에 대해 알아보았습니다. 허깅페이스는 다양한 사전학습된 모델을 제공하여, 자연어 처리에서의 여러 작업을 쉽게 수행할 수 있도록 돕고 있습니다. 이번 예제를 통해 손쉽게 모델을 훈련하고 평가하는 방법을 익혔기를 바랍니다. 앞으로도 허깅페이스와 딥러닝의 다양한 가능성을 탐색해 나가시길 바랍니다.

감사합니다!