如何利用深度學習分類Yelp上的商業圖片

PSI內容合夥人發表於2015-10-28

Yelp上有著全世界各地的Yelper們所上傳的成千上萬的照片。這些各種各樣的照片為通往本地商業提供了一扇大窗,而我們現在僅僅在從裡向外看而已。

想要開啟這扇窗戶,我們需要開發一種影象讀取系統,能讓我們創造關於個人影象的語義資料。我們最近根據系統所產生的資料推出了標籤化照片瀏覽的服務,並且第一次嘗試以內容為基本的圖片分類服務。

建立影象分類

讀取並理解影象這一歷史性的雄心壯志有著許許多多的途徑。為了簡化我們的問題,我們最初專注於將照片分類為一系列提前定義好的種類。進而,我們將照片種類與下列的餐館聯絡起來:

image1

設計一個分類器來將照片劃分進這些種類中,我們首先需要收集許多已經有標籤的照片。通過不同的方法來進行收集:

照片說明:有許多「選單」照片在說明中有著「選單」。相似的,我們可以找到有著「壽司」或「漢堡」的說明,證明它們很有可能是食物。為了前者,我們不得不擔心誤判的情況,因為有些「食物」或「飲品」的照片的說明上是「選單上的最棒!」,因此一些清理是必要的。為了幫助識別食品,我們依靠Yelp的選單結構,它有著食品專案的每個商業列表。我們發現從列表到照片說明來配對視訊專案具有著高精確度的資料庫。

照片歸因:當在Yelp上傳照片時,使用者可以為照片加上上傳的原因,例如「是這個鋪面嗎?」。他們並不總是精確的,但是仍然可以作為被選中的照片很好的來源資訊。

眾包:我們通過眾包上所有的夥伴們來執行額外的任務,糾正我們對照片的標籤是否合適,並收集更多「內部」與「外部」的照片。通過這樣的方法可以帶來普遍質量優良的標籤,並且把成本維持在一定範圍內(包括時間與金錢)。

一旦我們有了標籤的資料,我們開始以影象分類模型AlexNet的方式利用深度卷積神經網路(CNNs)來識別這些種類。CNNs通常由深度多層卷積神經層(為了提取區域性空間與平移不變性)組成、ReLU(Rectified Linear Units)啟用函式(為了非飽和神經元)、池層(縮減畫素取樣與平移不變)、區域性響應歸一化層(為了更好的產出)以及與傳統的前饋神經網路中的全連線層。Softmax迴歸演算法的輸出與正則化方法,例如dropout應用也非常普遍。我們的CNN是建立於以Gaffe框架為主的AWS EC2 GPU instance之上。我們喜歡Gaffe是因為它用起來很容易,效能高、開源(BSD2-Clause),並且處於活躍的開發中。為了解決Gaffe的軟體附屬性,我們將CNN放置在Docker這個容器引擎, 更加容易操作。

我們還為CNN製作了摘要來確保它可以和其他分類器的可能形式更容易的整合,包括了CNN的不同instance。就像下面所提及的那樣,我們的基準是「Gaffe分類器」,通過Gaffe執行CNN;這是一種抽象分類的特殊形式,可以讀取不同的訊號,並執行不同的分類演算法。我們現在的「片面(facade)」分類器原理其實是採取兩種獨立訓練Gaffe分類器結果的平均加權值。如果我們決定進一步和依賴其他標誌(如照片說明)的分類器的合作,結果會更加直接鮮明。

image07

在2500張照片平均分割的測試中,我們現行的上述分類器展示了94%的精確率與70%的召回率。而這些資料還可以再進一步上升,我們發現這些資料對於下面列出的應用已經足夠良好。

照片分類服務

Yelp使用SOA(服務導向結構),並且我們製作了RESTful照片分類服務來支援現存或即將落實的Yelp應用。這個服務的主要應用,就像下面詳細講述的那樣,是基於商業分類的照片。鑑於這個服務需要多種分類器(例如不同版本,或者商業的不同型別),服務的應用程式程式設計介面有一個分類器ID、商業ID還有一個可選類別,繼而返回已經被分類的所有商業照片(特殊的則返回到可選類別裡),例如:

image11

我們利用標準的MySQL資料庫伺服器來儲存所有分類結果,所有的服務請求都可以被簡單的資料庫查詢來解決。為了避免昂貴的實時分類,並且因為我們現在的應用並不阻礙最新的照片分類,我們只執行離線分類。結構如下圖所示:每一個新的分類器都需要過一遍所有的照片,並將分類結果儲存在一個資料庫裡。掃描是計算密集型,但是Yelp的基本設施允許我們通過在多個機器上執行分類器來緩解。在掃描之後,我們還每天自動收集新的照片,分批傳送以分類和資料庫載入:

image04

應用:封面多樣化照片

當我們有了真正的照片分類服務,它可以立即支援Yelp的許多關鍵特徵服務。例如,我們將頁面細緻化,展示一系列「封面照片」,後者由我們基於使用者反饋與特定的照片原因的打分引擎所推薦。我們如今封面照片的典型難題在於抽選出的照片缺少「多樣化」:例如,所有下列展出的封面照片都是有關 食物(拉麵)的,使用者無法看見商業的另一方面,除非他們點開「檢視所有」的連線。

image02

照片分類現在讓我們通過類別來使得封面圖片多樣化——我們可以識別得分最高的非食物的圖片,將他們整合到封面圖片裡。通過嚴格的A/B測試,我們確認了餐廳的客戶們喜歡看見一個標出的「食物」照片,與一個標出的「非食物」的照片,以及兩個更小的「食物」的照片,與兩個「非食物」的照片,就如下圖所示。多樣化已經大幅度提升了我們客戶與圖片的互動。

image00

應用:標籤圖片瀏覽

就像人們所瀏覽過的Yelp上的圖片,Yelp的大部分來自餐廳的照片都是食物,但是我們已經聽說了客戶的反饋,他們發現Yelp的圖片比起僅僅找到最具有審美性的漢堡要有用得多。

一些人用Yelp的圖片來為特別的活動加氣氛或者導航到某一個場所,而其他人則用它們來做些更嚴肅的事情,例如檢查一個餐廳是否適合殘疾客人。所有這些任務都因為標籤照片瀏覽的應用更加容易,且更加高效。

標籤照片瀏覽是我們最重大的應用,來更新我們的照片分類服務。照片由標籤(類別)分類,就像我們在下面看見的一樣,想要直接跳到你所尋找的確定資訊變得愈發容易。

image06

下一步

new_image10 沒有一個機器學習系統是完美的。如果你想幫助提升我們的照片分類質量,請務必標出你所看見的任何一個錯誤分類的照片。我們正開始探索Yelp巨大的照片庫的應用,敬請期待以後的精彩!

機器之心編譯出品,編譯:Chen Xiaoqing

相關文章