Official Docs: https://huggingface.co/docs/transformers/v4.19.2/en/main_classes/tokenizer
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의 길이를 서로 맞춰줄 수 있으며, 이에 대한 자세한 설명은 여기를 참고하면 된다.
Output인 BatchEncoding은 다음을 기본으로 포함한다.
- input_ids: token id의 list (참고: What are input IDs?)
- token_type_ids: token type id의 list (참고: What are token type IDs?)
이외에도 attention_mask, overflowing_tokens, num_truncated_tokens, special_tokens_mask, length 등이 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에 대한 보다 자세한 설명과 예시는 여기에서 확인 가능하다.
PreTrainedTokenizerBase
PreTrainedTokenizer과 PreTrainedTokenizerFast는 PreTrainedTokenizerBase Class를 상속하는데, 추가적인 utility 함수들은 다음에서 확인할 수 있다.
get_vocab
Tokenizer의 vocabulary를 dictionary 형태로 가져온다.
tokenizer.get_vocab()[token]
은 tokenizer.convert_tokens_to_ids(token)
과 동일하다.
'🐍 Python & library > HuggingFace' 카테고리의 다른 글
HuggingFace Space 만들기 (1) | 2023.06.10 |
---|---|
[HuggingFace] Trainer 사용법 (0) | 2022.07.23 |
[HuggingFace] Tokenizer의 역할과 기능, Token ID, Input ID, Token type ID, Attention Mask (0) | 2022.06.03 |
[HuggingFace] Pipeline & AutoClass (0) | 2022.05.31 |