今天的人們使用智能手機(jī)拍攝的照片數(shù)量激增,這對傳統(tǒng)的照片分類方式造成了不小的挑戰(zhàn)。我們每個人整理自己手機(jī)中存儲的海量照片尚且如此困難,對我們來說,要為所有人的照片定義一種更有序的分類方式無疑更是困難重重。
每天,人們會將數(shù)十億張照片分享到Facebook,想想你自己向下滾屏查找?guī)滋烨鞍l(fā)布的照片有多麻煩,如果要找?guī)讉€月甚至幾年前的照片呢?為了幫大家更容易找到自己的照片,F(xiàn)acebook照片搜索團(tuán)隊使用機(jī)器學(xué)習(xí)技術(shù)深入了解照片內(nèi)容,改善照片的搜索和獲取過程。
我們的照片搜索功能基于一種名為Unicorn的內(nèi)存和閃存索引系統(tǒng)構(gòu)建,這種系統(tǒng)在設(shè)計上可以順利搜索百億至萬億級別的用戶和其他實(shí)體。這套誕生于幾年前的系統(tǒng)還驅(qū)動著能夠理解社交圖譜的Graph Search功能,以每天數(shù)十億筆查詢的強(qiáng)大能力為Facebook的多個組件提供著支撐。
Graph Search的誕生是為了能根據(jù)不同社交圖譜之間的關(guān)系獲取相關(guān)對象,例如“所有住在舊金山的好友”。該功能的效果很不錯,但如果要將查詢約束在相關(guān)子集范圍內(nèi),并按照相關(guān)性對結(jié)果進(jìn)行排序或計分,進(jìn)而提供最相關(guān)的結(jié)果,這種操作中該功能的效果很一般。為了繼續(xù)完善這種技術(shù),照片搜索團(tuán)隊使用深度神經(jīng)網(wǎng)絡(luò),通過照片中的可視內(nèi)容和可查找文字改善了圖片搜索結(jié)果的準(zhǔn)確性。
關(guān)于照片,搜索功能需要了解些什么
雖然Imagenet Challenge等競賽中,圖片識別技術(shù)的演示已經(jīng)獲得了非常低的錯誤率,但以Facebook的規(guī)模來說,理解照片內(nèi)容是個很難達(dá)成的目標(biāo)。好在相關(guān)應(yīng)用領(lǐng)域的研究已經(jīng)為我們提供了最先進(jìn)的深度學(xué)習(xí)技術(shù),足以在大范圍內(nèi)處理數(shù)十億張照片,從中提取出可搜索的語義學(xué)含義。我們會使用一種名為圖片理解引擎的分布式實(shí)時系統(tǒng),分析處理發(fā)布到Facebook且公開展示的每張照片。
圖片理解引擎是一種深度神經(jīng)網(wǎng)絡(luò),其中包含數(shù)百萬種可學(xué)習(xí)參數(shù)。該引擎以先進(jìn)的深度殘差網(wǎng)絡(luò)(Deep Residual Network)為基礎(chǔ),使用上千萬張帶標(biāo)注照片進(jìn)行了訓(xùn)練,可自動預(yù)測一系列概念,包括場景、物體、動物、景點(diǎn)、著裝等。我們可以提前訓(xùn)練模型并將有用的信息存起來,進(jìn)而以低延遲響應(yīng)回應(yīng)用戶查詢。
這個圖片理解引擎為語義特征生成的高維浮點(diǎn)向量需要進(jìn)行索引和搜索,但以Facebook的規(guī)模來說,這是一種非常繁重的計算密集型任務(wù)。通過使用迭代量化和局部敏感哈希技術(shù),該功能可進(jìn)一步壓縮出數(shù)量更少,但依然足以代表大部分語義的“位”。這些緊湊的“位”信息將直接嵌入照片中,借此可直接對照片進(jìn)行評級、檢索、去重等操作。搜索查詢過程中,可通過嵌入的信息調(diào)整結(jié)果的展示順序。這種技術(shù)與文檔搜索和檢索過程中使用的技術(shù)極為類似。Unicorn最初誕生時包含適用于深度神經(jīng)網(wǎng)絡(luò)層的多種不同算法,這些算法都是針對大規(guī)模圖片集的搜索開發(fā)而來的。Unicorn可以用對象標(biāo)簽和嵌入語義創(chuàng)建搜索查詢所需的索引。目前我們正在開發(fā)該技術(shù)的新版本,希望能將這種緊湊嵌入的信息用于低延遲檢索。
在建模過程中使用標(biāo)簽和嵌入物
考慮到Facebook的規(guī)模以及用戶對快速響應(yīng)查詢的預(yù)期,我們無法對整個照片庫使用過于復(fù)雜的評級模型。因此為標(biāo)簽和嵌入物使用了一種相關(guān)性模型,該模型可估算相關(guān)性并以極低的延遲提供查詢結(jié)果。
概念相關(guān)性
這個相關(guān)性是通過豐富的查詢,以及使用相似性函數(shù)對比概念集得出的照片概念信號進(jìn)行評估的。例如,與照片查詢中所用的“中央公園”概念直接相關(guān)的查詢概念,可將與這一話題有關(guān)的照片放在首位,并從結(jié)果中隱藏所有“離題”的照片。
嵌入物相關(guān)性
通常來說,直接衡量查詢與結(jié)果之間的概念關(guān)聯(lián)性,這種做法不足以準(zhǔn)確地預(yù)測相關(guān)性。我們創(chuàng)建的相關(guān)性模型會使用多模態(tài)學(xué)習(xí)(Multimodal learning)技術(shù)了解查詢和圖片之間的聯(lián)合嵌入關(guān)系。
該模型的輸入端為查詢的嵌入向量和照片結(jié)果,而訓(xùn)練目的在于將分類損失降至最低。每個向量將放在一起訓(xùn)練和處理,這一過程會使用多層次的深度神經(jīng)網(wǎng)絡(luò)生成一個二進(jìn)制信號,結(jié)果為正意味著匹配,結(jié)果為負(fù)意味著不匹配。查詢和照片的輸入向量分別由各自的網(wǎng)絡(luò)生成,每個網(wǎng)絡(luò)可能包含不同數(shù)量的層。這種網(wǎng)絡(luò)可以通過嵌入層的參數(shù)進(jìn)行訓(xùn)練并調(diào)優(yōu)。
嵌入評級損失
上文介紹的這種確定查詢和照片之間相關(guān)性的方法可以用公式表示為一種分類問題。然而評級的主要目標(biāo)在于確定照片搜索結(jié)果中一系列照片的最佳排序。因此我們在分類公式的基礎(chǔ)上使用評級損失(Ranking loss)進(jìn)行訓(xùn)練,同時為同一個查詢生成相關(guān)和不相關(guān)結(jié)果對。
如下圖所示,模型右側(cè)部分是左側(cè)部分的深層復(fù)制(Deep copy),也就是說,他們共享了相同的網(wǎng)絡(luò)結(jié)構(gòu)和參數(shù)。在訓(xùn)練過程中,我們會將查詢與兩種結(jié)果分別放入模型的左側(cè)和右側(cè)組件中。對于每個查詢,相符圖片的評級會高于不相符圖片。這種訓(xùn)練方式大幅改善了評級質(zhì)量。
將對查詢的理解應(yīng)用給照片搜索
Unicorn的照片語料以及圖片理解引擎所應(yīng)用的嵌入物均是可搜索的。如果應(yīng)用于嵌入物的查詢語義生成了更高概率的相關(guān)性,除了用于獲取照片的索引,查詢與檢索之間的其他位圖會被打斷。理解查詢語義過程中所使用的重要信號包括:
查詢意圖(Query intents)建議了需要檢索哪類場景的照片。例如一個意在檢索動物照片的查詢需要展示以動物為主題的照片。
語法分析(Syntactic analysis)幫助我們理解查詢語句的語法構(gòu)造、詞類詞性、句法關(guān)系,以及語義。搜索查詢通常無法識別書面語的語法,而這方面現(xiàn)有的解析程序效果并不好。因此我們使用了最先進(jìn)的技術(shù),對語言標(biāo)記器(Speech tagger)中神經(jīng)網(wǎng)絡(luò)部分進(jìn)行有關(guān)搜索查詢的訓(xùn)練。
實(shí)體鏈接(Entity linking)幫助我們找出有關(guān)特定概念的照片,通常會將結(jié)果以頁面的形式呈現(xiàn),例如不同的地點(diǎn)或電視節(jié)目。
重寫查詢知識以提取由查詢的語義詮釋提供的概念。概念不僅可以擴(kuò)展查詢的含義,而且可以彌補(bǔ)查詢和結(jié)果之間不同詞匯造成的差異。
查詢嵌入物,這是一種用于代表查詢本身的連續(xù)向量空間。該技術(shù)可在對詞匯進(jìn)行word2vec向量呈現(xiàn)的基礎(chǔ)上通過遷移學(xué)習(xí)(Transfer learning)進(jìn)行學(xué)習(xí),借此將類似的查詢映射至就近點(diǎn)。
領(lǐng)域和查詢重寫
當(dāng)某人輸入查詢按下搜索鍵,會生成一個請求并發(fā)送到我們的服務(wù)器。該請求首先到達(dá)Web層,在這里會收集有關(guān)該查詢的不同上下文信息。隨后查詢以及相關(guān)上下文會被發(fā)送至一個頂級聚合器層,在這里查詢會被重寫為一個s-表達(dá)式,隨后描述該如何從索引服務(wù)器獲取一系列文檔。
根據(jù)查詢意圖,會由一個觸發(fā)器機(jī)制使用神經(jīng)網(wǎng)絡(luò)模型決定相關(guān)聯(lián)的領(lǐng)域(Vertical),例如新聞、照片,或視頻,這是為了盡可能避免針對相關(guān)性較低的領(lǐng)域執(zhí)行不必要的處理任務(wù)。舉例來說,如果某人查詢“有趣的貓咪”,那么這個意圖很明顯更希望看到照片領(lǐng)域的結(jié)果,此時我們會從搜索結(jié)果中排除掉新聞這個領(lǐng)域。
如果查詢“萬圣節(jié)”,此時將同時觸發(fā)有關(guān)公開照片及好友的萬圣節(jié)變裝照片的意圖,此時將同時搜索公開和社交圈照片兩個領(lǐng)域,進(jìn)而可同時返回搜索者的好友所分享的照片,以及評級為相關(guān)的所有公開照片。此時需要進(jìn)行兩個獨(dú)立的請求,因為社交照片是高度個性化的,需要進(jìn)行單獨(dú)的檢索和計分。為了保護(hù)照片隱私,我們會對搜索結(jié)果應(yīng)用Facebook整個系統(tǒng)都在使用的隱私控制機(jī)制。下圖演示了一個上端為“社交”,下端為“公開”的模塊。
第一階段評級
當(dāng)索引服務(wù)器根據(jù)s-表達(dá)式獲取到所需文檔后,會交給經(jīng)過機(jī)器學(xué)習(xí)訓(xùn)練的第一階段評級器處理。隨后分?jǐn)?shù)最高,Top M文檔會被發(fā)送至Rack aggregator層,借此對所獲得的全部文檔進(jìn)行一定程度的合并,隨后將Top N結(jié)果返回至頂級聚合器層。第一階段評級的主要目的是確保返回至Rack aggregator的文檔與查詢依然保持一定的相關(guān)性。例如,在查詢“狗”時,包含狗的照片無疑會比不包含狗的照片獲得更高評級。為了能以毫秒級的速度提供相關(guān)照片,我們還對整個復(fù)雜的檢索和評級階段的延遲進(jìn)行了優(yōu)化。
第二階段的二次評級
評級后的文檔返回頂級聚合器后,會進(jìn)行另一輪的信號計算、去重和評級。信號描述了整個結(jié)果分布情況的計算結(jié)果,借此可發(fā)現(xiàn)不符的結(jié)果。隨后會使用圖片指紋對視覺方面類似的文檔進(jìn)行去重。隨后會通過深度神經(jīng)網(wǎng)絡(luò)進(jìn)行計分和評級,借此生成最終的照片排序結(jié)果。評級之后的照片集(也叫做“模塊”)會被發(fā)送到結(jié)果頁面的UI中顯示出來。
針對照片搜索優(yōu)化相關(guān)性評級
對查詢與照片,以及照片與查詢之間的相關(guān)性進(jìn)行評估,這是照片搜索團(tuán)隊所面臨最核心的問題,并且已經(jīng)遠(yuǎn)遠(yuǎn)超出了基于文本的查詢重寫和匹配技術(shù)范疇。為此我們需要進(jìn)一步全面理解查詢、照片作者、照片附帶貼文,以及照片中的可視內(nèi)容。先進(jìn)的相關(guān)性模型通常需要包含頂尖的評級、自然語言處理,以及計算機(jī)視覺等技術(shù),借此才能提供相關(guān)性更高的搜索結(jié)果,為我們塑造一種新穎的圖片分類系統(tǒng),在大規(guī)模范圍內(nèi)更快速提供相關(guān)性更高的搜索結(jié)果。
閱讀英文原文:Under the hood: Photo Search
感謝郭蕾對本文的審校。