작년에 참여해서 은메달을 획득했던 Kaggle Tweet Sentiment Extraction 대회에서
다른 사람들은 어떻게 성능을 끌어올렸는지 top solution을 훑어 보면서 정리해보려고 한다.
흥미롭고 배울 게 많은 답안 위주로...
13-th
www.kaggle.com/c/tweet-sentiment-extraction/discussion/159505
- RoBERTa-base로 시작
- 데이터가 적어서 아이디어를 검증할 때, 5-CV를 10번(random seed 다르게) 돌려 벨리데이션을 수행
- 빈칸 자체도 패턴이 될 수 있다고 판단해서, 전처리 단계에서 여러 개의 빈칸을 한 개로 통합하지 않음
- EDA가 필요했던 부분
- ..., !!!, ??? 같은 것들은 다 분리를 해줬음. RoBERTa 의 토크나이저의 경우 '.' 하나로 쪼개지 않아 예측이 부정확해질 수도 있어서
- 정답이 여러 단어에 걸쳐 있되 앞 단어의 일부에만 걸쳐 있는 경우, 걸친 부분을 버림 (걸친 부분을 포함한 단어를 택하는 것이 아니라; Under Estimate Train Targets)
- end index를 먼저 추론하고, end index logits을 RoBERTa의 마지막 히든 레이어에 concat 시켜 start index를 예측함!!
- Label Smoothing 0.2
- Data Loader에서 랜덤하게 5% 단어를 MASK 토큰으로 치환하도록 함! (랜덤 노이즈를 준 느낌..)
- epoch 마다 LR 을 Decay 시킴
- 제출할 때는 100% data를 모두 사용하고, CV에서 가장 적합하다고 판단된 epoch 만큼 돌림 (Eearly Stop이 자주 발생했던 epoch 이라던지..), 5 fold 코드를 그대로 사용해서 5개 모델 뽑음
- 다른 sample weight을 사용.
- positive target에 weight 2, negative target에 weight 1을 주어 학습(했다고 하는데 이부분 잘 이해 안감)
- 후처리 적용
- 이 부분은 원본 코드를 더 이해해보자.. 어려움.
15-th
www.kaggle.com/c/tweet-sentiment-extraction/discussion/159246
- 오버핏이 메인 이슈라고 생각함
- CV 구성이 조금만 달라져도 score가 요동 쳤기 때문
- pseudo labeling 혹은 augmentation이 해결책이 될 순 있지만 효과적이진 않았음
- 5-fold x 7 seeds, fold stratified by (sentiment & selected text와 원문의 비율)
- 7 CV set의 스코어를 평균내어 판단했고
- 이 스코어가 향상 되야만 LB에서도 향상 될 거라고 판단.
- CNN head + RoBERTa base/large(squad2)
- 5epoch을 돌려 더 학습 (0.002)
- AdamW 3e-5 LR, linear scheduler w/o warmup
- 마지막엔 7 seeds로 full data 학습!!
- SQuAD 형식의 질문을 사용함!
- What X sentiment?
- 빈칸을 없애지 않아 연속된 빈칸 패턴에 대응할 수 있게함 (버그에 대응)
5-th
www.kaggle.com/c/tweet-sentiment-extraction/discussion/159268
- 유난히 노이즈가 많았던 데이터셋이었는데, 노이즈를 만들어낸 버그를 EDA를 통해 찾아냄
- 전처리로 버그를 교정 후 클린한 데이터셋으로 학습한 뒤
- 후처리로 다시 버그를 만들어내어 점수를 향상 시킴
- "But, maybe, noticing such bugs in data should be one skill of DS. We should not just apply model but dive into data carefully."
버그를 해결하기 위한 방법은 아래와 같았음 ㅠㅠ
www.kaggle.com/c/tweet-sentiment-extraction/discussion/159254
- shifted labels introduced by consecutive spaces
- 커뮤니티에선 이 부분을 magic 이라고 표현 했다. 간단한 전/후처리 만으로 점수를 크게 향상시킬 수 있었기 때문.
3-th
www.kaggle.com/c/tweet-sentiment-extraction/discussion/159910
- RoBERTa-base/large + BART-large
- 두 가지 방식을 사용
- word level span 예측
- character level span 예측 (버그로 인한 노이즈를 학습하기 위해서)
- GRU head
그 외 답안
'DL&ML > code.data.tips' 카테고리의 다른 글
모델이 학습 이후에 모든 입력에 대해 동일한 출력을 내는 문제 (0) | 2021.05.03 |
---|---|
모델 학습이 잘 되는지 여부를 판단할 수 있는 지표 (1) | 2021.04.27 |
분류 문제 관련 torch loss (BCEWithLogitsLoss, CrossEntropyLoss, LogSoftmax, NLLLoss) (0) | 2021.04.14 |
torch amp mixed precision (autocast, GradScaler) (0) | 2021.04.13 |
Focal Loss (2) | 2021.04.13 |