Closed lig96 closed 1 year ago
print(list(pred)) 그냥 preds는 제너레이터라 list로 감싸봤습니다.
소프트라벨링 할 때 [(), array([ 4, 17, 0, ..., 0, 0, 0])] [(), array([ 4, 17, 0, ..., 0, 0, 0])]
안 할 때 [array([[-0.09094 , 0.07574 , -0.01968 , ..., 0.01026 , 0.154 , 0.03638 ], [ 0.0507 , 0.1211 , 0.014755, ..., 0.02084 , 0.2072 , -0.0605 ], [ 0.0734 , 0.1565 , -0.04425 , ..., 0.04376 , 0.1749 , -0.04932 ], ..., [-0.01314 , 0.04596 , 0.06174 , ..., -0.0101 , 0.1399 , 0.04504 ], [-0.10004 , 0.07184 , -0.0113 , ..., 0.0086 , 0.1332 , -0.04315 ], [-0.05035 , 0.1028 , -0.06183 , ..., 0.0267 , 0.1422 , 0.07935 ]], dtype=float16), array([ 4, 17, 0, ..., 0, 0, 0])]
metrics = self.compute_metrics(EvalPrediction(predictions=all_preds, label_ids=all_labels))
참고로 preds로 넘어오는 인자는 EvalPrediction(predictions=all_preds, label_ids=all_labels) 입니다.
torch.nn.CrossEntropyLoss(weight=None, size_average=None, ignore_index=- 100, reduce=None, reduction='mean', label_smoothing=0.0
지금 봤는데 크로스엔트로피로스 자체에 라벨 스무딩이 있네요. 오류나는지 확인하면 편할 것 같습니다.
기존에는 TrainingArguments(~~~) 속에 넣었었습니다.
기존 CE Loss에 파라미터가 최신 버젼에는 있는데, 저희 서버에 깔린 1.7.1
버전 Document 참조해보시면, 없습니다..
https://pytorch.org/docs/1.7.1/generated/torch.nn.CrossEntropyLoss.html?highlight=crossentropy#torch.nn.CrossEntropyLoss
그래서 라벨 스무딩 적용을 개별적으로 해줘야 합니다
새로 도입한 asl 속에 y가 onehot을 매겨서 배치*30으로 들어가기 때문에, 이제는 원핫인코딩을 수정만 하면 되기 때문에 라벨스무딩을 해도 오류가 안 생깁니다.
파라미터 0.1, 파라미터 0.2일 때 3개씩, 3개씩 해서 돌리는 중입니다.
pr 했고 클로즈 합니다.
현재 상황과 문제점
rbert가 섞인 최신 모델에 label_smoothing_factor=0.1 이렇게 넣으면 오류가 납니다.
pred.predictions이 6494*29 이중리스트로 나와야 하는데 비어있는 튜플로 나옵니다. 그래서 97라인에서 max가 불가능해지고요.
개선 제안 사항
디버깅을 한다.
성능 개선 기대점
소프트 라벨링을 한다고 성능이 무조건 오르는 것은 아니지만 소프트 라벨링을 쓸 수 있게 된다.