【Kaggle】2021 Shopee商品分類競賽 Part1

競賽、Data、Baseline介紹

倢愷 Oscar
8 min readMay 17, 2021

--

今年3月Kaggle上出現一個很有趣的競賽,Shopee的商品分類競賽。

當時我還在忙手上的專案,所以沒有參與,在上禮拜競賽結束,詳細研究了一下資料以及各kaggler現成的解法,在接下來會用5篇文章介紹在這個競賽有趣的各種知識,前2篇會介紹基礎背景知識,後3篇會著重在這個比賽前10名的解法分析。

在這篇我會先簡單介紹這個競賽,讓大家快速知道Shopee這次希望大家解的是甚麼問題。

這篇文章你會學到1. Shopee - Price Match Guarantee 競賽介紹
2. 基礎EDA(Empirical Data Analysis)
3. Baseline Model

Shopee — Price Match Guarantee 競賽介紹

Shopee Price Match Guarantee比賽希望我們能夠從商品的圖片、標題判斷哪些是同樣的商品

簡單來講,像是如果我在蝦皮上面搜尋「switch」這個詞會出以下頁面。

shopee搜尋switch頁面

而可以看到上面其實有些是Switch主機,有些是switch+健身環,有些則是保護殼、收納袋之類的,這次的比賽就是希望能夠僅從「圖片+商品標題」判斷出來哪些是同樣的商品,藉此shopee能夠做出更精準的商品推薦、比價、甚至可能可以做假貨分析(同樣商品價格落差太大)...等新功能

而實際data如下

train data 前5筆

裡面最重要的就是image、title、label_group這三個feature。

  • image : 這個商品的圖片名稱
  • title : 商品的標題
  • label_group : 商品的類別,也就是我們要預測的target(同一個類別可以有多個商品)

而image_phash就是一種基礎的圖片hashing方法(越相似的圖片hashing值會越接近),在這比賽中會是最最最基礎的baseline,但是因為大部分人都直接重抽圖片Feature,所以image_phash等於廢掉。

而我們要預測的就是給定一個新的商品(一樣包含image、title),找出哪些商品跟他屬於一樣的類別。

這個比賽最困難的就是如何對image跟title抽取feature

下面是data中的一些圖片,可以看出圖片的拍攝方法、品質可能差異極大,這也是其中一個對商品圖片分類困難點。

而這個比賽的Evaluation方法是F1 Score,因為是標準的衡量方法,這邊不贅述。

基礎EDA(Empirical Data Analysis)

這邊我鼓勵大家去看我參考資料中提供的EDA notebook,會更清楚一般EDA會做哪些事情,我這邊只挑我認為重要的資訊出來講。

EDA是每個比賽初期大家會花1週左右做的事情,重點在找到一些資料的特性。

補充:EDA必看1. Dataset Imbalance
2. Missing Value
3. Outlier
4. Train/Test Distribution shift
5. Feature Correlation
6. Label Mismatch

在這個比賽中EDA的空間比較小,因為主要是在抽取feature,如果對怎麼做EDA有興趣,推薦去找數值為主比賽(後續我也會介紹比較經典的)。

首先先確認有沒有Missing Value

可以看到所有feature都non-null,這代表沒有任何missing value。

同時可以看到我們的dataset size是34250,這個數字不會很大,但是如果我們最終每個商品的feature都在200~300維,這樣去算distance,運算量其實不小,所以這邊我會先記著,提醒自己可能需要用到比較高效的package

接下來看每個label_group包含的商品數量(相當於確定imbalance)

可以看到只有少少幾個label_group有50個同樣的商品,超過10個同樣商品的label_group都在少數,大部分的商品是只有零散1~3個商品。這其實非常麻煩,因為長尾非常嚴重,如果test data是在長尾上的某個商品,大概率會直接爛掉。

再來看一下同樣label_group裡面的圖片

這邊即便是同一個資料的圖片差異還是可能會非常大,同時title有一些關鍵字重複出現(Karet, Rambut, Korea),所以title的資訊可能在某些case會更好用,因為重複的關鍵字可能很重要,所以tfidf等基礎NLP feature可能會很有用

Baseline Model

打Kaggle的時候一個重要的起手式就是:快速建立出baseline model跟整個ML pipeline。

最主要的目的有兩個:

  1. 先看baseline跟網友們的差距,如果差距很大,那要考慮往Feature去做,通常代表有一個強feature我還沒找到,或是有某種information leakage沒有被我發現,或是完全用錯model,而如果差距有限,那更多就會是不斷finetune feature、model …
  2. 利用baseline的Cross Validation Scores跟Public leaderboard score的關係,來觀察train/test distribution shift,如果今天我有5個model,分別的CV score跟Public leaderboard score如下圖,那我就會知道train/test一定有某種distribution shift,而我通常會重新思考我的validation method,而不是隨意去tune我的model。
cross validation score vs public leaderboard score

最重要的是搞清楚自己下一步要做甚麼

而在Shopee — Price Match Guarantee,裡面最顯而易見的baseline model就會是

  1. 對title抽NLP feature
  2. 對image抽CV feature
  3. aggregate image跟title features
  4. 算出每兩個商品之間的距離,並設定一個閾值,超過這個閾值則判斷為相同商品

而這裡重點就是有哪些常見的CV跟NLP抽feature方法。

  • NLP feature extraction : tfidf, word2vec, BERT,而這邊如果使用sentence transformer的話可以使用多種超強的pretrained language model來做出超強baseline。
  • CV feature extraction : pretrained CNN (resnet, inception, mobilenet),這邊我們習慣pytorch的torchvision裡面支援的model,我自己最常使用的就是mobilenet。

而大部分的baseline就是由這些方法組合而成。並且可以達到約0.70~0.71左右的score。

距離30% score 0.725其實有一段不小的距離,所以要認為我們還沒有用到對的model,而這就引出了下一篇我會介紹的一個強baseline : ArcFace

如果喜歡這篇文章可以幫我多拍手幾次XD,或是對於哪個類型文章有興趣都可以在留言區跟我講~ 後續會以中難度的ML/DS/AI知識為主,以及AI/HCI研究相關知識

參考資料

--

--

倢愷 Oscar

我是倢愷,CTO at TeraThinker an AI Adaptive Learning System Company。AI/HCI研究者,超過100場的ML、DL演講、workshop經驗。主要學習如何將AI落地於業界。 有家教、演講合作,可以email跟我聯絡:axk51013@gmail.com