Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

Shopee - Price Match Guaranteeでゴールドメダルを獲得しました

皆さんこんにちは。
@tereka114です。
GPU熱により、部屋が熱くなってきており、冷房が欠かせません。

先日、Kaggleで開催された「Shopee - Price Match Guarantee」でゴールドメダル(5位/2426)を獲得しました。

※本件のプレスリリースをこちらで公開しています。
www.acroquest.co.jp

この記事ではコンペの概要と当チームの取り組みを紹介します。

概要

ECサイトを運営するShopee社が主催で開催されたECサイトの商品をグルーピングするコンペティションです。
期間は2021/3/8〜2021/5/10の約2ヶ月間に渡り、開催されました。
商品数34250, 商品種別11014に渡る商品のタイトル(テキスト)と画像が与えられ、同一の商品をまとめます。
これにより、ユーザ体験の向上やスパムの排除を実現できます。

テキストと画像といった複数のドメインを利用するといったマルチモーダルのタスクであること、
また、単純に分類や回帰をする問題でなかったことから非常に様々な検証の可能性が見えるのが面白そうと感じて参加していました。

www.kaggle.com

本コンペの評価指標は商品ごとに同一の商品をリストアップしますが、そのリストのF1 Scoreの平均(分母は商品)を算出します。

チームでの取り組み

終了一ヶ月ほど前、私がゴールドメダル獲得圏内に入ったあたりからチームを組みはじめ、最終的にはAhmet, Alvor、私の3人チームで進めてました。
体制としては、Ahmetと私で2つのベースラインとなる手法を構築し、Alvorが特徴量探索(EDA)やFeature Engineeringを進めてました。
チームメンバがそれぞれ得意なところを進めているような感じになりました。

この2つのベースラインの流れは大きく変わりませんが、細部で利用しているモデルは異なります。
利用しているモデルの統合したソリューションは制限時間の都合でできませんでした。
ただ、あえて、最後のスコアのShake対策も兼ねて、全くモデルの異なる2つのソリューションにすることにしていました。

※チームのソリューションはこちらのスレッドに掲載しています。(英語)
www.kaggle.com

課題やうまくいったことを共有しながら進めていたのもあり、日々議論しながら進められたことは学びが非常に大きかったと感じました。

解法

私達のソリューションの流れは次のとおりです。

1. 商品群の中でペアの候補群を作成する。
2. ペアの候補群から候補を絞り、最終的なペアを作成する。

1. 商品群の中でペアの候補群を作成する。

商品群の中からペアの候補群を作成します。
ここでは、タイトルと商品画像を別々に解析しました。
実を言えば、タイトル、商品画像を同時に学習させることも試みました。
しかし、各々から近しいものを候補としたものを最終的に結合するのが最も精度が高かったです。

1-1. 画像解析

画像の検索で利用されるArcFaceを用いました。
ArcFaceは画像検索で用いられる距離学習の手法です。Backboneとしては、次の種類を試しました。

  • ResNet200D
  • EfficientNetB3/B4/B5
  • Swin Transformer
  • ViT

まだまだ畳み込みを用いたもののほうがImageNetよりもデータの少ない場合には精度が高いと思っていました。
今回、Swin TransformerやViTでチームメンバーが精度改善していたのに驚きました。

※ArcFaceの解説はこちらの記事がわかりやすいです。
qiita.com

1-2. テキスト解析

Distilbert IndonesianとMLP+Character basedのCountVector(ngram=1,3)をベースにArcFaceを用いて特徴量を作成しました。
与えられたタイトルの言語は大きくインドネシア語と英語が占めていました。そのため、インドネシア語を学習させてあるDistilbertは特に効果がありました。

huggingface.co

MLP+CountVectorを用いた理由は、タイトル中の数値の違い(同じ種類の商品でも、1000mg, 100mgは商品として異なる)を捉えることでした。
これにより、当時のPublicは0.742->0.756まで向上しました。

1-3. 候補の検索

ArcFaceから得られた中間の特徴量を用いて、類似度が一定のしきい値以上のものを候補としました。
ここで、画像検索で用いられる近しいデータのベクトルから新しいデータを生成するDatabase Augmentation(=Query Expansionと等価)を利用しました。
ベクトルの生成方法は近傍2件(自分含め)の重み付け平均です。データから最低2件以上の同一商品が存在することが確定していたのでこの設定にしました。

ここまでで、すべて導入するとPublic 0.767には乗ります。

※Database Augmentationについては、次のスライドのP23を見ていただくのが良いと思います。

www.slideshare.net

2. ペアの候補群から候補を絞り、最終的なペアを作成する。

上記のペアを用いていくつか特徴量を作り、ペアらしさを算出しました。
このペアらしさの候補群ですが、テキストは合致しているが、画像が違う、画像は同じだが、テキストが違う候補が含まれています。
このようなものを候補から省くことを目的としています。

2-1. XGBoostを用いて、候補を絞る

ペアの候補群から絞るためにXGBoostを利用しています。
2つのペアを使って、特徴として利用したのは次のとおりです。この特徴を学習し、最終的に一致しているか否かのスコアを算出するモデルを構築しました。

  • 画像特徴量の類似度
  • テキストの類似度
  • 画像類似度 + テキストの類似度(単純な加算)
  • 画像類似度 * テキストの類似度
  • FP類似度(学習データの特徴量との類似度を計算し最も近いものの値)
2-2. 凝集型クラスタリング(Agglomerative Clustering)

最後に凝縮型のクラスタリングを利用して同一商品群を求めます。
導入する前は閾値ベースでペアを作成していましたが、これを導入することにより、スコア自体もPublic 0.774->0.778へ向上しました。
最終的には少し画像のサイズを向上させるなどして精度を上げています。

凝縮型クラスタリングそのものに関しては、次のサイトがわかりやすいと思います。
qiita.com

このコンペで学べたこと

  • Transformerベースの画像認識モデル(ViT/Swin Transformer)は各コンペで今後、試す価値があり。
  • BERT+画像モデルは他のソリューションでは成功しているものがあったため、チューニング次第では十分コンペ用途には足りた。
  • 検索で利用されるDatabase AugmentationはECサイトの検索でも効果を示せた。検索タスクだと非常に有効そうに見える。

最後に

ECサイトの商品検索といった非常に面白く、実践的なコンペティションで刺激的な日々を過ごしていました。
非常に勉強になったのでまた面白いコンペに参加しようと思います。

Acroquest Technologyでは、キャリア採用を行っています。

  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

【データ分析】
Kaggle Masterと働きたい尖ったエンジニアWanted! - Acroquest Technology株式会社のデータサイエンティストの求人 - Wantedlywww.wantedly.com