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