🐍 Python & library/HuggingFace

[HuggingFace] Tokenizer class 알아보기

복만 2022. 6. 3. 13:10

Official Docs: https://huggingface.co/docs/transformers/v4.19.2/en/main_classes/tokenizer

 

Tokenizer

Returns List[int], torch.Tensor, tf.Tensor or np.ndarray The tokenized ids of the text.

huggingface.co

Github: https://github.com/huggingface/tokenizers

 

 

Tokenizer은 모델에 들어갈 input을 준비하는 데에 필요하다. Hugging Face에서 제공하는 Tokenizer class를 통해 쉽게 이용할 수 있다.

 

기본이 되는 class들은 PreTrainedTokenizer와 PreTrainedTokenizerFast 두 가지가 있으며, 둘 다 PreTrainedTokenizerBase를 상속받는다.

 

BertTokenizer/BertTokenizerFast 등 기본 Tokenizer들은 모두 이 class들을 상속받으며,

기본 method들 역시 이 superclass를 참조한다.

 

 

두 Tokenizer class 모두 다음의 기능들을 제공한다:

  • Tokenizing
  • Vocabulary에 새로운 token 추가
  • Special token (mask, beginning-of-sentence 등)의 관리

 

PreTrainedTokenizer

init parameters

padding/truncation side, special tokens (bos/eos/unk 등) 등을 설정할 수 있다.

 


class attributes

tokenizer의 vocabulary와 각 속성 등을 확인할 수 있다.

 


__call__

text (sequence) 혹은 text pair (batch of sequences)를 input으로 받아 BatchEncoding을 return한다.
즉, Input은 string이거나, string들로 구성된 list일 수 있다.

 

 

주요 parameter들은 다음과 같다.

  • add_special_tokens : [CLS], [SEP] 등 special token을 추가할 지를 선택한다. (default: True)
  • padding : padding을 주어 encoding의 길이를 맞춘다.
    • True or 'longest' : batch 내에서 가장 긴 sequence의 길이에 맞춰 padding한다.
    • 'max_length' : max_length에 맞춰 padding한다. 이 경우 max_length를 parameter로 따로 지정해 주어야 한다.
    • False or 'do_not_pad' (default) : No padding
  • truncation : padding과 반대로, 긴 sequence들을 자른다. 'max_length'가 주어진 경우 이 길이에 맞춰 자르고, 그렇지 않은 경우 model의 가능한 최대 input 길이에 맞춘다. False가 아닌 경우, 어떤 sequence를 자를 것인지 지정할 수 있다.
    • True or 'longest_first' : 가장 길이가 긴 sequence를 자른다.
    •  'only_first' : 첫 번째 sequence를 자른다.
    •  'only_second' : 두 번째 sequence를 자른다.
    • False or 'do_not_truncate' (default) : No truncation
  • max_length (int, optional): padding이나 truncation에서 사용할 maximum length를 지정할 수 있다.

 

padding, truncation, max_length를 이용해 encoding의 길이를 서로 맞춰줄 수 있으며, 이에 대한 자세한 설명은 여기를 참고하면 된다.

 

 

OutputBatchEncoding은 다음을 기본으로 포함한다.

 

이외에도 attention_maskoverflowing_tokensnum_truncated_tokensspecial_tokens_masklength 등이 return flag를 True로 설정 시 포함된다.

 

Tokenizer의 output에 대한 보다 자세한 설명은 여기에서 확인할 수 있다.

 


decode

token id (의 list)를 input으로 받아 해당하는 sequence로 변환한다.

*special token은 제외하고 변환하려면 skip_special_tokens=True로 지정해 주면 된다.

 

self.convert_tokens_to_string(self.convert_ids_to_tokens(token_ids))와 동일하다.

 


encode

string (의 list)를 input으로 받아 해당하는 sequence id로 변환한다.

 

self.convert_tokens_to_ids(self.tokenize(text))와 동일하다.

 

Encode와 Decode에 대한 보다 자세한 설명과 예시는 여기에서 확인 가능하다.

 

[HuggingFace] Tokenizer의 역할과 기능, Token ID, Input ID, Token type ID, Attention Mask

HuggingFace의 Tokenizer을 사용하면 Token (Input) ID, Attention Mask를 포함한 BatchEncoding 을 출력으로 받게 된다. 이 글에서는 이러한 HuggingFace의 Model input에 대해 정리해 보고자 한다. Tokenizer cl..

bo-10000.tistory.com

 

 

PreTrainedTokenizerBase

PreTrainedTokenizer과 PreTrainedTokenizerFast는 PreTrainedTokenizerBase Class를 상속하는데, 추가적인 utility 함수들은 다음에서 확인할 수 있다.

 

Utilities for Tokenizers

pad < source > ( encoded_inputs: typing.Union[transformers.tokenization_utils_base.BatchEncoding, typing.List[transformers.tokenization_utils_base.BatchEncoding], typing.Dict[str, typing.List[int]], typing.Dict[str, typing.List[typing.List[int]]], typing.L

huggingface.co

 

get_vocab

Tokenizer의 vocabulary를 dictionary 형태로 가져온다.

 

tokenizer.get_vocab()[token]tokenizer.convert_tokens_to_ids(token)과 동일하다.

 

 

반응형