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コンペは最近あまりないので久しぶりで楽しかったです。ありがとうございました。