DL&ML/code.data.tips

Kaggle TSE 2020 대회 top-solution 정리

식피두 2021. 4. 15. 13:28

작년에 참여해서 은메달을 획득했던 Kaggle Tweet Sentiment Extraction 대회에서

다른 사람들은 어떻게 성능을 끌어올렸는지 top solution을 훑어 보면서 정리해보려고 한다.

 

 

Tweet Sentiment Extraction

Extract support phrases for sentiment labels

www.kaggle.com

흥미롭고 배울 게 많은 답안 위주로...

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

 

그 외 답안