허깅페이스 트렌스포머 활용강좌, 파인튜닝 없는 BERT 분류

본 강좌에서는 딥러닝 및 자연어 처리 분야에서 널리 사용되는 BERT 모델을 활용하여 파인튜닝 없이 분류 작업을 수행하는 방법에 대해 알아보겠습니다. BERT(Bidirectional Encoder Representations from Transformers)는 문맥을 이해하는 데 있어 혁신적인 모델로, 구글에 의해 개발되었습니다. 본 강좌는 허깅페이스(Hugging Face) 라이브러리를 활용하여 BERT 모델을 간편하게 사용할 수 있는 방법에 중점을 둡니다.

1. 허깅페이스 트랜스포머란?

허깅페이스 트랜스포머 라이브러리는 다양한 사전 학습된 NLP 모델을 제공하는 파이썬 라이브러리입니다. 이 라이브러리를 사용하면 BERT, GPT-2, T5 등 여러 자연어 처리 모델을 손쉽게 사용할 수 있습니다. 또한 전이 학습을 통해 특정 작업에 맞게 모델을 조정할 수도 있습니다.

2. BERT의 기본 개념

BERT는 Bidirectional Encoder Representations from Transformers의 약자로, 양방향의 문맥 정보를 활용할 수 있는 특징이 있습니다. 전통적인 RNN이나 LSTM과 달리, BERT는 Transformer 구조를 기반으로 하여, 입력 데이터의 모든 단어를 동시에 고려하여 문맥을 이해합니다.

3. 파인튜닝 없이 BERT 분류하기

일반적으로 BERT 모델은 특정 작업에 맞게 파인튜닝하는 것이 일반적입니다. 하지만 우리는 파인튜닝 없이도 BERT 모델을 활용하여 텍스트 분류 작업을 수행할 수 있습니다. 다음은 파인튜닝 없이 BERT 모델을 사용하는 방법에 대한 단계별 설명입니다.

3.1 라이브러리 설치

먼저 필요한 라이브러리를 설치해야 합니다. 아래 명령어를 사용하여 허깅페이스의 트랜스포머와 토크나이저 라이브러리를 설치합니다.

!pip install transformers torch

3.2 데이터 준비

다음으로 사용할 데이터를 준비합니다. 예를 들어, 긍정적 문장과 부정적 문장을 구분하는 데이터셋을 사용할 수 있습니다. 아래는 간단한 예시입니다.

data = [
        {"text": "이 영화는 정말 재미있었어요.", "label": "positive"},
        {"text": "최악의 영화입니다.", "label": "negative"},
        {"text": "정말 훌륭한 연기였습니다.", "label": "positive"},
        {"text": "이건 시간 낭비입니다.", "label": "negative"},
    ]

3.3 BERT 모델과 토크나이저 불러오기

허깅페이스 라이브러리를 사용하여 사전 학습된 BERT 모델과 토크나이저를 불러올 수 있습니다. 아래의 코드를 사용하여 불러옵니다.

from transformers import BertTokenizer, BertModel
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')

3.4 텍스트 데이터 전처리

이제 데이터에서 텍스트를 토큰화하고 입력 텐서를 만들기 위한 전처리를 수행해야 합니다. BERT 모델의 입력 형식에 맞게 데이터를 변환합니다.

inputs = tokenizer([d['text'] for d in data], padding=True, truncation=True, return_tensors="pt")
labels = [d['label'] for d in data]

3.5 모델 출력 추출

BERT 모델을 통해 각 텍스트의 출력 벡터를 생성할 수 있습니다. 이 벡터는 다음 단계에서 분류 작업에 사용됩니다.

with torch.no_grad():
    outputs = model(**inputs)
    embeddings = outputs.last_hidden_state[:, 0, :].numpy()  # CLS 토큰 사용

3.6 텍스트 분류기 구현

이제 모델의 출력인 임베딩을 사용하여 간단한 분류기를 구축할 수 있습니다. 예를 들어, 로지스틱 회귀를 사용할 수 있습니다.

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 임베딩과 레이블을 벡터화
X = embeddings
y = [1 if label == "positive" else 0 for label in labels]

# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 로지스틱 회귀 모델 학습
classifier = LogisticRegression()
classifier.fit(X_train, y_train)

# 예측
y_pred = classifier.predict(X_test)

# 정확도 평가
accuracy = accuracy_score(y_test, y_pred)
print(f"모델 정확도: {accuracy:.2f}")  # 모델의 정확도를 출력합니다.

4. 결론

본 강좌에서는 허깅페이스 트랜스포머 라이브러리를 활용하여 파인튜닝 없이 BERT 모델을 사용하는 방법에 대해 배웠습니다. BERT의 사전 학습된 임베딩을 활용하여 간단한 분류 작업을 수행할 수 있음을 확인하였고, 이를 통해 자연어 처리의 기초를 다질 수 있었습니다. 자연어 처리가 필요한 다양한 응용 분야에서 BERT 모델이 유용하게 사용될 수 있음을 알 수 있습니다.

5. 참고자료