1. 서론
최근 인공지능 및 자연어 처리(NLP) 분야에서는 BERT(Bidirectional Encoder Representations from Transformers) 모델이 중요한 역할을 하고 있습니다. BERT는 구글에서 개발한 트랜스포머 기반의 사전학습 모델로, 다양한 NLP 과제에서 최첨단 성능을 보여주고 있습니다. 본 강좌에서는 파이썬과 허깅페이스(Hugging Face) Transformers 라이브러리를 사용해 BERT 모델을 쉽게 활용하는 방법에 대해 알아보겠습니다.
2. 허깅페이스 트랜스포머 라이브러리 설치
먼저, 허깅페이스 트랜스포머 라이브러리를 설치해야 합니다. 파이썬 패키지 관리자인 pip을 사용하여 설치할 수 있습니다.
pip install transformers
3. BERT 모델 이해하기
BERT는 입력 문장의 양 방향 문맥을 이해하여 더 나은 자연어 이해를 가능하게 합니다. 즉, 문장을 왼쪽에서 오른쪽으로, 또는 오른쪽에서 왼쪽으로 읽을 수 있어 문맥 정보를 더 풍부하게 고려할 수 있습니다.
4. BERT 사전학습 모델 불러오기
허깅페이스 라이브러리를 사용하여 BERT 모델을 불러오는 과정은 매우 간단합니다. 다음은 BERT 모델을 불러오기 위한 기본 코드입니다.
from transformers import BertTokenizer, BertForMaskedLM
import torch
# BERT 모델과 토크나이저 불러오기
model_name = 'bert-base-uncased'
tokenizer = BertTokenizer.from_pretrained(model_name)
model = BertForMaskedLM.from_pretrained(model_name)
# 예제 문장
text = "Hello, my name is [MASK]."
inputs = tokenizer(text, return_tensors="pt")
# 예측
with torch.no_grad():
outputs = model(**inputs)
predictions = outputs.logits
predicted_index = torch.argmax(predictions, dim=-1)
predicted_token = tokenizer.decode(predicted_index[0, inputs['input_ids'].tolist().index(tokenizer.mask_token_id)])
print(f"예측된 단어: {predicted_token}")
4.1 코드 설명
위 코드는 다음과 같은 과정으로 이루어져 있습니다:
- BertTokenizer: 주어진 텍스트를 BERT 모델에서 사용할 수 있는 텐서 형태로 변환합니다.
- BertForMaskedLM: BERT 모델을 불러옵니다. 이 모델은 언어 모델링, 특히 마스킹된 언어 모델링에 적합합니다.
- inputs: 입력 문장을 인코딩하여 텐서 형태로 변환합니다.
- outputs: 모델에 입력을 전달하여 예측 logits을 생성합니다.
- predicted_index: 가장 높은 확률을 가진 토큰의 인덱스를 추출합니다.
- 최종 예측 단어: 인덱스를 사용하여 실제 단어로 변환합니다.
5. BERT를 활용한 텍스트 분류
BERT 모델은 텍스트 분류 작업에도 쉽게 적용할 수 있습니다. 아래의 코드는 BERT를 활용하여 주어진 텍스트의 감성을 분석하는 간단한 예제를 보여줍니다.
from transformers import BertTokenizer, BertForSequenceClassification
# 감정 분류 모델 불러오기
model_name = 'nlptown/bert-base-multilingual-uncased-sentiment'
tokenizer = BertTokenizer.from_pretrained(model_name)
model = BertForSequenceClassification.from_pretrained(model_name)
# 예제 문장
sentence = "I love using Hugging Face Transformers!"
inputs = tokenizer(sentence, return_tensors="pt")
# 예측
with torch.no_grad():
outputs = model(**inputs)
logits = outputs.logits
predicted_class = torch.argmax(logits, dim=-1)
print(f"예측된 감정 클래스: {predicted_class.item()}")
5.1 텍스트 분류 코드 설명
위의 코드는 감정 분류를 수행하며, 다음과 같은 과정을 따릅니다:
- nlptown/bert-base-multilingual-uncased-sentiment 모델을 불러와 다국적 감정 분류 작업을 수행합니다.
- 입력된 문장을 토크나이저를 사용하여 텐서 형태로 변환합니다.
- 모델에 입력을 주어 logits을 계산합니다.
- logits에서 가장 높은 값의 클래스를 선택하여 예측된 감정 클래스를 출력합니다.
6. 요약
BERT 모델을 통해 자연어 처리 분야에서 다양한 작업을 수행할 수 있음을 알 수 있습니다. 허깅페이스 라이브러리를 사용하면 이러한 모델을 쉽게 활용할 수 있으며, 실험을 통해 그 성능을 더욱 개선할 수 있습니다. 차후에는 파인튜닝(fine-tuning)이나 다른 작업으로의 확장도 고려해볼 수 있습니다.
7. 참고 문헌
- Devlin, J. et al. (2018). BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding.
- Hugging Face Transformers Documentation. 링크