[파이썬] 텍스트 분류를 위한 BERT 및 Transformer 모델

텍스트 분류는 자연어 처리에서 가장 기본적이고 중요한 작업 중 하나입니다. 텍스트를 주어진 카테고리(클래스)로 분류하는 과정을 말합니다. BERT 및 Transformer 모델은 최근 자연어 처리에서 큰 인기를 끌고 있으며, 텍스트 분류 작업에도 탁월한 성능을 보여줍니다.

BERT (Bidirectional Encoder Representations from Transformers)

BERT는 Google에서 개발한 사전 훈련된 언어 모델로, Transformer 아키텍처를 기반으로 합니다. 기존의 언어 모델보다 양방향 정보를 담은 특징을 가지고 있어, 문맥을 더 정확하게 이해하는 데 도움을 줍니다. BERT는 큰 규모의 데이터로 사전 훈련되어 다양한 자연어 처리 작업에 적용할 수 있습니다.

# BERT 모델 불러오기
from transformers import BertForSequenceClassification, BertTokenizer

# 사전 훈련된 BERT 모델과 토크나이저 로드
model = BertForSequenceClassification.from_pretrained('bert-base-uncased')
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')

# 입력 텍스트에 대한 토큰화 및 패딩
text = "This is an example sentence for classification."
tokens = tokenizer.encode_plus(text, add_special_tokens=True, padding='max_length',
                               max_length=128, truncation=True, return_tensors='pt')

# 분류 예측
outputs = model(**tokens)
predictions = outputs.logits.argmax(dim=1)

위 코드는 Hugging Face의 transformers 라이브러리를 이용하여 BERT 모델을 사용하는 예시입니다. 입력 텍스트에 대해 BERT 토크나이저를 사용하여 토큰화와 패딩을 수행하고, 사전 훈련된 BERT 모델로 분류 예측을 수행합니다.

Transformer 모델

Transformer는 구글에서 발표한 딥러닝 알고리즘으로, 시퀀스를 입력으로 받아 출력을 생성하는 모델 아키텍처입니다. BERT도 Transformer 모델을 기반으로 하여 개발되었습니다. Transformer 모델은 어텐션 메커니즘을 사용하여 입력 시퀀스의 모든 위치를 동시에 고려합니다. 이를 통해 텍스트 분류 작업에 있어 뛰어난 성능을 보여줍니다.

# Transformer 모델 불러오기
import torch
from torch import nn
from torch.nn import Transformer

# Transformer 모델 정의
class TransformerClassification(nn.Module):
    def __init__(self, vocab_size, embedding_size, num_classes):
        super(TransformerClassification, self).__init__()
        
        self.embedding = nn.Embedding(vocab_size, embedding_size)
        self.transformer = Transformer(embedding_size, num_heads=8, num_encoder_layers=6, num_decoder_layers=6)
        self.fc = nn.Linear(embedding_size, num_classes)
        
    def forward(self, x):
        x = self.embedding(x)
        x = x.permute(1, 0, 2)
        outputs = self.transformer(x)
        x = outputs[0][-1]
        x = self.fc(x)
        return x

# 모델 인스턴스 생성
vocab_size = 10000
embedding_size = 256
num_classes = 10
model = TransformerClassification(vocab_size, embedding_size, num_classes)

# 입력 데이터 준비
input_data = torch.rand(32, 128)  # (batch_size, sequence_length)

# 분류 예측
predictions = model(input_data)

위 코드는 PyTorch를 사용하여 Transformer 모델을 정의하고, 분류 예측을 수행하는 예시입니다. 입력 데이터는 크기가 (batch_size, sequence_length)인 텐서로 주어집니다.

이와 같이 BERT 및 Transformer 모델은 텍스트 분류 작업에 매우 유용하며, 다양한 자연어 처리 작업에 활용할 수 있습니다. 다른 작업에 대해서도 해당 모델들을 사용해 보시기 바랍니다.