Table of Contents

728x90

자연어 문장을 Transformer 모델에 입력하려면 먼저 문장을 숫자로 변환하는 과정이 필요합니다. 이 과정을 토크나이저(tokenizer)가 수행합니다.

Transformer 모델은 텍스트 데이터를 처리할 수 없고, 숫자로 이루어진 벡터만 처리할 수 있기 때문에, 텍스트 문장을 숫자로 변환하는 과정이 필수적입니다. 이 변환 과정은 일반적으로 다음 단계를 따릅니다:

1. 토큰화(Tokenization)

문장을 토큰(token)이라는 작은 단위로 나눕니다. 토큰은 단어 단위일 수도 있고, 서브워드(subword) 단위일 수도 있습니다. 예를 들어:

  • 문장: "안녕하세요 저는 ChatGPT입니다"
  • 토큰화 결과 (서브워드 기준): ["안녕하세요", "저", "는", "chat", "gp", "t", "입니다"]

2. 숫자로 변환(인코딩)

토큰화된 단어들을 각각 고유한 숫자로 변환합니다. 이를 정수 인코딩이라고 합니다. 모델은 숫자 형태로 된 입력만 처리할 수 있기 때문에, 각 토큰에 고유한 숫자를 할당합니다.

  • 예시: ["안녕하세요", "저", "는", "chat", "gp", "t", "입니다"][101, 102, 103, 200, 201, 202, 104]

3. 패딩(Padding)

모든 입력 문장의 길이가 동일하지 않기 때문에, 가장 긴 문장의 길이에 맞춰서 부족한 부분을 채웁니다. 이를 패딩이라고 하며, 보통 0으로 채웁니다.

4. Transformer 모델에 입력

이제 변환된 숫자 리스트를 Transformer 모델에 입력할 수 있습니다. 모델은 이 숫자 벡터를 임베딩 레이어를 통해 벡터로 변환한 후, Attention 메커니즘 등을 적용해 처리하게 됩니다.


예시로, Hugging Face의 transformers 라이브러리를 사용해 문장을 처리하는 방법을 보여드리겠습니다.

from transformers import BertTokenizer

# BERT 모델의 토크나이저 로드
tokenizer = BertTokenizer.from_pretrained('bert-base-multilingual-cased')

# 문장 입력
sentence = "안녕하세요 저는 ChatGPT입니다"

# 토큰화 및 정수 인코딩
tokens = tokenizer.encode(sentence, add_special_tokens=True)

# 결과 확인
print("토큰화된 결과:", tokenizer.convert_ids_to_tokens(tokens))
print("정수 인코딩된 결과:", tokens)

출력 예시:

토큰화된 결과: ['[CLS]', '안', '##녕', '##하세요', '저', '##는', 'chat', 'gp', '##t', '##입', '##니다', '[SEP]']
정수 인코딩된 결과: [101, 9521, 11927, 11102, 11096, 35806, 13856, 10502, 28933, 11102, 12092, 102]
  • '[CLS]': 문장의 시작을 나타내는 특별한 토큰입니다.
  • '[SEP]': 문장의 끝을 나타내는 특별한 토큰입니다.
  • "안녕하세요"는 서브워드 단위로 분리되어 "안", "##녕", "##하세요"로 쪼개졌습니다.
  • "저는"도 "저", "##는"으로 쪼개졌습니다.
  • "ChatGPT"는 그대로 분리되지 않고 서브워드 단위로 처리됩니다.

이렇게 토큰화된 결과를 숫자로 변환한 후 Transformer 모델에 입력하면 됩니다.

전체 과정 요약:

  1. 문장을 토큰화하여 서브워드 단위로 나눕니다.
  2. 각 토큰을 고유한 숫자로 인코딩합니다.
  3. 필요하다면 패딩을 추가합니다.
  4. 모델에 입력하여 학습 또는 추론을 진행합니다.

이 과정을 통해 문장을 Transformer 모델이 이해할 수 있는 형태로 변환하게 됩니다.