プログラミングと機械学習のメモ
日付: カテゴリ: Kaggle
Tweet Sentiment Extractionコンペに参加のみなさま、お疲れ様でした。
該当コンペは、以下のURLです。
https://www.kaggle.com/c/tweet-sentiment-extraction自分は何度かKaggleに挑戦していましたが、久々にしっかりやったコンペでした。
結果は以下の通りです。
Pubric
Private
ど う し て こ う な っ た 。
あまりに悔しかったので、次に生かせるよう自戒としてブログを残すことにします。
さて、こんなに落ちた原因を探ってみましょう。
まず、リーダーボードをみると、40位以下あたりからランキングが激動してるのに対し、40位以上は比較的安定しています。つまり、Shakeしやすいコンペでも安定させるやり方はあるということですね。
自分なりにダメだったと思う点を挙げます
アンサンブルすればモデルは上がりやすいので、とにかくアンサンブルしてしまっていた。結果、Public LBに過学習してしまっていた。
早々にアンサンブルしたため、CVよりもアンサンブル結果のLBのスコアで判断してしまった。これからは、手元のCVを算出し、それを評価していきたい。(Excel等にCVとLB結果をまとめる作業をしたい。)
シード値によってスコアが変わること、ブレンドの比率を少し変えるだけでスコアが大きく変動したことを考えると、激動しやすい要素があったのではないかと想像がつく。(結果論)
要は、 Trust CVですね。アンサンブルによるLBの上昇を信頼すると痛い目に会うことがわかりました
このコンペは、 tweet本文と感情が与えられていて、どの部分がその感情の根拠となっているかを当てるというタスクです。基本的には、文の何文字目から何文字目までかを当てるものですね。
まあここまでなら普通にBERTとかできそうなんですが、アノテーションと評価指標のコンボがなかなか鬼畜なコンペとなっています。
たとえば、以下のようなテキストです。
text | Im @ the dentist ....scary people here... |
selected text | .scary |
selected textのピリオドなんやねんという。さらに、評価指標はspace区切りでのジャッカード係数のため、「.scary」を正確に予測しなければなりません。「scary」では0です。きつい。
ですので、コンペはこのよく分からない区切りを正確に当てる必要があり、これが精度をあげる肝だったわけですね。
これにより、単純にspace区切りで単語分割したり、デフォルトのBertTokenizerで処理をすると、この謎区切りはうまく表現できません。
自分は、前処理でやるのは諦めて、ピリオドを一律で1つにしたり、それっぽくデータを後処理していました。
しかし、上位者のコードを見ると、以下のことをしています。
なぜ私はコンペ中後処理ばっかり考えて、前処理で分割することを考えなかったのか… やはり、上位陣との差はここだったのかなと思いました。
まあ、これだけ見ると自分が何もしなかったように思えるので、一応やったことを記しておきます。
次回はメダル取れるように頑張ります。