スパムメール判別

スパムメールフィルターの開発にチャレンジ!

賞金: 100,000 参加ユーザー数: 262 4年弱前に終了

7th Place Solution

ベースライン

不均衡データにはUnderSampling+Baggingが割と定石っぽいのでLogisticRegression+前処理なしTFIDFを初手に選びました
PublicLBで0.9831626045でした

pseudo labeling

ベースラインから、word2vec+SWEMなど諸々を試しましたがあまり改善せず
二値分類でこれほどハイスコアなのでpseudo labelingが効くだろうと思って試しました

モデルはDistilBERTを使用。データはベースライン同様にundersampling。testの予測から閾値でsamplingしてsoft labelとして訓練データに加えました。これとベースラインをアンサンブルしてPublic 0.9897731280でした
このモデル自体はsubmitしていないのでスコアは不明です

4thの方も同様にpseudo labelingしていますが、スコアに差があるのでおそらくうまくいっていないと思います。
Hardラベルではない点、undersamplingした少量データでのtransforemerの使用が微妙だったのかもしれません。
他上位の方で使用されていたらソリューションを期待致します。

後処理

一部のtrainデータがtestにリークしているので予測を置き換えました。
EDAディスカッションでは354個確認できたとありますが、¥r¥nをブランクでリプレイスすると合計526個見つかりました。
なぜかtestでは一部が¥r¥nになっていないテキストがあるっぽかったです。

これでpublicで0.000929ほど伸びました。(testで0.000776ほど)

どうやら合計では1000個ほどあるらしく、終了ギリギリまで0.99を超えなかったので上位はこの辺りが関係しているのかなと思ったりしました

その他

  • ベースラインの前処理としてStemmingやlemmatizeの有無、StopWordの追加などでモデリングしてアンサンブル
    • ほとんど伸びないし悪化する場合もありました
  • CNN
    • TFIDFで十分スコアがでるのでn-gramフューチャーが重要だろうと思ったのですが、valはまあまあでも、なぜかtestの予測がすべてpostiveに偏ってしまいうまくいきませんでした
  • Distilation以外のTransfomerモデル
    • Undersamplingで訓練データが極端に少なくなるためか、lossが下がらないことがありました

敗因はPseudo labelingの失敗かと思います。
CNNもなぜか失敗したので自分のモデリング力不足を痛感しました。
純粋なNLPコンペは最近あまりないので久しぶりで楽しかったです。ありがとうございました。

Favicon
new user
コメントするには 新規登録 もしくは ログイン が必要です。