この記事はKaggle Advent Calender 10日目の記事になります。
意訳付き:kaggle初心者(当時Kaggle Contributor)が宝くじコンペ(Jigsaw Rate Severity of Toxic Comments)で1チケット(1submit)買ったら高額当選(銀メダル)した話
初めに
この投稿は、Kaggle参加時のラッキー体験に乗じて、機械学習やプログラミングなどの技術的なスキルがない初心者でもkaggleに参加する楽しみを共有したい思いで書いています。
真剣にコンペに取り組んでいた方もいると思うので最初に断っておきますが、全く悪意はありませんのでご了承ください。
コンペの概要
昨今社会問題にもなっているネット上の誹謗中傷をなくすために、英語のテキストの毒性(誹謗中傷かどうか)を予測する自然言語処理のコンペになります。
https://www.kaggle.com/competitions/jigsaw-toxic-severity-rating
宝くじコンペの由来
コンペのPublic LBは崩壊しており、結果的に大Shake祭りになりましたがPrivateLB上位にはKaggle Master、Grandmasterがたくさんいて、上位ソリューションはもれなく「Trust CV」でした。
僕は宝くじ買ったつもりなので、「はいはい、当たんないんでしょ。こちとら夢を買ってるんで」の気持ちでそこまで順位は期待していないものの、それでもコンペ終了時には「宝くじ当たるかな。そいえばkagglerもコンペ終了時はこんな気持ちなのかな」と思ってました(あ、逆ですねw)
高額当選
1832位shake upして、kaggle初心者にとっては高額な銀メダル(45位/2328チーム)に当選しました。
最初に結果見たときは、上から順位を見ていって、そのまま自分の順位を通り過ぎて(笑)、メダル圏外にも見つからなかったため順位表を3往復くらいした後にようやく見つけて歓喜しました。
運も実力のうち?
最終順位上位には実力者であるKaggle Master、Grandmasterがたくさんいましたが、僕は実力ではなく完全に運でした。それでも、いくつか自分なりの仮説を持って取り組んでいたのでそちらを紹介しようと思います。
kaggle初心者あるあるですが、最初は何をやったらいいのかわからなくて、「誰かいまからぼくは何をやればいいのか教えてください」の状態でした。ただ、kaggleに限らずですが、アウトプットができない時はインプットを増やすしかないと思います。一番簡単にできるインプット。それはコンペのデータを見ること。コンペの英語テキストを1テキストずつ翻訳して意味を確認することが大事だと思います。
「データをよく見る」。これ上級者がよくいっていて、実力者が更なる高みを目指してレジェンドになるときの実話をもとにした神話か何かと思ってましたが初心者でも大事みたいです。もちろんデータにあるのは答えというよりはヒントだと思います。そのヒントを見つけるために、少しでも生のデータを見ることが大事だと思いました。
初心者ゆるふわ仮説
このコンペではスコア評価の参考となるvalidation_data.csvというcsvファイルが渡され、validation_data.csvには2つのペア文章に対してどちらの方が毒性が高いかのラベル(less toxic、more toxis)が与えられていました。LBが崩壊しているためおそらく多くの参加者がこの評価データを使って評価していました。
ここで、validation_data.csvには優越がつけづらいテキストのペアにおいても無理やり優越をつけて毒性の評価しているように感じ、もしかするとvalidation_data.csvにも評価として参考にしない方が良いかもしれないデータ(アノテーターの感覚でラベル付けてそうなある種ノイズとなるデータ)も混ざっていそうだなと思い始めました。
その結果、validation_data.csvにある以下の3つのパターンのデータはvalidation_data.csvから削除して使わないことにしました。
- 無害なデータ:「kaggleは分析コンペ」と、「kaggleはコミュニティ」はどちらも同じ無害なデータ
- 毒性スコアが同じデータ:バカとアホは非常中傷レベル同じ
- 同じ意味のデータ:もはや書いてあることほぼ同じ
※正直、この仮説の良し悪しはわからないです。むしろ後述の通り評価データを消すのは良くない可能性があります。ただ、アイデア検証のためのlate submitはしていません(なぜなら宝くじだから笑)
世界のトップデータ分析者との交流
この仮説をkaggleのdiscuttionに投稿したところ、現kaggle masterでコンペ参加者であるAdam Montgomerieさんから「貴重な評価データを削除することは危険な可能性がある」とコメントもらうことが出来ました。このように、高度なデータ分析技術者からフィードバックをもらえる環境はとても素晴らしいと思います。 また、コメントを返されると勝手に知り合いになった気分になるところまでがkaggleコミュニティのいいところだと思います。笑
ただ、その時に僕は「え、だってほぼノイズなんだから消した方が良くないですか?」と某ひろゆきみたいに生意気に返信してしまいましたが、「君の考えには同意するけど、test dataにも同様のデータはあるから消さないほうがいいんじゃないかな」みたいな大人な対応で返信してくれました。kaggler、なんて優しいんだ。。
その後、返信してくれたAdam Montgomerieさんはこのコンペでソロゴールドをとっていました…
Adam Montgomerieさん、あの時は生意気言ってほんとすいませんでした!笑
宝くじの真相
これが最大の宝くじ要素になります。
このコンペでは学習データが与えられておらず、コンペのデータ欄にも「過去のjigsawコンペのデータとかをいい感じに使ってね」と書いてあり、参加者によって学習データが異なりましたが、コンペ終了後に、private testdataに第一回jigsawコンペのデータが重複していたことが判明しました。そして、第一回jigsawデータを使っていた参加者は宝くじの恩恵を受けることができ、その結果、僕は学習データとして第一回jigsawコンペを使っていたため、晴れて当選することができました。
宝くじ1枚の裏側
「試しに宝くじ1枚買ってみた」みたいな涼しいノリで書いてますが、実際は苦し紛れの1submitでした。というのも、コンペ終了前日にKaggle環境ではなぜか学習ずみ重みが使えないことが判明して再度学習やり直ししたり、自分のアンサンブルモデルではcode実行時間制限内に終わらないことが判明してモデルを減らしたり(でも勘違いだったっぽい。。)、The 初心者みたいなてんやわんやを一通り済ませた後に、なんとかコンペ終了の7時間前に初submitできました。
なので、trust CVでLB無意味だからsubmit必要ないという上級者のスマートな1submitではなく、
疲労困憊の中で、「これでいいです、もうこれで勘弁してください。。」という泣きそうになりながらの1submitでした。
あと、kaggleは基本的には2つまでsubmitを選べるので2submitはした方がいいと思います。僕はそれも知らずに謎に1submitに全てを込めました。無知って恐ろしいw
宝くじの呪い
その後に参加した全てのコンペで「まあ、最後に2000位くらいshake upするかもしれないし!」と割と本気で期待して当たり前にshake upしなかった時のダメージが大きくなります。宝くじに当たると不幸になるってのはホントみたいです。
最後に
これまで、kaggleのコンペを宝くじに例えていましたが、kaggleには宝くじでは買えない、そして結果よりも尊い「学び」があります。 jigsawコンペでは運の要素も大きかったため、どんな学びがあったかは参加者それぞれだと思いますが(「宝くじの呪い」の通り、ぼくは間違った学びを得ているw)、他の参加者はたくさん学びを得ていると思いますし、他のコンペでもたくさん学びがあると思います。
そして、Kaggleは、コンペティション(日本語で競争)という以上に、世界中のみんなで社会課題に立ち向かって人類の集合知と共に問題解決していくという、とても素敵なコミュニティであると感じています。
今後は、kaggleでたくさん学び、運ではなく実力をつけて真のkagglerになれるように頑張りたいと思います!