1st Place Solution
はじめに
コンペを開催してくださった運営の皆様、コンペの参加者の皆様に感謝申し上げます。
スパムメールの判別という身近な題材で取り組みやすく、自然言語処理の勉強になりました。
特にcha_kabuさんの下記のトピックが参考になり、このbaselineをもとにコンペを進めていきました。
MultinomialNBを使ったbaseline(参考)
コード
ソリューション
疑似ラベルの作成とモデルの学習を繰り返しました。
他のトピックにもあるように pseudo-labeling がよく効きました。
前処理
- 先頭の「Subject: 」を削除
- ストップワードの削除(Step2以降)
Step 1
- ダウンサンプリングした学習データで MultinomialNB を学習
- 学習した MultinomialNB で Spam or Ham の可能性が高いテストデータに疑似ラベルをつける
Step 2
- 学習データと Step 1 で疑似ラベルをつけたテストデータを使い MultinomialNB を学習
- 学習した MultinomialNB で Spam or Ham の可能性が高いテストデータに疑似ラベルをつける
Step 3
- 学習データと Step 2 で疑似ラベルをつけたテストデータを使い MultinomialNB を学習
- 学習した MultinomialNB でテストデータの予測
後処理
- テストデータ内のスパムメールの確率が上位17000件をスパムとし、それ以外をスパムでないとする
全体像