閱讀292 返回首頁    go gooseeker集搜客


Yelp是如何使用深度學習對商業照片進行分類的

Yelp是美國最大點評網站,擁有世界各地的Yelper上傳的成千上萬的照片。各種各樣的照片給進入當地的商業提供了一個豐富的窗口。通過開發一個照片理解係統使Yelp能夠創建有關個人照片的語義數據。跟Yelp第一次在基於內容的照片多樣化方麵所做的嚐試一樣,由係統生成的數據正在增強Yelp近期推出的封麵照片多樣化、標簽式照片瀏覽等服務。

構建一個照片分類器

對於理解照片中的模棱兩可的目標,其實有許多不同的方式。一開始,為了幫助簡化Yelp的問題,Yelp隻專注於將照片分類為幾個預定義的類。之後,Yelp又隻專注於關於飯店的照片類別。

事實上將照片進行分類,就可以將其當做機器學習中的分類任務,需要開發一個分類器,Yelp首先需要做的就是收集訓練數據,在圖片分類任務中就是收集很多標簽已知的照片。Yelp收集這些信息可以通過幾種不同的方式:

  • 照片標題:在很多照片的標題中都包含代表照片自身含義的詞匯,例如,很多“菜單”照片的標題中包含單詞“菜單”。為了識別這些關於食物的項目,Yelp依靠自己的菜單結構(例如,https://www.yelp.com/menu/gary-danko-san-francisco/),它保留了每種食物的商業名單。Yelp發現,將列表中的食物項目與照片的標題進行匹配產生了一個高準確率的數據集。
  • 照片屬性:當上傳照片到Yelp上時,用戶允許標記照片的一些屬性,雖然它們並不總是準確的,但仍然可以很有效地幫助照片分類。
  • 眾包:通過眾包可以讓大眾自動參與照片的標注,並同時糾正一些錯誤的標注。Yelp已經發現,通過眾包Yelp通過合理的成本(在時間和金錢)獲得了質量總體良好的標簽。眾包體現了一種群體智能。

一旦Yelp有了標簽數據,Yelp就開始采用“AlexNet”形式的深度卷積神經網絡(CNNs)來識別這些圖片(因為這種方法是一種監督學習方法,非監督學習目前仍然是深度學習的難點方向)。CNNs是由多個卷積層組成,ReLU層、pooling層、局部響應正則化層和全連接層。Yelp的CNN被建立在基於Caffe架構的AWS EC2 GPU實例上。Yelp喜歡Caffe,因為它簡單易用、高性能、模塊化、開源、還一直在不斷完善。為了應對Caffe的軟件依賴,Yelp使用Docker封裝了Yelp的CNN,以便它可以更容易地部署。

Yelp還創建了抽象,以確保Yelp的CNN可以很容易地與其他形式的分類器進行集成,包括CNN的不同實例。如下圖所示,Yelp的基線是一個“Caffe分類器”,它通過Caffe的方式運行CNN;它是一個抽象分類器的一種特殊形式,可以采取不同的信號,並執行不同的分類算法。Yelp目前的“facade”分類器,是一個集成分類器,采用了不同分類結果的加權平均。如果Yelp決定進一步集成依賴於其它信號的新的分類器,這將讓問題變得更加簡單。

Yelp在一個均勻黃金分割的2500張照片的測試集上進行試驗,Yelp目前的“facade”分類器的整體精確度達到了94%,召回率達到了70%。根據Yelp的描述,雖然這些數字絕對可以再提高,但Yelp發現對於下麵描述的應用它們已經足夠了。

照片分類服務

Yelp使用麵向服務的架構(SOA),Yelp做了一個RESTful照片分類服務,用來支持現有的和即將推出的Yelp的應用程序。由於服務預計擁有不止一個分類器(例如,不同的版本或為不同類型的業務),該服務API使用一個分類器ID,一個行業ID,以及可選的類,然後返回所有屬於該行業的照片,其已經通過分類器被歸類:

Yelp使用一個標準的MySQL數據庫服務器來承載所有的分類結果,所有的服務請求可以通過簡單的數據庫查詢被處理。為了避免更昂貴的實時分類,因為Yelp目前的應用並不取決於最新的照片分類,所以Yelp隻執行線下分類。該架構如下圖所示:對於每一個新的分類器,Yelp掃描所有的照片,並且將分類結果存儲在一個數據庫中。掃描在計算上消耗很大,但通過將分類器在任意多的機器上進行並行處理,Yelp可以減輕這一點。掃描結束後,Yelp會每天自動收集新的照片,並將它們發送到一個進行分類和數據庫負載的批次中:

應用:封麵照片多樣化

一旦有了照片分類服務,就可以有效地增強Yelp的許多關鍵功能。Yelp的業務詳細信息頁麵顯示了一組“封麵照片”,基於用戶的反饋和某些照片的屬性,它們能夠通過照片評分引擎進行推薦。但是,目前Yelp的封麵照片存在一個典型問題,即所選的照片缺乏多樣性,例如,如下圖所示,所有封麵照片都是關於食物的(拉麵),用戶無法看到其他方麵的照片,除非他們點擊“查看全部”按鈕。

一旦有了照片分類服務,就可以有效地增強Yelp的許多關鍵功能。Yelp的業務詳細信息頁麵顯示了一組“封麵照片”,基於用戶的反饋和某些照片的屬性,它們能夠通過照片評分引擎進行推薦。但是,目前Yelp的封麵照片存在一個典型問題,即所選的照片缺乏多樣性,例如,如下圖所示,所有封麵照片都是關於食物的(拉麵),用戶無法看到其他方麵的照片,除非他們點擊“查看全部”按鈕。

通過照片分類服務,現在就可以讓封麵照片變得多樣化,Yelp可以容易地確定最高得分的非食品的照片,然後將其納入封麵照片。通過嚴格的A / B測試,Yelp已經證實飯店的瀏覽者更願意看到一個顯示突出的“食品”照片和突出的“非食品”照片,以及兩個小“食品”的照片和另外兩個“非食品”照片,如下圖所示。多樣化大大增加了Yelp用戶與照片之間的互動。

應用:標簽式瀏覽照片

因為任何人瀏覽Yelp照片都是在有了解之前,大部分來自於飯店的Yelp照片都是食物。但Yelp從用戶中得到反饋,他們發現用戶關心的可不僅僅是食物。有些人使用Yelp的圖片用來檢查一個特殊事件的氣氛或導航到一個第一次去的地點,而其他人使用Yelp的照片用於一些更嚴肅的應用,如發現餐廳是否能容納殘疾的顧客。隨著標簽式照片瀏覽的推出,所有這些任務現在都變得更容易、更高效。

Yelp表示,標簽式照片瀏覽是他們的照片分類服務現在提供的最顯著的應用。照片現在在各自的標簽(類)下進行組織;從下圖可以看出,跳到你正在尋找的準確信息現在變得更加容易。

下一步是什麼

任何機器學習係統都不可能是完美的。Yelp表示,如果你想幫助提高Yelp照片分類的質量,請隨意標注你看到的任何未分類的照片。

若有疑問可以或集搜客網絡爬蟲

最後更新:2017-01-09 14:08:06

  上一篇:go 生意參謀如何使用:自動取數,你的數據你做主
  下一篇:go 一行R代碼實現數據分析可視化