Tokenizer
About Tokenizer
Tokenizer는 NLP 파이프라인의 핵심 구성 요소 중 하나입니다. 토크나이저는 단지 1가지 목적을 가지고 있습니다. 즉, 입력된 텍스트를 모델에서 처리할 수 있는 데이터로 변환하는 것입니다. 모델은 숫자만 처리할 수 있으므로, 토크나이저는 텍스트 입력을 숫자 데이터로 변환해야 합니다.
1. Word-based Tokenization
토큰화(tokenization) 형태는 단어기반 (word-based) 입니다. 일반적으로 몇 가지 규칙만 가지고도 설정 및 사용이 매우 쉽고, 종종 괜찮은 결과를 얻을 수 있습니다. 예를 들어, 아래 그림에서의 토큰화 과정은 원시 텍스트를 단어로 나누고 각각에 대한 숫자 표현을 찾는 것입니다:
2. Character-based Tokenization
문자기반 토크나이저는 텍스트를 단어(words)가 아닌 문자(characters)로 나눕니다. 이러한 방법은 두가지 장점이 있습니다:
어휘집(vocabulary)의 크기가 매우 작습니다.
모든 단어들이 문자를 가지고 만들어질 수 있기 때문에, out-of-vocabulary (OOV, unknown) 토큰이 훨씬 적습니다.
3. Subword Tokenization
하위 단어 토큰화(subword tokenization) 알고리즘은 빈번하게 사용하는 단어(frequently used words)는 더 작은 하위단어(subword)로 분할하지 않고, 희귀 단어(rare words)를 의미있는 하위 단어(meaningful subwords)로 분할해야 한다는 원칙에 기반합니다. 하위 단어 토큰과화의 종류는 아래와 같습니다:
Byte-level BPE (GPT-2에 사용됨)
WordPiece (BERT에 사용됨)
SentencePiece, Unigram (몇몇 다국어 모델에 사용됨)
Huggingface는 NLP Task 뿐만아니라 Transformer 기반의 알고리즘을 위한 최적화 된 Tokenizer 패키지를 제공합니다.
Huggingface Tokenizer 설명
Huggingface의 Tokenizer는 텍스트 데이터를 숫자 데이터로 변환하여 자연어 처리 모델에 입력할 수 있도록 하는 도구입니다. 토크나이저는 주어진 텍스트를 토큰(token)으로 분할하고, 각 토큰을 고유한 정수로 매핑합니다. 이를 통해 모델이 텍스트 데이터를 이해하고 처리할 수 있게 됩니다.
토크나이저는 다양한 방법으로 텍스트를 토큰화할 수 있습니다. 예를 들어, 단어 단위로, 부분 단어 단위로, 또는 문자 단위로 토큰화할 수 있습니다. Huggingface는 BERT, GPT, RoBERTa 등 다양한 모델에 최적화된 토크나이저를 제공합니다.
주요 기능
토큰화(Tokenization): 텍스트를 토큰으로 분할합니다.
인코딩(Encoding): 토큰을 정수로 변환합니다.
디코딩(Decoding): 정수를 다시 텍스트로 변환합니다.
특수 토큰 처리: 패딩, 시작, 끝 토큰 등의 특수 토큰을 처리합니다.
Huggingface Tokenizer Tutorial
이 튜토리얼에서는 Huggingface의 transformers
라이브러리를 사용하여 텍스트 데이터를 토큰화하고 인코딩 및 디코딩하는 방법을 설명합니다. 예시로 BERT 모델의 토크나이저를 사용합니다.
%pip install transformers
토크나이저 불러오기
from transformers import BertTokenizer
# BERT-base-uncased 토크나이저 불러오기
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
텍스트 토큰화
text = "Huggingface's Transformers library is amazing!"
tokens = tokenizer.tokenize(text)
print("Tokens:", tokens)
토큰 인코딩
토큰을 정수 인덱스로 변환합니다.
input_ids = tokenizer.encode(text)
print("Input IDs:", input_ids)
패딩과 어텐션 마스크 적용
모델에 입력하기 위해 패딩을 추가하고 어텐션 마스크를 생성합니다.
# 여러 문장을 예제로 사용
texts = ["Huggingface's Transformers library is amazing!", "Tokenizers are essential for NLP tasks."]
# 인코딩, 패딩 및 어텐션 마스크 생성
encodings = tokenizer(texts, padding=True, truncation=True, return_tensors="pt")
print("Input IDs:", encodings["input_ids"])
print("Attention Mask:", encodings["attention_mask"])
디코딩
인코딩된 정수 인덱스를 다시 텍스트로 변환합니다. 토큰화 도구에는 입력 텍스트를 인코딩하는 것 외에도 모델에서 생성된 ID를 텍스트로 다시 변환하는 디코딩을 위한 API도 있습니다. 이 작업은 Tokenizer.decode(하나의 예측 텍스트에 대해) 및 Tokenizer.decode_batch(예측 일괄 처리에 대해) 메서드를 통해 수행됩니다.디코더는 먼저 토큰라이저의 어휘를 사용하여 ID를 토큰으로 다시 변환하고 모든 특수 토큰을 제거한 다음 공백으로 토큰을 결합합니다:
decoded_text = tokenizer.decode(input_ids)
print("Decoded Text:", decoded_text)
모든 과정 종합
위의 단계를 하나로 종합하여 전체 과정을 수행하는 예제입니다.
def tokenize_and_encode(texts):
# 텍스트를 토큰화 및 인코딩
encodings = tokenizer(texts, padding=True, truncation=True, return_tensors="pt")
# 결과 출력
print("Tokens:", [tokenizer.tokenize(text) for text in texts])
print("Input IDs:", encodings["input_ids"])
print("Attention Mask:", encodings["attention_mask"])
# 첫 번째 문장 디코딩
decoded_text = tokenizer.decode(encodings["input_ids"][0])
print("Decoded Text:", decoded_text)
# 예제 문장
texts = ["Huggingface's Transformers library is amazing!", "Tokenizers are essential for NLP tasks."]
tokenize_and_encode(texts)
Last updated