본문 바로가기

AI , machine learning

AI - 트랜스포머 모델을 이용한 영화 평론 감정 분류기 만들기

본 블로그 글에서는 트랜스포머 모델을 활용하여 영화 평론을 감정 분석하는 분류기를 만드는 과정을 안내합니다.

1단계: 필요 라이브러리 설치 및 로그인

  • huggingface_hub, datasets, transformers, evaluate 라이브러리를 설치합니다.
  • Hugging Face Hub에 로그인하여 API 토큰을 활용합니다.
from huggingface_hub import notebook_login
from datasets import load_dataset
from transformers import AutoTokenizer
from transformers import DataCollatorWithPadding
import evaluate
import numpy as np
from transformers import pipeline
from transformers import AutoModelForSequenceClassification, TrainingArguments, Trainer

notebook_login()  # Hugging Face Hub에 로그인합니다.

2단계: 데이터셋 로드 및 확인

  • Hugging Face datasets 라이브러리를 이용해 IMDB 리뷰 데이터셋을 로드합니다.
  • 데이터셋의 구조와 샘플을 확인합니다.
imdb = load_dataset("imdb")  # IMDB 데이터셋을 로드합니다.
print(imdb["test"][0])  # IMDB 데이터셋의 첫 번째 테스트 데이터를 출력합니다.

3단계: 데이터 전처리

  • DistilBERT 토크나이저를 사용해 리뷰 텍스트를 토큰화합니다.
  • 데이터셋에 배치 처리를 적용하여 토큰화를 수행합니다.
  • DataCollatorWithPadding을 사용하여 배치 데이터에 패딩을 추가합니다.
tokenizer = AutoTokenizer.from_pretrained("distilbert-base-uncased")

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

tokenized_imdb = imdb.map(preprocess_function, batched=True)
data_collator = DataCollatorWithPadding(tokenizer=tokenizer)

4단계: 모델 설정 및 학습

  • DistilBERT 기반의 시퀀스 분류 모델을 초기화합니다.
  • 학습 파라미터를 TrainingArguments로 설정합니다.
  • Trainer 객체를 생성하여 모델 학습을 시작합니다.
model = AutoModelForSequenceClassification.from_pretrained("distilbert-base-uncased", num_labels=2, id2label=id2label, label2id=label2id)

training_args = TrainingArguments(
    output_dir="my_awesome_model",
    learning_rate=2e-5,
    per_device_train_batch_size=16,
    per_device_eval_batch_size=16,
    num_train_epochs=2,
    weight_decay=0.01,
    evaluation_strategy="epoch",
    save_strategy="epoch",
    load_best_model_at_end=True,
    push_to_hub=True,
)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_imdb["train"],
    eval_dataset=tokenized_imdb["test"],
    tokenizer=tokenizer,
    data_collator=data_collator,
    compute_metrics=compute_metrics,
)

trainer.train()

5단계: 모델 평가 및 테스트

  • 학습된 모델을 불러와 새로운 리뷰 텍스트에 대한 감정 분석을 수행합니다.
  • 테스트 문장에 대해 모델이 어떤 예측을 하는지 확인합니다.
model_path = "my_awesome_model"
model = AutoModelForSequenceClassification.from_pretrained(model_path)
tokenizer = AutoTokenizer.from_pretrained(model_path)
classifier = pipeline("sentiment-analysis", model=model, tokenizer=tokenizer)

test_sentences = ["This movie was truly amazing!", "I did not like this movie at all."]
for sentence in test_sentences:
    result = classifier(sentence)
    print(f"Text: {sentence}\nSentiment: {result}\n")

 

 

이 프로세스를 통해, 트랜스포머 모델을 이용한 영화 리뷰 감정 분류기를 성공적으로 구축하고 평가할 수 있습니다. 이러한 분류기는 리뷰 텍스트의 긍정적 또는 부정적 감정을 파악하는 데 사용될 수 있습니다.