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 とした。
時系列
- 過去に書き溜めたコードから end to end で動くカーネルを作る
- text preprocessing と model の両方から benchmark カーネルに少しずつ近づく
- benchmark kernel に追いついたあとは discussions / kernels を丁寧に読みはじめる
- target だけではなく別の指標もモデルの output ととして training する multi output モデルに感心。勉強になった。
- トレーニング時間を短くするために任意長の text を input として使えるようにモデルを修正。keras の fit_generator で動かすのに苦労する。苦労が報われてかなり短縮。
- この時点で keras よりも torch の方を使う kernel が多くやきもきした。時間がないので torch はこのコンペでは追わないことを決断。
- public kernel の best score が超えられなかったので自分の実装を捨てて keras best score カーネルをもとに改善していくことに。
- 細かい改善で向上するが決め手にならず。
- 期日が近づき始めたので training と prediction の kernel を分けることに。embedding を model save/restore に含めない部分が初めてだったので慎重に実装。
- ↑で model restore が簡単になったので ensemble に着手。LSTM, GRU ベースの model を average するだけでスコア向上。
- 無視していた bert に着手。例の vanila kernel を理解して training 時間の短縮などに取り組み。LSTM model より高スコアに。fine tuning するだけであっというまに LSTM モデル超え。
- ensemble すると一気にスコアが向上
- Stacking を試してみたが prediction にそれなりに時間がかかるわりにスコアは上がらず。xgboost のチューニングの問題かもしれない。
- XlNet が出たが流石に間に合わないだろうと諦め。
- そうこうしているうちにタイムオーバー。最高スコアのものを 2 つ提出した。
どうやったらもっと上に行けたか?
- チームを組む(これは作戦を考え中)
- 各入力の loss weight の深掘り。
結果
- 288/3,167 in public LB
- 最終結果はまだ未確定