DSB2019 3rd place solution まとめ
はじめに
DSB 3rd place solution まとめました。
結論
- single transformerモデルであり、1位、2位とはまた違った解法をしている。
- transformer使って何か試してみたいなぁ。
- data augmentationは、テーブルだしと思って、自分はまったく考えなかったんだけど割とみんなやってる。
以下、solutionまとめ
- 一時ソース
- * 以下、拙訳ですので気になるところは1次ソースを見てね。
summary
- input dataを理解するよりもinput data の構造にフォーカスをあてた。
- つまり、feature engineering よりも dataにあったNNモデルを見つけることに注力した。
Interesting point
- 何が面白かったかといえば、positionに関係する情報(特にposition embedding)を用いることがlocal CV scoreを低下させることである。
- BERT, ALBERT, GPT2 モデルはうまく働かなかった。(これらのモデルには、position embeddingを含む)
- だから、position embeddingを含まないTRANSFORMER を用いることにした。
- *BERTとtransformerは論文読んでた気がするけど、position embeddingとか全然覚えてないや。要確認
Pre-processing
Aggregation by game_session
installation_id のsequenceは 長すぎて、(transformerに?)用いることができない。
- だから、game_sessionによってlog_dataを集計した。
- *コード略、inputの形としてこれでいいの?って感じする
NLP の LSTM と TRANSFORMER モデルはinput として単語のsequenceを受け取ります。同じように、ここではinputとしてgame_session(またはinstallation_id)のsequence用います。
Model
- Best private score: 0.564 (Single transformer model)
ここでのkeyは、game_sessionからのembeddingの作り方である。
- event_codeとかのcategoricalな値はそれぞれembeddingする。その時、その categorical vectorは、それぞれのembeddingをつなげることでできる。
- 次に、nn.lenear layerは、categorical vectorの次元削減のために用いる。
- 連続的な値は、直接linear layerでembeddingする。
- 連続値の正規化には、np.log1pを用いた
hyper parameters(抜粋)
- optimizer: AdamW
- schedular: WarmupLinearSchedule
Modified loss function
- このリンクでは、accuracy_groupの0と3のクラスは、とても似ていることが言及されている。そこで、新しいtargetを定義して、それに合うようにした。
- *つまり、accuracy_groupの0と3が意外に似ており、qwkを用いることが悪く働きそうということらしい。
- *accuracy groupは順序を持つ(カテゴリじゃない)けど、0と3が似ているという指摘は、1回やってあきらめても0だし、1000回やってから正解しても1なわけで、1000回やってから正解する人と1回しかやってない人どっちの方が3に近いかというと、1000回やったほうとは限らないということだと思う。
- *そこで、target に 成功数(num_correct)と失敗数(num_incorect)を定義して、それを予測し、そこから新しぅaccuracy groupを算出しているみたい?
- *いまいちよくわからなかったけど、そうすることで元のaccuracy groupを使うよりも改善したとのこと。
- *つまり、accuracy_groupの0と3が意外に似ており、qwkを用いることが悪く働きそうということらしい。
Additional training data generation
- Game typeのgame_sessionの追加のラベルを生成した。
- event dataのcrrect trueとcorrect falseから、num correctとnum_incorrectを作ることができた。そして同様に、accuracy groupを作ることができた。
- 追加の学習データの数は41194件
- *要は、Assesmentだけでなくて、Gameのデータから学習データを作ったということっぽい。
Pre-training and fine-tuning steps
- 3 epoch までで、上記データを追加して学習し、それ以降ではoriginalのデータのみを使って学習した。
- *画像系とかでは、こういうやり方よく見るよね。まぁ、NNだからってことなんだろうな。
Data Augmentation
- training time augmentation: 30 行以上のgame_sessionを持つinstall_idでは、50%までrandomに古い行から削除した。
- test time augmentation: 30 行以上のgame_sessionを持つinstallation_idでは、60%までrandomに古い行から削除した。
- *このtrainとtestの割合の違いはなんなんだろう...?
- *まぁ、いろいろためした結果ってことなんだろうけど。
- *このtrainとtestの割合の違いはなんなんだろう...?