글 줄간격이 이상해졌다... 글쓰기 화면에서만 이랬으면 좋겠는데...
어제 밤부터 오늘까지 한것은 KorNLI 학습이었다.
EDA든 Back translation이든, 뭔가 문장 데이터셋을 늘렸다면, 그 늘어난 데이터가 기존 데이터에서 의미가 바뀌었는지 안바뀌었는지를 테스트 해야할 것 같았고, 그 방법이 KorNLI같은 것으로 유사성을 측정하면 된다고 생각했기 때문이다.
처음에는 max_sequence_length를 128로 두고 학습을 시켰었다.
토큰 길이별 빈도수에 따른 그래프인데 보면 30-40대에서 가장 많고, 128이후로는 거의 없다시피 한 것을 볼 수 있다. 그래서 99%커버를 위해서는 128을 제한으로 하는게 좋을 것이라는 생각이었는데, 이렇게 하면 한 번의 Epoch당 걸리는 시간이 거의 1시간 35분~40분, 약 100분이다. ( Colab 무료에서 돌리면 거의 4-5시간이다... )
처음엔 그래도 1~3 Epoch 정도로 학습시키면 되겠지 라는 가벼운 마음으로 했었는데, 이것저것 수정하다보니까 Train은 모두 끝났는데 Eval에서 오류가 나거나, Eval까지 모두 마쳤는데 Ckpt save에서 오류가 나거나 해서 시간이 너무 많이 날아갔다. 그래서 결국 Max length를 64로 잡고 (아마 95% 커버쯤 되지않을까..) 했고, 그래놓고도 또 오류가 한 2번 나서 이제서야 1 Epoch 학습이 끝나서 글을 작성할 수 있었다. [ max_seq_len이 64일때도 거의 한 에폭당 55분이 걸린다. ]
KorNLI에서 학습은 multinri_train과 snli_train을 합쳐서 셔플한 것으로 진행했고, 검증과정은 xnli_dev로 검증했다. 위의 사진은 xnli_test를 통해 검증한 결과로 위쪽은 학습전, 아래쪽은 학습 이후다.
이 케이스에 대해 에폭을 돌리면서 신기했던 점은 시작하자마자 손실이 0.3~0.4에서 시작한다는 것이다. 한 에폭이 끝날때 쯤에는 0.27~0.25정도까지 수렴하는데, 다른것들은 보통 1이상에서 시작해서 지수적으로 감소하는 경우가 많았어서 신기했다.
내일 1교시는 아니지만 2교시에 수업이 있으므로 추가적으로 10문장 정도 테스트하고, 결과 검증을 시도해보자. KorNLI의 분류태그는 Entailment(비슷함), Contradiction(모순됨), Neutral(별로 관계없음) 의 3개다.
문장 셋을 적을 때 나의 의도와 실제 추론의 차이는 아래와 같다.
[내 생각] | [추론 결과]
Entailment | Entrailment
Neutral | Neutral
Entailment | Entailment
Entailment | Entailment
Contradiction | Contradiction
Entailment | Entailment
Neutral | Contradiction [X]
Entailment | Entailment
Entailment | Neutral [X]
Entailment | Entailement
Entailment에 대해서는 일반적으로 잘 맞추는데, 그렇지 않은 것은 좀 틀린 모습을 볼 수 있다. 근데 뭐 문장 자체를 좀 쉽고 편향되게 짠 부분이 있어서...
그리고 NLI로 학습을 끝내고 생각한 것은. Data Augmentation으로 늘리고나서 테스트 할거면 NLI보다는 STS로 점수를 매기는 편이 좀 더 편하겠다... 라는 생각이다. 그러면 N점 이상 유사하면 통과- 이런 식으로 할 수 있는데, NLI로 하면 Entailment가 아니면 모두 버린다... 라고 하면 좀 먼가 먼가임...
추가적으로 롤 위키 크롤링을 준비하고 있다. 생각보다 자료 양이 꽤 많아서 큰 도움이 될 것 같다.
'4-1공부 > 캡스톤-딥러닝' 카테고리의 다른 글
009. 딥러닝 공부 5일차 (0) | 2023.03.12 |
---|---|
008. 딥러닝 공부 4일차 [추가] (0) | 2023.03.11 |
007. 딥러닝 공부 4일차 (0) | 2023.03.11 |
006. 딥러닝 공부 3일차 2 (0) | 2023.03.10 |
005. 딥러닝 공부 3일차 1 (0) | 2023.03.10 |