ValueError: expected sequence of length 1024 at dim 1 (got 5) 에러

AFL·2023년 9월 14일
0

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 로 해주어라

profile
공부해서 남주자

0개의 댓글