허깅페이스 트렌스포머 활용강좌, BigBird 토크나이징 및 인코딩

딥러닝 분야에서 자연어 처리(NLP)는 머신러닝과 AI의 가장 큰 성공 사례 중 하나입니다. 많은 연구자와 기업들이 데이터를 처리하고, 텍스트를 이해하며, 대화형 AI 시스템을 만드는 데 있어 NLP 기술을 활용하고 있습니다. 앞으로 이 글에서는 허깅페이스(Hugging Face)의 Transformers 라이브러리를 사용하여 BigBird 모델을 기반으로 하는 토크나이징 및 인코딩 방법을 알아보겠습니다.

1. 허깅페이스 Transformers 라이브러리 소개

허깅페이스는 자연어 처리(NLP) 모델과 데이터셋, 툴을 쉽게 사용할 수 있도록 돕는 라이브러리로 잘 알려져 있습니다. 이 라이브러리를 통해 우리는 여러 사전 학습 모델을 활용하여 NLP 작업을 수행할 수 있습니다. 이 라이브러리의 주된 장점 중 하나는 다양한 자연어 처리 모델을 손쉽게 사용하고 Fine-Tuning할 수 있다는 것입니다.

2. BigBird 모델 개요

BigBird는 Google에서 개발한 Transformer 기반의 모델로, 기존의 Transformer 모델들이 가지는 입력 길이의 제한을 극복하기 위해 설계되었습니다. 일반적인 Transformer 모델은 입력 길이가 긴 경우 메모리와 계산 비용이 폭발적으로 증가하는 단점을 가집니다. BigBird는 Sparse Attention Mechanism을 도입하여 이런 문제를 해결합니다.

BigBird의 주요 특징은 다음과 같습니다:

  • 적은 메모리 소비: Sparse Attention을 통해 메모리 사용을 줄입니다.
  • 긴 입력 처리: 문서 같은 긴 입력을 처리할 수 있습니다.
  • 다양한 NLP 태스크에 대한 성능 향상: 문서 분류, 요약, 질의 응답 등 다양한 작업에서 뛰어난 성능을 발휘합니다.

3. BigBird 토크나이저

BigBird 모델을 사용하기 위해서는 먼저 데이터를 토크나이즈(tokenize)해야 합니다. 토크나이징은 텍스트를 개별적인 토큰(token)으로 나누는 과정입니다. 허깅페이스 Transformers 라이브러리에서는 모델에 맞춘 다양한 토크나이저를 제공합니다.

3.1. BigBird 토크나이저 설치

BigBird 토크나이저를 사용하려면 먼저 필요한 패키지를 설치해야 합니다. 아래의 파이썬 코드를 실행하여 설치할 수 있습니다:

!pip install transformers

3.2. BigBird 토크나이저 사용법

설치가 완료되면 다음과 같은 코드를 사용하여 BigBird 토크나이저를 초기화하고 텍스트 데이터를 토크나이즈할 수 있습니다:


from transformers import BigBirdTokenizer

# BigBird 토크나이저 초기화
tokenizer = BigBirdTokenizer.from_pretrained('google/bigbird-base')

# 예시 텍스트
text = "딥러닝과 자연어 처리는 매우 흥미로운 분야입니다."

# 텍스트 토크나이징
tokens = tokenizer.tokenize(text)
print("토크나이징 결과:", tokens)
    

4. BigBird 인코딩

토크나이징 후, 토큰을 모델에 입력할 수 있는 형태로 인코딩해야 합니다. 인코딩 과정에서는 토큰을 정수 인덱스 형태로 변환하고, 이 때 패딩(padding) 및 어텐션 마스크(attention mask)도 생성합니다.

4.1. BigBird 인코딩 사용법

다음과 같은 코드를 사용하여 데이터 인코딩을 수행할 수 있습니다:


# 텍스트를 인코딩
encoded_input = tokenizer.encode_plus(
    text,
    padding='max_length',  # 최대 길이에 패딩
    truncation=True,      # 길이가 긴 경우 절단
    return_tensors='pt'  # 파이토치 텐서 형식으로 반환
)

print("인코딩 결과:", encoded_input)
# 출력 예시: {'input_ids': ..., 'attention_mask': ...}
    

5. 모델을 사용한 예제

이제 인코딩된 입력을 BigBird 모델에 입력하여 결과를 확인하는 과정을 살펴보겠습니다. 다음의 예시 코드를 통해 사전 훈련된 BigBird 모델을 사용하여 입력 텍스트의 임베딩을 생성할 수 있습니다.


from transformers import BigBirdModel

# BigBird 모델 초기화
model = BigBirdModel.from_pretrained('google/bigbird-base')

# 모델에 입력하고 출력 받기
output = model(**encoded_input)

# 출력될 모델의 임베딩
print("모델 출력:", output)
    

6. 응용 예제: 텍스트 분류

BigBird 모델을 활용한 긴 문서 텍스트 분류 예제를 살펴보겠습니다. 이 과정에서는 데이터셋을 준비하고, 모델을 훈련시키고, 테스트 데이터를 예측하는 과정을 포함합니다.

6.1. 데이터셋 준비

데이터셋은 일반적으로 약속된 형식으로 준비되어야 합니다. 아래 코드를 통해 간단한 샘플 데이터를 생성할 수 있습니다:


import pandas as pd

# 샘플 데이터 생성
data = {
    'text': [
        "이것은 긍정적인 리뷰입니다.",
        "완전 실망했습니다. 절대 추천하지 않습니다.",
        "이 제품은 정말 좋습니다.",
        "별로예요.",
    ],
    'label': [1, 0, 1, 0]  # 긍정은 1, 부정은 0
}

df = pd.DataFrame(data)
print(df)
    

6.2. 데이터 전 처리

데이터를 모델에 전달하기 전에 인코딩 및 패딩을 적용해야 합니다. 다음과 같은 절차를 거칩니다:


# 모든 텍스트 데이터를 인코딩
encodings = tokenizer(df['text'].tolist(), padding=True, truncation=True, return_tensors='pt')
labels = torch.tensor(df['label'].tolist())
    

6.3. 모델 훈련

훈련 과정을 통해 모델이 데이터를 학습하게 합니다. 이 간단한 예제에서는 에포크 수 및 옵티마이저 설정은 생략하겠습니다.


from transformers import AdamW

# 옵티마이저 설정
optimizer = AdamW(model.parameters(), lr=1e-5)

# 훈련 루프
for epoch in range(3):  # 3 에포크
    model.train()
    outputs = model(**encodings)
    loss = outputs.loss
    loss.backward()
    optimizer.step()
    optimizer.zero_grad()
    print(f"EPOCH {epoch + 1} / 3: Loss: {loss.item()}")
    

6.4. 모델 평가

모델의 성능을 평가하기 위해 사전 훈련된 모델을 테스트 데이터에 적용합니다.


model.eval()
with torch.no_grad():
    test_output = model(**encodings)
    predictions = test_output.logits.argmax(dim=1)
    
print("예측 결과:", predictions)
    

7. 결론 및 추가 참고 자료

이번 글에서는 허깅페이스의 transformers 라이브러리를 사용하여 BigBird 모델의 토크나이징 및 인코딩 과정을 살펴보았습니다. 기존의 Transformer 아키텍처의 한계를 극복한 BigBird는 긴 문서를 다루는 NLP 작업에서 개선된 성능을 보여줍니다.

더 많은 정보와 예제를 원하신다면 [Hugging Face](https://huggingface.co/docs/transformers/index) 공식 문서를 참고하시기 바랍니다. 이 글이 딥러닝과 자연어 처리 세계에 더 깊이 발을 담그는 데 도움이 되었기를 바랍니다.