허깅페이스 트렌스포머 활용강좌, 파이토치 사전학습

딥러닝의 발전과 함께 자연어 처리(NLP) 분야에서도 큰 혁신이 일어나고 있습니다. 그 중에서도 허깅페이스(Hugging Face)에서 제공하는 트렌스포머(Transformers) 라이브러리는 사전학습(pre-trained)된 언어 모델들을 손쉽게 활용할 수 있도록 도와줍니다. 본 글에서는 허깅페이스 트렌스포머의 기본 개념과 사용 방법에 대해 소개하고, 파이토치(PyTorch) 기반의 사전학습된 모델을 활용하는 방법에 대해 자세히 설명하겠습니다.

1. 허깅페이스 트렌스포머 라이브러리란?

허깅페이스 트렌스포머 라이브러리는 다양한 자연어 처리 태스크를 위한 사전학습된 모델들을 포함하고 있습니다. 이러한 모델들은 예를 들어 번역, 텍스트 분류, 요약, 질문 응답 등과 같은 다양한 NLP 작업을 수행할 수 있도록 훈련되어 있습니다. 트렌스포머 아키텍처는 셀프 어텐션(self-attention) 메커니즘을 통해 입력 시퀀스의 각 단어의 중요도를 계산하여 문맥을 이해하는 데 탁월한 성능을 보여줍니다.

1.1 설치하기

허깅페이스 트렌스포머 라이브러리를 설치하기 위해서는 먼저 파이썬 환경을 설정해야 합니다. 아래의 명령어를 통해 설치할 수 있습니다.

pip install transformers torch

2. 사전학습 모델 이해하기

사전학습된 모델은 대규모 데이터셋으로 훈련되어 특정 태스크에 대한 성능을 높이기 위해 미세조정(fine-tuning)할 수 있습니다. 예를 들어 BERT, GPT-2, RoBERTa 등과 같은 모델들이 있습니다. 이러한 모델들은 기본적인 언어 이해를 위해 설계되었으며, 다양한 데이터셋에 대해 사전학습을 거쳤습니다.

2.1 BERT 모델

BERT(Bidirectional Encoder Representations from Transformers) 모델은 양 방향성 시퀀스 인코더로, 문맥을 반영하여 단어의 의미를 파악합니다. 수많은 자연어 처리 태스크에서 뛰어난 성능을 보이는 이 모델은 문장 내 단어들을 둘러싼 문맥을 동시에 이해할 수 있는 능력을 가지고 있습니다.

2.2 GPT-2 모델

GPT-2(Generative Pre-trained Transformer 2)는 주로 텍스트 생성 작업에 사용되는 모델로, 순차적인 데이터 처리를 통해 문맥을 이해하고 생성하는 데 강점을 보입니다. 이 모델은 특정 주제나 스타일의 문서를 생성하는 데 널리 활용됩니다.

3. 파이토치(PyTorch)와 함께 사용하는 방법

파이토치는 딥러닝 모델을 구성하고 학습하는 데 매우 유용한 프레임워크입니다. 허깅페이스의 트렌스포머 라이브러리는 파이토치와 함께 사용할 수 있도록 설계되어 있어, 모델을 쉽게 로드하고 활용할 수 있습니다.

3.1 텍스트 분류 예제

이번 섹션에서는 BERT 모델을 사용하여 간단한 텍스트 분류 작업을 수행하는 예제를 보여드리겠습니다. Text Classification을 위해 IMDB 영화 리뷰 데이터셋을 사용할 예정입니다.

3.1.1 데이터셋 준비

먼저 IMDB 데이터셋을 다운로드하고 사전처리합니다. 이를 위해 pandas 라이브러리를 사용할 것입니다.

import pandas as pd

# IMDB 영화 리뷰 데이터 다운로드
url = "https://ai.stanford.edu/~amaas/data/sentiment/aclImdb_v1.tar.gz"
imdb_data = pd.read_csv(url)

# 데이터 전처리
df = pd.DataFrame(imdb_data)
df['label'] = df['label'].map({'pos': 1, 'neg': 0})
df.head()

3.1.2 데이터셋 로드와 분리

데이터셋을 로드한 후 학습 데이터와 검증 데이터를 분리합니다.

from sklearn.model_selection import train_test_split

# train/test split
train_data, test_data = train_test_split(df, test_size=0.2, random_state=42)

# 분리된 데이터 확인
print(f'훈련 데이터 크기: {len(train_data)}, 테스트 데이터 크기: {len(test_data)}')

3.1.3 허깅페이스 데이터셋 설정

이제 Hugging Face의 Dataset 클래스를 사용하여 데이터를 불러오겠습니다.

from transformers import Dataset

# Hugging Face Dataset 형식으로 변환
train_dataset = Dataset.from_pandas(train_data)
test_dataset = Dataset.from_pandas(test_data)

3.1.4 모델 로드하기

사전학습된 BERT 모델을 불러옵니다. 이러한 모델들은 AutoModelForSequenceClassification 클래스를 통해 호출할 수 있습니다.

from transformers import AutoTokenizer, AutoModelForSequenceClassification

# 사전학습된 BERT 모델과 토크나이저 로드
model_name = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)

3.1.5 데이터 전처리

텍스트 데이터를 BERT 모델이 처리할 수 있는 입력 형식으로 변환합니다.

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

tokenized_train_data = train_dataset.map(preprocess_function, batched=True)
tokenized_test_data = test_dataset.map(preprocess_function, batched=True)

3.1.6 모델 학습하기

모델을 학습시키기 위해 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_train_data,
    eval_dataset=tokenized_test_data
)

# 모델 훈련
trainer.train()

3.1.7 모델 평가하기

훈련된 모델의 성능을 평가합니다.

4. 결론

허깅페이스 트렌스포머 라이브러리를 활용하면, 사전학습된 모델을 손쉽게 다룰 수 있습니다. BERT와 같은 모델은 텍스트 분류 외에도 다양한 자연어 처리 작업에 활용될 수 있으며, 연구 및 산업에서 중요한 역할을 하고 있습니다. 본 블로그에서는 모델의 설치부터 학습, 평가까지의 과정을 함께 살펴보았습니다. 실무에 적용할 수 있는 유용한 지식을 습득하셨기를 바랍니다.

5. 참고자료