Jigsaw Unintended Bias in Toxicity Classification 記録 - Kaggle

Jigsaw Unintended Bias in Toxicity Classification | Kaggle に取り組んだときの感想。コンペは終了していないが submission の受付が完了。ランキング発表を待つだけなので忘れないうちにメモを残す。

過去に経験のある text の classification 系。LSTM, GRU などがすぐに解法として浮かぶ。今回は benchmark となるカーネルが公開されていたので、そのカーネルにスコアで並ぶまでは discussions / kernels を見ないと決めて取り組んだ(=他人の解法やヒントを見ずにある程度自分だけで進める)。これは良い決断だったと思う。また kibela に自分しか見られないメモを書いてスコアや進捗を管理した。kernel の stdout も kibela に貼ることを前提の format とした。

時系列

  1. 過去に書き溜めたコードから end to end で動くカーネルを作る
  2. text preprocessing と model の両方から benchmark カーネルに少しずつ近づく
  3. benchmark kernel に追いついたあとは discussions / kernels を丁寧に読みはじめる
  4. target だけではなく別の指標もモデルの output ととして training する multi output モデルに感心。勉強になった。
  5. レーニング時間を短くするために任意長の text を input として使えるようにモデルを修正。keras の fit_generator で動かすのに苦労する。苦労が報われてかなり短縮。
  6. この時点で keras よりも torch の方を使う kernel が多くやきもきした。時間がないので torch はこのコンペでは追わないことを決断。
  7. public kernel の best score が超えられなかったので自分の実装を捨てて keras best score カーネルをもとに改善していくことに。
  8. 細かい改善で向上するが決め手にならず。
  9. 期日が近づき始めたので training と prediction の kernel を分けることに。embedding を model save/restore に含めない部分が初めてだったので慎重に実装。
  10. ↑で model restore が簡単になったので ensemble に着手。LSTM, GRU ベースの model を average するだけでスコア向上。
  11. 無視していた bert に着手。例の vanila kernel を理解して training 時間の短縮などに取り組み。LSTM model より高スコアに。fine tuning するだけであっというまに LSTM モデル超え。
  12. ensemble すると一気にスコアが向上
  13. Stacking を試してみたが prediction にそれなりに時間がかかるわりにスコアは上がらず。xgboost のチューニングの問題かもしれない。
  14. XlNet が出たが流石に間に合わないだろうと諦め。
  15. そうこうしているうちにタイムオーバー。最高スコアのものを 2 つ提出した。

どうやったらもっと上に行けたか?

  • チームを組む(これは作戦を考え中)
  • 各入力の loss weight の深掘り。

結果

  • 288/3,167 in public LB
  • 終結果はまだ未確定