json 형식의 데이터를 입력으로 주었을 때 ValueError: expected sequence of length 1024 at dim 1 (got 5) 에러가 난 이유 분석
torch.tensor([ [a,a,a,a,…], [b,b,b,b,…] ], device=””) 처럼 데이터가 되어있을 때 [a,a,a,a,…]와 [b,b,b,b,…] 의 사이즈 즉 길이가 같아야 한다. 그래서 pad_to_max_length=True 로 하면 모든 문장들의 크기를 max_length 로 패딩하기 때문에 다음과 같이 모든 문장에 대한 input_ids, attention_mask, labels 의 tensor 들을 dict 로 사용할 수 있다
{'input_ids': tensor([[ 253, 6224, 18313, ..., 9, 1480, 2],
[ 78, 22, 2138, ..., 1, 1, 1]], device='cuda:0'),
'attention_mask': tensor([[1, 1, 1, ..., 1, 1, 1],
[1, 1, 1, ..., 0, 0, 0]], device='cuda:0'),
'labels': tensor([[ 253, 6224, 18313, ..., 9, 1480, 2],
[ 78, 22, 6, ..., -100, -100, -100]], device='cuda:0')}
그런데 pad_to_max_length=False 이면 문장 마다 각 문장의 길이에 따라 사이즈가 다르다. 각 문장의 길이에 따라 dimension 이 결정된다. 그렇게 되면 torch.tensor([ [a,a…], [b,b,b,b,…] ], device=””) 에서 [a,a…] 와 [b,b,b,b,…] 의 길이가 다르다. 그렇게 되면 tensor 로 데이터를 올릴 수가 없게 된다 (다 길이가 같아야 torch.tensor([...], device="") 가 가능하기 때문에). 이때 ValueError: expected sequence of length 1024 at dim 1 (got 5) 에러가 나는 것이다.
첫번째 문장 길이는 1024 였는데 그 다음 문장 길이는 5이니까 사이즈가 안맞다~ 라는 의미의 에러인 것
그래서 결론은 tokenize 할 때 문장들 길이를 max_length 로 해주어라