huggingface에서 tokenizer를 .from_pretrained
메서드로 가져다 쓰는데, 갑자기 padding과 truncation, max_length 인자에 대해 헷갈렸다. 그래서 한 번 정리해보고자 한다.
이 글은 다음을 번역하였습니다 : Huggingface > Docs > Transformers > Padding and truncation
배치 인풋의 길이는 모두 다르기 때문에, 고정된 길이로 변환시킬 수 없는 노릇이다. Padding과 truncation 전략으로 이 문제를 해결한다.
Padding
스페셜 토큰인 padding token을 뒤쪽에 붙여서 짧은 시퀀스가 배치 내 가장 긴 시퀀스와 같은 길이를 갖게 한다. 또는 모델에 허용되는 가장 긴 길이로 만든다. 다음 값들을 갖는다.
True
or'longest'
: 배치에서 가장 긴 길이만큼 패딩한다. 시퀀스가 하나라면 당연히 패딩하지 않는다.'max_length'
:max_length
인자로 넘겨받은 길이까지 패딩한다. max_length 인자를 넘겨주지 않는 경우, 혹은max_length
=None인
경우엔 모델이 허용하는 최대 길이만큼 패딩한다. 시퀀스가 하나여도 패딩이 적용된다.False
or'do_not_pad'
: default값이며 패딩이 적용되지 않는다.
Truncation
긴 시퀀스를 잘라버림으로써 해결한다. 다음과 같은 인자 값을 갖는다.
True
or'longest_first'
:max_length
인자로 받은 길이까지 자른다. 또는max_length
인자를 넘겨주지 않거나None으로
넘겨주는 경우, 모델이 허용하는 최대 길이까지 자른다. 당연히 토큰 단위로 자른다.'only_second'
:True
or'longest_first'
와 비슷하지만, 두 문장이 pair로 입력되는 경우 두 번째 sentence만 자른다.'only_first'
: 마찬가지로 두 문장이 pair로 입력되는 경우 첫 번째 sentence만 자른다.False
of'do_not_truncate'
: defualt 값이며, 자르지 않는다.