본 블로그 글에서는 트랜스포머 모델을 활용하여 영화 평론을 감정 분석하는 분류기를 만드는 과정을 안내합니다.
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")
이 프로세스를 통해, 트랜스포머 모델을 이용한 영화 리뷰 감정 분류기를 성공적으로 구축하고 평가할 수 있습니다. 이러한 분류기는 리뷰 텍스트의 긍정적 또는 부정적 감정을 파악하는 데 사용될 수 있습니다.
'AI , machine learning' 카테고리의 다른 글
| Ai - Elasticsearch를 이용한 개인화 검색 알고리즘 구현 (0) | 2023.06.13 |
|---|