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




