GPT-2의 summarization task에 대해 fine-tuning하는데 위와 같은 에러가 발생했다. 위키독스 GPT-2 요약을 참고하여 CNN/Daily Mail dataset에 대해 진행하였다. 이에 대한 자세한 소개는 추후 포스팅하겠다!
위와 같은 에러가 발생한 이유는 다양하다. 서치를 해보면 Dataloader 배치사이즈가 다르다거나 decoder모델인데 Seq2Seq모델을 사용했다거나 등의 원인을 제공한다.
나의 경우에 대해 소개해보겠다. 이전 포스팅에서 소개했던 padding token을 추가한 이후에 발생한 에러이다. 앞선 포스팅처럼 EOS token을 padding token으로 지정을 해주면 EOS token의 id인 50256으로 패딩이 씌워져서 tensor([16345, 3876, 1096, ..., 50256, 50256, 50256]) 처럼 tokenization된다.
그런데 똑같이 label에서도 위와 같은 방법으로 padding을 씌워주면 forward 시에 계산하지 않아도 될 50256도 함께 들어가게 된다. 따라서 사이즈가 맞지 않는 문제가 발생하는 것이다. 따라서 나는 계산시에 padding이 무시될 수 있도록 다음과 같은 코드를 사용하여 label의 padding token은 -100으로 설정해주었다.
def padding_function(examples): max_input_length = len(examples['input_ids']) labels = examples['labels'] labels = labels + ([-100] * (max_input_length - len(labels))) examples['labels'] = labels return examples