딥러닝 분야에서 자연어 처리(NLP)는 매우 중요한 역할을 합니다. 특히 BERT(Bidirectional Encoder Representations from Transformers) 모델은 NLP 분야에서 널리 사용되고 있습니다.
이번 강좌에서는 허깅페이스(Hugging Face)의 트랜스포머 라이브러리를 사용하여 Mobile BERT 모델을 설치하고, 사전 학습된 모델을 불러오는 방법을 설명하겠습니다.
Mobile BERT는 경량화된 BERT 모델로, 모바일 기기에서도 효율적으로 사용할 수 있다는 장점이 있습니다.
1. 허깅페이스 트랜스포머 라이브러리란?
허깅페이스 트랜스포머 라이브러리는 다양한 최신 NLP 모델을 손쉽게 사용할 수 있도록 도와주는 파이썬 라이브러리입니다.
이 라이브러리를 통해 BERT, GPT-2, T5 등 다양한 사전 학습 모델을 불러오고, 여러 NLP 태스크에 적용할 수 있습니다. 또한, 사용자 맞춤형 훈련을 위한 API를 제공합니다.
2. Mobile BERT 이해하기
Mobile BERT는 Google이 개발한 경량화된 BERT 모델입니다. 전통적인 BERT 모델은 대규모 데이터셋에서 사전 학습되어 강력한 성능을 보이지만,
그만큼 모델의 크기가 커서 모바일 기기나 임베디드 시스템에서 사용하는 데 제약이 있습니다.
이에 반해 Mobile BERT는 크기를 줄이고도 BERT의 성능을 최대한 유지하도록 설계되었습니다. 이러한 특성 덕분에 Mobile BERT는 여러 NLP 태스크에 활용되고 있습니다.
3. 환경 설정 및 라이브러리 설치
Mobile BERT를 사용하기 위해서는 먼저 허깅페이스 트랜스포머 라이브러리와 기타 필수 라이브러리를 설치해야 합니다.
다음 명령어를 통해 pip를 이용해 필요한 라이브러리를 설치할 수 있습니다:
pip install transformers torch
위 명령어로 설치가 완료되면, Python 환경에서 Mobile BERT를 사용할 준비가 완료됩니다.
공식 웹사이트에서 CUDA에 맞는 PyTorch 버전을 선택하여 설치하세요.
4. 사전 학습 모델 불러오기
이제 Mobile BERT 모델을 불러와보겠습니다. 허깅페이스 트랜스포머 라이브러리에서는 미리 학습된 모델을 손쉽게 사용할 수 있도록
하기 위해 몇 가지 클래스를 제공합니다.
4.1 코드 예제
다음 코드를 통해 Mobile BERT를 불러옵니다:
from transformers import MobileBertTokenizer, MobileBertForSequenceClassification
import torch
# Mobile BERT 모델과 토크나이저 불러오기
model_name = "google/mobilebert-uncased"
tokenizer = MobileBertTokenizer.from_pretrained(model_name)
model = MobileBertForSequenceClassification.from_pretrained(model_name)
# 테스트할 문장
input_text = "허깅페이스 트랜스포머 매우 유용해요!"
# 입력 문장을 토크나이즈하고 텐서로 변환
inputs = tokenizer(input_text, return_tensors="pt")
# 모델에 입력하고 예측하기
with torch.no_grad():
logits = model(**inputs).logits
predicted_class = torch.argmax(logits, dim=-1).item()
print(f"예측된 클래스: {predicted_class}")
4.2 코드 설명
코드의 각 요소를 살펴보면 다음과 같습니다:
from transformers import MobileBertTokenizer, MobileBertForSequenceClassification
:
Mobile BERT 모델과 토크나이저를 불러옵니다.model_name = "google/mobilebert-uncased"
: 사용할 사전 학습 모델의 이름을 설정합니다.tokenizer = MobileBertTokenizer.from_pretrained(model_name)
: 모델에 대한 토크나이저를 초기화합니다.model = MobileBertForSequenceClassification.from_pretrained(model_name)
: 모델을 초기화합니다.
이 때 해당 모델은 문장 분류 작업에 적합합니다.inputs = tokenizer(input_text, return_tensors="pt")
: 입력된 문장을 토크나이즈하고 PyTorch 텐서로 변환합니다.with torch.no_grad():
: 텐서의 변화도 추적하지 않도록 설정하여 메모리 효율성을 높입니다.logits = model(**inputs).logits
: 모델을 통해 예측한 결과를 가져옵니다.predicted_class = torch.argmax(logits, dim=-1).item()
: 예측된 클래스 중 가장 높은 확률을 가진 클래스를 선택합니다.
5. Mobile BERT를 활용한 실제 예제
Mobile BERT 모델을 활용하여 문장 분류 작업을 수행하는 예제를 살펴보겠습니다.
접근 방식은 주어진 문장을 긍정적이거나 부정적인지 분류하는 것입니다.
5.1 데이터셋 준비
우선 신뢰성 있는 데이터를 준비해야 합니다. 예를 들어, 영화 리뷰 데이터셋은 긍정적/부정적 리뷰로 나뉘어 있습니다.
이를 사용하여 모델을 학습시킬 수 있습니다. 데이터를 로드하고 전처리를 수행하는 코드를 작성해보겠습니다.
import pandas as pd
# 샘플 데이터로드 (긍정 리뷰 5개, 부정 리뷰 5개)
data = {
"text": [
"나는 이 영화를 정말 좋아한다.",
"최고의 영화다!",
"정말 감동적이었다.",
"완벽한 명작이다.",
"이 영화는 내 마음을 울렸다.",
"이것은 시간 낭비이다.",
"나쁘고 지루하다.",
"정말 실망스러웠다.",
"절대 보지 마라.",
"이 영화는 최악이다."
],
"label": [1, 1, 1, 1, 1, 0, 0, 0, 0, 0]
}
df = pd.DataFrame(data)
print(df.head())
5.2 모델 학습
이제 데이터를 모델에 학습시키기 위한 과정입니다. 간단한 훈련 루프를 작성하여 모델을 학습시킬 수 있습니다.
그러나 여기서는 훈련 과정에 대한 보다 깊은 내용을 다루지 않고, 주어진 데이터로 간단한 전이 학습을 진행해보겠습니다.
from torch.utils.data import DataLoader, Dataset
class CustomDataset(Dataset):
def __init__(self, texts, labels, tokenizer):
self.texts = texts
self.labels = labels
self.tokenizer = tokenizer
def __len__(self):
return len(self.labels)
def __getitem__(self, idx):
text = self.texts[idx]
label = self.labels[idx]
encoding = self.tokenizer(text, return_tensors='pt', padding='max_length', truncation=True, max_length=128)
return {'input_ids': encoding['input_ids'].flatten(), 'attention_mask': encoding['attention_mask'].flatten(), 'label': torch.tensor(label, dtype=torch.long)}
dataset = CustomDataset(df['text'].values, df['label'].values, tokenizer)
dataloader = DataLoader(dataset, batch_size=2, shuffle=True)
# 단순 훈련 루프
for epoch in range(3):
for batch in dataloader:
model.train()
outputs = model(input_ids=batch['input_ids'], attention_mask=batch['attention_mask'], labels=batch['label'])
loss = outputs.loss
loss.backward()
# Optimizer Step 등은 생략
print(f"Epoch {epoch + 1}, Loss: {loss.item()}")
5.3 예측 및 평가
모델이 학습된 후, 새로운 문장에 대해 예측을 수행할 수 있습니다. 다음 예제를 통해 이를 확인해보겠습니다:
test_text = "이 영화는 아주 좋습니다."
test_inputs = tokenizer(test_text, return_tensors="pt")
with torch.no_grad():
test_logits = model(**test_inputs).logits
test_predicted_class = torch.argmax(test_logits, dim=-1).item()
print(f"테스트 문장 '{test_text}'에 대한 예측 클래스: {test_predicted_class}")
6. 마무리
이번 강좌에서는 허깅페이스 트랜스포머 라이브러리를 사용하여 Mobile BERT 모델을 설치하고, 사전 학습된 모델을 불러와
문장 분류 작업을 수행하는 방법에 대해 살펴보았습니다. Mobile BERT는 가벼운 모델이기 때문에 모바일 환경이나 리소스가 제한된 환경에서도 유용하게 활용될 수 있습니다.
다양한 NLP 태스크에 대한 적용 가능성을 더 연구해보는 것을 권장합니다.
이 강좌가 도움이 되었다면, 주변에 공유해주세요! 추가적인 자료나 질문이 있으시면 언제든지 댓글로 남겨주세요.