今回kaggleのコンペ「Shopee - Price Match Guarantee」に参加しました。
今回のコンペのsolutionのまとめと反省を行います。
コンペ概要
こちらのコンペは、Shopeeというショッピングサイトの画像、ハッシュタグ、タイトルとそれぞれの投稿を使用し、どの製品が一緒の製品なのかを予測するコンペとなります。かなり簡単に説明したので、詳しくは以下のリンクを確認してください。
今回のコンペは、画像、自然言語を組み合わせたタスクとなるため前半2週間は画像、
後半2週間は自然言語のモデルを作成するスケジュールです進めていました。
コンペ参加
ちょうどコンペが終わる1か月前でした。
まずは、コンペの概要やbaselineの作成、Discussionの読み込みを進めました。
baselineに使用したのはこちらです。(感謝)
前半2週間
類似した過去コンペのsolution、shopeeコンペのDiscussionを読み漁りつつ、baselineに付け足していきました。
コンペのくくりで言うと、以下の4つです。
参考にしたsolutionは最後にリンクをまとめておきます。
先ほどのコードをベースとして以下を試しました。
model: Seresnext系、resnest系、Efficientnet系(v2含む)、NFnet系、regnet(合計20個くらい)
loss: ArcFace、AdaCos、CurricularFace、Focalloss
activation: relu→mish、silu→mish
optimizer: adam、adamw、ranger
augmentation: HorizontalFlip、VerticalFlip、Rotate、RandomBrightness、Normalize、Cutout、RandAugment、Autoaugment
pooling: GeMPooling
other: AMP
最終的にはNFNetl0、l1、Efficientnetb5、Resnest101eにGeMを使用したモデルが精度が高く使用することにしました。
後半1週間
baselineにはTFIDFを使用して文章の類似度を計算し、knnでクラスタリングをしていましたが、Bertが使えるんじゃないか?
という議論がDiscussionに上がっていました。ランキング上位層がBertを使っていると、コメントをしていたの使用してみることにしました。
baselineはこちらです。(感謝)
こちらをもとに以下を試しました。
model: Roberta-base、paraphrase-xlm-r-multilingual-v1、distilbert-base-indonesian
input: 英語→インド語、インド語→英語にモデルによって変換
最終週
最後はアンサンブルの手法、PPTを試しました。
KNNに入力するembedingをconcatしたり、meanしたりそれぞれのモデルのKNNの予測値でvotingをしました。
最終的にはLBが一番高いものと異なるモデルでvotingしたものを提出しました。
結果
PublicLB上ではメダル圏内にいましたが、LBにかなり寄せたチューニングをしていたので、shakeするだだろうなと感じていました。
何とかしようと試行錯誤を行っていましたが、案の定shake downしました。泣
反省
入賞した方のsolutionを見ると、PPTが勝負の分かれ目なのだと感じました。
評価指標がF1なので、どうやってFPを減らすかのアイデアと実装が足りなかった。
データをよく見ることと評価指標のハックが基礎であったことを再実感しています。
反省点を列挙します。
・データを見る粒度が荒い。
途中参加だったこともあり、GMのEDAを読むなどしました。
EDAはinputのデータの探索を行います。が、逆の視点、outputからの探索ができていませんでした。
今回の評価指標はF1だったため、FPを減らすアプローチが有用でしたが、
自分のモデルがどうやって予測してるのかなど、モデルの予想からデータをとらえることが不足していました。
その結果、PPTが見つけられなかったと感じています。
・知識不足
そりゃそうだろって、話なんですが、
今回で言うとstakingにペアワイズ学習や、GNNを使用しているチームが、上位入賞していました。
そのあたりの知識がなく、そもそもの引き出しとしてなかったです。
・英語
最新の論文は基本的には英語で、codeもない場合が多いです。
その場合自分で実装する必要があるのですが、そもそも英語が得意ではないため逃げてしまいました。
一日で何とかできるものではないので、あきらめず勉強を継続していきます。
・実装力
上位の方のsolutionを見ると、自身の実装力のなさを痛感しました。
こちらも、上位の方のsolutionを読み再現できるようにしていきます。
まとめ
今回のコンペでの学びは非常に多く、自身の課題がとても見つかりました。
参加してよかったです。
まずは、宣言として以下の点を復習します。
・GNN
・ペアワイズ学習
・Database-side feature augmentation (DBA) / Query Extension (QE)
・メタデータ学習
あきらめずにMaster目指して頑張ります!
最後に一言だけ、
悔しいです!!