딥러닝과 자연어 처리(NLP)의 발전은 오늘날의 기술 혁신을 이끄는 중요한 요소 중 하나입니다. 여러 라이브러리와 프레임워크가 존재하지만, 허깅페이스(Hugging Face)의 트랜스포머(transformers) 라이브러리는 특히 직관적이고 사용하기 쉽게 설계되어 있습니다. 본 글에서는 허깅페이스의 트랜스포머를 활용하여 문서 분류(Classification) 모델을 구축하고, 모델 성능을 평가하는 방법에 대해 다룰 것입니다.
1. 허깅페이스 트랜스포머란?
허깅페이스 트랜스포머 라이브러리는 다양한 모델 아키텍처를 지원하며, Pre-trained 모델을 쉽게 사용할 수 있도록 해줍니다. 트랜스포머는 자연어 처리에 혁신을 일으킨 모델로, Attention Mechanism을 기반으로 하고 있습니다. 이 모델들은 대규모 데이터셋으로 사전 학습되어, 특정 작업에 대해 미세 조정(Fine-tuning)하여 사용할 수 있습니다.
2. 필요한 라이브러리 설치하기
허깅페이스 트랜스포머를 사용하기 위해 필요한 라이브러리를 설치하겠습니다. 주로 사용할 라이브러리는 transformers, torch, datasets입니다. 다음의 명령어를 사용하여 설치하세요:
!pip install transformers torch datasets
3. 데이터셋 준비하기
문서 분류를 위해 사용할 데이터셋을 준비합니다. 여기서는 AG News 데이터셋을 사용할 것입니다. AG News는 뉴스 기사 분류를 위한 데이터셋으로, 4개의 클래스를 갖고 있습니다:
- World
- Sports
- Business
- Science/Technology
다음의 코드를 실행하면 데이터셋을 다운로드받고, 학습 및 테스트 데이터로 나눕니다.
from datasets import load_dataset
dataset = load_dataset("ag_news")
4. 데이터 전처리
데이터를 불러온 후에는 텍스트와 레이블을 분리하고, 필요한 전처리를 진행해야 합니다. 다음 코드는 샘플 데이터와 라벨을 확인하는 과정을 보여줍니다.
train_texts = dataset['train']['text']
train_labels = dataset['train']['label']
test_texts = dataset['test']['text']
test_labels = dataset['test']['label']
print("샘플 뉴스 기사:", train_texts[0])
print("라벨:", train_labels[0])
5. 모델 및 토크나이저 준비하기
이제 transformers 라이브러리를 통해 사전 학습된 모델과 토크나이저를 불러옵니다. 여기서는 BertForSequenceClassification 모델을 사용할 것입니다.
from transformers import BertTokenizer, BertForSequenceClassification
model_name = "bert-base-uncased"
tokenizer = BertTokenizer.from_pretrained(model_name)
model = BertForSequenceClassification.from_pretrained(model_name, num_labels=4)
6. 데이터 토큰화
문서 분류를 위해 각 텍스트를 BERT 모델에 맞게 토큰화합니다. 다음 코드에서는 Padding을 추가해 배치 처리에 용이하도록 만듭니다.
def tokenize_function(examples):
return tokenizer(examples["text"], padding="max_length", truncation=True)
tokenized_datasets = dataset.map(tokenize_function, batched=True)
7. 모델 학습하기
모델을 학습하기 위해 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=16,
per_device_eval_batch_size=16,
num_train_epochs=3,
weight_decay=0.01,
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_datasets['train'],
eval_dataset=tokenized_datasets['test']
)
trainer.train()
8. 모델 평가하기
모델 학습이 완료되면, 평가 함수를 통해 성능을 측정할 수 있습니다. metrics 라이브러리를 활용하여 정확도를 계산해보겠습니다.
import numpy as np
from sklearn.metrics import accuracy_score
predictions, label_ids, _ = trainer.predict(tokenized_datasets['test'])
preds = np.argmax(predictions, axis=1)
accuracy = accuracy_score(label_ids, preds)
print("분류 정확도:", accuracy)
9. 결론
허깅페이스 트랜스포머를 사용하여 데이터셋을 불러오고, 사전 학습된 모델을 활용하여 텍스트 분류를 수행하는 방법을 알아보았습니다. 이 과정을 통해 자연어 처리 작업에서 트랜스포머 모델의 유용성을 알 수 있었습니다. 추가적으로 Hyperparameter 튜닝이나 다양한 모델을 시도해보면 성능을 더욱 향상시킬 수 있습니다.
10. 참고 자료
더 많은 정보와 예제를 원하는 독자를 위해 다음의 자료를 추천합니다: