Table of Contents

DeepLearning/NLP

Tokenizer 만드는 방법

꼬꼬마코더 2024. 9. 4. 17:26
728x90

Tokenizer는 NLP 모델에서 텍스트 데이터를 처리하고 모델이 이해할 수 있는 형태(주로 숫자 시퀀스)로 변환하는 중요한 도구입니다. 직접 토크나이저를 만들려면 몇 가지 방법이 있지만, 보통 아래의 단계를 따릅니다.

1. 토크나이저 정의 방식 선택

토크나이저를 만드는 방식은 크게 세 가지로 나뉩니다:

  • Word-level Tokenization: 단어 단위로 텍스트를 쪼갭니다. 예: "안녕하세요." -> ["안녕하세요", "."]
  • Subword-level Tokenization: 자주 사용되는 서브워드를 추출하여 작은 단위로 쪼갭니다. Byte-Pair Encoding(BPE), WordPiece, SentencePiece 등이 이 방식을 따릅니다. 예: "안녕하세요" -> ["안", "녕", "하세요"]
  • Character-level Tokenization: 개별 문자를 토큰으로 처리합니다. 예: "안녕하세요" -> ["안", "녕", "하", "세", "요"]

2. 데이터 준비

토크나이저를 만들기 위해서는 대량의 텍스트 데이터를 준비해야 합니다. 이 데이터는 토크나이저가 학습해야 할 언어와 관련된 도메인에 따라 다릅니다. 예를 들어, 한국어 텍스트를 토크나이저로 처리하려면 한국어 텍스트 데이터가 필요합니다.

3. 토크나이저 라이브러리 사용

SentencePiecetokenizers(Hugging Face에서 제공하는 라이브러리)가 대표적인 토크나이저 학습 도구입니다.

1) SentencePiece 이용

SentencePiece는 구글에서 만든 오픈소스 라이브러리로, BPE 또는 Unigram 방식으로 서브워드 토크나이저를 쉽게 학습시킬 수 있습니다.

pip install sentencepiece

다음은 한국어 토크나이저를 만드는 예시입니다.

import sentencepiece as spm

# SentencePiece 모델 학습
spm.SentencePieceTrainer.train(input='korean_text.txt', model_prefix='korean_tokenizer', vocab_size=32000)

# 학습된 모델 불러오기
sp = spm.SentencePieceProcessor(model_file='korean_tokenizer.model')

# 텍스트 토큰화
tokens = sp.encode("안녕하세요. 저는 AI입니다.", out_type=str)
print(tokens)  # ['▁안녕', '하', '세요', '.', '▁저는', '▁AI', '입니다', '.']

2) Hugging Face tokenizers 라이브러리 이용

Hugging Face의 tokenizers 라이브러리는 빠른 토크나이저 학습을 위한 Python 라이브러리입니다.

pip install tokenizers

Hugging Face의 BPE 방식으로 토크나이저를 학습시키는 예시입니다.

from tokenizers import Tokenizer
from tokenizers.models import BPE
from tokenizers.trainers import BpeTrainer
from tokenizers.pre_tokenizers import Whitespace

# 빈 토크나이저 생성
tokenizer = Tokenizer(BPE())
tokenizer.pre_tokenizer = Whitespace()

# 학습 데이터 준비
trainer = BpeTrainer(vocab_size=32000, special_tokens=["[PAD]", "[CLS]", "[SEP]", "[MASK]"])

# 학습시키기
files = ["korean_text1.txt", "korean_text2.txt"]
tokenizer.train(files, trainer)

# 토크나이저 사용 예시
output = tokenizer.encode("안녕하세요. 저는 AI입니다.")
print(output.tokens)

4. 토크나이저 저장 및 사용

한 번 학습된 토크나이저는 저장하고 나중에 불러와 사용할 수 있습니다.

# 토크나이저 저장
tokenizer.save("my_tokenizer.json")

# 토크나이저 불러오기
tokenizer = Tokenizer.from_file("my_tokenizer.json")

5. 특수 토큰 추가

모델에 맞는 특수 토큰을 추가할 수도 있습니다. 예를 들어, 문장 시작, 끝, 패딩 등의 토큰을 추가합니다.

special_tokens = ["[PAD]", "[CLS]", "[SEP]", "[MASK]"]
tokenizer.add_special_tokens(special_tokens)

이러한 방식으로 자신만의 토크나이저를 학습시킬 수 있으며, 모델에 맞게 언어와 도메인에 맞는 토크나이저를 만드는 것이 중요합니다.