前言
視頻搜索是天然的富媒體檢索場景,視覺信息占據了視頻的一大部分信息量,在視頻搜索系統中引入多模態能力,對于提高整個系統的能力天花板至關重要。本文將對在視頻搜索系統中落地多模態能力(特別是視覺)進行討論,同時為了讓部分無相關背景的讀者補充一些背景知識,筆者將會對典型的搜索系統進行介紹。筆者入行未深,道行淺薄,如有謬誤請見諒并聯系指出,本文遵守CC 4.0 BY-SA版權協議,轉載請聯系作者并注明出處,謝謝。
? \nabla ? 聯系方式:
-
e-mail: FesianXu@gmail.com
-
github: https://github.com/FesianXu
-
知乎專欄: 計算機視覺/計算機圖形理論與應用
-
微信公眾號:機器學習雜貨鋪3號店
請訪問github page以獲得最佳閱讀效果:https://fesianxu.github.io/2024/06/30/video-retrieval-multimodal-20240630/
溫馨提示:在閱讀此文之前,筆者建議讀者先閱讀之前的博文 《視頻與圖片檢索中的多模態語義匹配模型:原理、啟示、應用與展望》[5] 一文,本文的應用技術基礎原理很多都在該文進行過詳細介紹,會對讀者理解本文的思路有很大的幫助。
通用搜索系統
視頻搜索系統是一種垂類的搜索場景,在具體討論多模態能力在視頻搜索場景中落地之前,我們有必要對搜索系統進行粗略的了解。之前筆者在博文[1-2]中也簡單分享過一些典型的搜索系統組成部分,搜索系統非常復雜,從算法與策略的角度上看可以大致分為以下幾個關鍵步驟:
- 信息爬取:
主要通過爬蟲技術從廣袤無垠的互聯網中爬取信息,內容是信息檢索的前提,沒有良好的內容基礎就談不上信息搜索。然而現在互聯網上可供爬取的好內容逐漸萎靡,很多用戶生產的好內容作為不可爬取的私域流量沉積在眾多app中了,如小紅書有著眾多優秀的筆記資源、知乎有著很多大V創作專業的知識內容分享,B站、抖音有著很多頂流up主創作原創視頻等。在公域好內容資源逐漸衰弱的情況下,大廠也自己下場,作為生產者去生產內容(如長視頻平臺,網飛等),或者作為平臺供給用戶去生產內容(如抖音、快手等),現在是內容為王的時代,再怎么注重內容積累都不為過。說回到爬蟲技術,其也是一個非常復雜的技術,需要從數以億計的網頁中挖取好資源、新資源,意味著需要內容去重,嗅探新資源的發布等,這些可參考張俊林老師的《這就是搜索引擎》[3] 的介紹,筆者就不過多累述了。
- 內容建庫:
爬取了資源就需要對這些資源進行建庫并且構建索引,如Fig 1.1所示,通常爬蟲系統對互聯網資源進行爬取后會落盤到一個資源池里,這個資源池的資源量可能數以千億、萬億計,由于爬蟲系統會無時無刻對互聯網的數據進行爬取,每天都會爬取到非常多的更新更好的資源,因此這個資源池的資源也會定期進行汰換,以保證資源池的高質量和高時效。不同業務需要的資源其實都是不同的,比如視頻搜索和圖片搜索、網頁搜索需要的資源類型截然不同,這個時候最好的做法是每個業務自行從資源池里挖需要的資源(即是資源篩選),然后建立業務特有的索引庫,后續的資源檢索都將發生在這個資源庫中。當然,為了保證用戶的時效需求,這個業務自行建立的索引庫也是會進行定期分片汰換的。
即便業務自行建庫,在一些大型業務里面這個庫的規模也是數以百億計的,因此通常需要按照資源質量和時效,進一步對這個庫進行切分,分成不同的庫層。如Fig 1.1所示,這是一個典型的金字塔結構,自上而下的庫層資源數量逐級遞增,質量和時效性逐級遞減,在一次請求發起過來的時候,會首先對高質量庫層發起小流量查詢,如果能檢索到的滿足資源太少,就進一步穿透后面的庫層。注意到能被網絡爬蟲公開爬取到的資源是有限的,很多資源(比如車票信息、天氣信息、快遞號等)都是各個企業私有的,我們稱之為深網(Deep Network),有一些深網信息能符合很多用戶的垂類需求,比如查詢快遞號、車票信息、航班信息等,因此會考慮會和各個公司達成合作進行數據互通。
- query分析:
一個搜索系統需要有入口讓用戶表達需求,而最為廣泛使用的入口就是文本描述了,用戶的檢索詞被稱之為query,query分析就是嘗試通過算法去分析用戶通過文本表達的潛在需求。自然語言處理被譽為人工智能的明珠,自然語言具有歧義性、不同用戶的教育背景、文字使用習慣等又存在差異,這些都提高了分析query的難度。按照博文[4]中的介紹,如Fig 1.2所示一個query分析管道可分為以下幾大部分,其中涉及到query的預處理,基礎分詞,query糾錯,需求擴展等等。對于中文query而言,分詞是非常重要的,不同的分詞策略有可能會導致一個query的語義發生巨大變化,比如“武漢市/長江/大橋”和“武漢/市長/江大橋”就完全不是一個意思。在進行完分詞后,對分詞的詞組(term)進行重要性和緊密度分析也是很重要的,query與doc的關鍵詞命中有很多種情況,比如
query: ABC
doc_A: ADBAC
doc_B: ABCAD
doc_C:CBAAD
即便query的所有分詞結果都在doc_A和doc_B、doc_C中命中了,但是顯然直覺上query和doc_B的匹配程度會更好,這是由于ABC
整個詞組都在doc_B中連續命中了,而在doc_A中屬于散亂命中,在doc_C中則屬于亂序命中了。不難發現,此處的命中類型判斷依賴于對query的分詞、term重要性分析和term的緊密度分析,這些都是query需求理解的基礎。當然,在query分析除了利用傳統的統計方法去建模外,目前更主流的是利用基于深度學習的語言模型(如BERT、ERNIE等)進行分析,具體query分析的方法筆者也了解不多,讀者如有興趣可參考博文 [4]。
query的需求類型可以分為很多類型,典型的一些需求如下所示,不難發現不同的需求有著不同的時效性和權威性需求,當然這個和具體的query也有關。
編號 | 需求類型 | 解釋 | 時效性需求強度 | 權威性需求強度 |
---|---|---|---|---|
1 | 知識類 | 科學技術常識,各領域的專業知識等 | 弱 | 中 |
2 | 影音類 | 電影,視頻,音樂,動漫等 | 中 | 弱 |
3 | 素材類 | 圖片需求,各種范文 | 弱 | 弱 |
4 | 醫療類 | 藥品相關知識,病理相關,在線問診等 | 中 | 強 |
5 | 生活類 | 生活中的疑難問題,比如手工制作,更換燈泡注意事項等需求 | 弱 | 弱 |
6 | 財經類 | 財經理財類需求,金融經濟分析等 | 中 | 強 |
7 | 汽車類 | 汽車相關需求,包括測評,購車,保養,維修等 | 中 | 中 |
8 | 3C類 | 消費電子類需求,對消費電子的測評,介紹等 | 中 | 中 |
9 | 情感類 | 情感類話題,男女關系,親情關系等 | 弱 | 弱 |
10 | 小說類 | 小說類需求 | 中 | 中 |
11 | 法律類 | 法律咨詢類 | 中 | 強 |
12 | IP類 | 明星,知名人物,動漫形象等 | 強 | 中 |
13 | 體育類 | 體育資訊,體育人物,比賽等 | 強 | 中 |
… | … | … | … | … |
- 召回:
對query分析完后,就知道了用戶的需求,以及query的分詞、term重要性、term緊密度、query擴展等等很多基礎信息,此時就可以根據這些基礎信息發起信息檢索了,此時的信息檢索通常稱之為第一階段檢索(first stage retrieval),業界也稱之為召回階段。召回階段直接面對了我們剛才提到的業務自建的庫,沒有一臺單獨的計算機能夠儲存數以百億計的資源,因此都是將資源分片儲存在不同的機器上。如Fig 1.3所示,召回階段會在倒排索引庫和ANN索引庫總同時發起召回,倒排索引依賴于字詞匹配和倒排拉鏈歸并等,而ANN召回則依賴于向量化召回技術。基于倒排的召回和向量化檢索的召回已經在各個大廠廣泛使用,這兩者的特點如下:
- 基于倒排的召回:主要基于query和doc的字詞匹配,優點在于計算速度快,具有較高的可解釋性,且對全文搜索、精準匹配等需求友好;缺點則在于難以對語義匹配需求進行建模。我們可以認為基于倒排的召回主要依賴于基礎相關性的建模,當然也可以引入doc維度的質量信號或者用戶互動信號,但是是否合理就視具體業務而言了。
- 向量化召回:對query和doc進行向量化表達成 f ( q ) , g ( d ) f(q), g(d) f(q),g(d),然后定義度量 s = h ( f ( q ) , g ( d ) ) s = h(f(q), g(d)) s=h(f(q),g(d))計算query和doc的相似度,通常是余弦相似度。向量化召回有著強大的語義匹配能力,在實際應用中通常還需要結合ANN(Approximately Nearest Neighbor,近似最近鄰)技術均衡召回率和計算復雜度,對于精準匹配等需求較為乏力,容易出現核心詞丟失等問題。同時,向量化召回由于受限于落盤doc側向量的成本代價,通常每個doc只能落盤少量的向量表征。
在實際系統中,為了引入語義匹配能力和精準匹配能力,通常會同時引入這兩種召回技術,采用多隊列召回的方式,同時召回多種不同需求的隊列后傳給排序模型進行排序。當然,此時召回的資源數量可能還是太多,向量化召回可以直接通過相似度進行排序后截斷,而倒排召回則可以構建一個召回模型進行打分后排序截斷,召回模型通常可以是一個樹模型,如GBRank,其輸入特征可以是一些統計類的基礎相關性特征,如CQR、CTR等。
- 排序:
從召回傳上來的資源可能在數以千計的級別,如果這些資源同時參與精細的排序,對資源來說是一種巨大的壓力,因此通常排序階段又會進一步分解為粗排階段和精排階段,在這兩個階段采用的排序特征粒度會各有差異,“召回是負樣本的藝術,而排序是特征的美學”這句話是有一定道理的。如Fig 1.4所示,排序階段通常都會考慮多種目標,比如相關性、質量性、權威性、用戶的后驗行為預估等等目標,通常這些維度的目標又可以繼續細分成很多子目標,由不同的模型進行建模,最后由樹模型進行目標匯總,比如相關性就可以大概細分為以下三種:
- 基礎相關性:描述了query與doc之間的字詞匹配級別的相關性,會結合文本字詞的重要性和緊密度等進行打分,這是一種先驗的相關性建模。
- 語義相關性:描述了query與doc之間的語義匹配級別的相關性,當前主流是采用語言模型如BERT、ERNIE等進行建模,這些語言模型通常都是經過大規模預訓練后,在業務數據上進行微調得到。對于語義匹配的建模,又可以細分很多特征域,比如query-title匹配,query-title-content匹配,甚至是query-vision匹配、query-audio匹配等,后者也屬于多模態語義匹配。這是一種先驗的相關性建模。
- 感知相關性:用戶行為,如點擊行為通常可以一定程度上反映query與doc的匹配關系,在一些高頻的query下面,通過歷史上的用戶行為可以建模出感知相關性。這是一種后驗的相關性建模。
質量的建模也可以分為以下幾種維度考慮:
- 硬低質量問題:對于網頁來說,就是一些網頁排版,網頁配色等質量問題。對于視頻來說,可能是馬賽克,黑邊,清晰度等視覺上會直接影響用戶消費體驗的因素。通常來說,硬低質量問題比較容易定義,可以通過很多子模型,如清晰度檢測模型、馬賽克檢測模型、黑邊檢測模型等進行打分,然后通過樹模型匯總。
- 語義質量問題:主要考慮這個網頁或者視頻的內容是否具有價值,比如是否有一定的知識增益,是否視頻剪輯、分鏡等吸引人等。通常來說,語義質量問題定義較為模糊,難以像硬低質量問題一樣細拆到各個子維度,因此一般有兩種解決思路:一是通過用戶的行為反應建模,比如用戶在某個視頻下的瀏覽時長,評論,是否快劃等,但是這種有著充分的用戶行為的視頻都是較為稀少的,更多的視頻是用戶行為稀疏的,這個時候可以考慮第二種方法,采用端到端的方式將原始特征進行輸入,通過深度學習的方式學習視頻質量標簽,這個時候模型有機會學習到蘊含在質量標簽背后的語義質量問題,當然前提是質量標注的標準得同步上這個需求。
- 多目標排序:
多目標排序同時建模相關性、質量性、權威性、時效性、用戶點擊行為等眾多目標,雖然在排序階段可以將這些目標的特征都作為樹模型的輸入進行建模,但是大部分時候權威性、時效性和用戶點擊行為(CTR)這些特征,學習出來的權重占比都太過于小,因此樹模型不能很好的建模。為了建模這些特征,一是可以在樹模型組建樣本的時候,對時效性、權威性或者CTR等目標組建偏序對樣本,即是在樣本滿足標注都在同檔位的前提下,進行其他目標的偏序對組建。其次,我們也可以考慮以特征公式加權的方式進行建模,如下所示:
S r e r a n k = S s a t + ∑ i ∈ { f r e s h n e s s , a u t h , c t r } g a t e i ? S i (1-1) S_{\mathrm{rerank}} = S_{\mathrm{sat}} + \sum_{i \in \{\mathrm{freshness, auth, ctr}\}} gate_{i} * S_{i} \tag{1-1} Srerank?=Ssat?+i∈{freshness,auth,ctr}∑?gatei??Si?(1-1)
其中的 g a t e i gate_{i} gatei?表示門控,其次的 S i S_i Si?表示時效性、權威性和ctr的打分。通過這種方式,能夠更及時更靈活去解決這些維度的bad case。
視頻搜索系統與多模態能力建設
視頻搜索 vs 通用搜索
以上討論的是通用的搜索系統經典的結構,那么對于視頻搜索來說有啥異同呢?首先,視頻搜索系統是通用搜索系統的一個垂類應用,因此這些基本的階段都是有的。但是視頻媒介和網頁媒介畢竟差別巨大,視頻是天然的多模態媒介,有著豐富的時空視覺信息、音頻信息和文字信息,而網頁媒介大多還是集中在文本信息和圖片信息,筆者曾經在博文 [5] 一文中討論過視頻和圖片視覺上的區別,有興趣的讀者可以移步討論。如Fig 2.1所示,網頁落地頁(移動應用中)的信息元素大概有:標題、作者信息、發布信息、內容信息和交互區(評論,點贊等)等,而視頻落地頁的信息元素也是類似的,但是在內容信息上形式大有不同,視頻的內容信息主要集中在了以下幾點:
- 視頻的視覺信息:視頻視覺是最為開門見山的,在大部分情況下,視覺信息承載著視頻的主要內容,有很多文本內容難以描述的信息,通過幾張圖片就能簡潔明了地說明。
- 視頻的文本信息:視頻的文本信息主要體現在視頻的字幕、臺標或者作者logo、以及內容中的文本等,通常來說由于字幕域通常是視頻制作者的文案,因此對整個視頻內容的概況能力會更好些,而內容文本則充滿著噪聲。可以通過OCR(Optical Character Recognition)技術對文字進行提取后,按照需求進行分域。
- 視頻的音頻信息:視頻的音頻信息又可以分為自然音頻信息和說話人的音頻信息,后者則通常是視頻的文案配音,通常可以稱之為speech,可以通過ASR(Automatic Speech Recognition)技術進行提取。通常來說,視頻的ASR信息也是重要的內容信息,在很多時候可以視為是對字幕域OCR的補充。
- 視頻標題:視頻標題是一個視頻的“門面”,由于標題通常都是作者自行取的,因此其對視頻的內容概括能力是比較強的,在視頻搜索中經常使用。
- 視頻標簽:有些作者會給視頻手動進行打標簽,或者添加話題元素,如
\#是時候去趟博物館了#
,\#微博春日讀書會#
之類的,這些也可以視為是視頻的主題。 - 用戶交互信息:用戶的評論,彈幕也是間接地描述視頻內容的信息,雖然噪聲很大,但是可貴在可以引入用戶的外部知識,對視頻的內容進行驗證。
OCR信息和ASR信息可以視為視頻內容的一種文字表達,對應網頁內容中的文字,在視頻搜索中可以作為內容域進行建模,廣泛地在召回和排序中使用。這些文本會比較冗長,字符長度很容易達到上千,對于模型建模來說并不友好,因此在一些工作中會考慮對長文本內容進行提煉 [6] 后使用,可以視為是一種關鍵句提取。同時,OCR信息和ASR信息通常是一種互為補充的存在,因此也可以用OCR/ASR去補充另一者的內容缺陷后使用。視頻的標題也是一種概括性很強的文本,在視頻搜索中也是經常使用的文本信息,無論是OCR/ASR還是標題都在視頻搜索的召回和排序中廣泛使用,這些屬于基礎的(文本)單模態能力建設,因此也不在本文的討論范圍內。
為什么是多模態
那么只采用這些文本信息是否足以描述整個視頻的內容,從而為我們之前提到的搜索過程中的種種目標建模呢?筆者看來,這些文本信息能夠在很大程度上描述視頻的內容,但是視頻中一些更為細致的內容則需要通過視覺信息進行描述。如Fig 2.2的例子所示,“蜘蛛人”一詞可能存在多種含義,如高空作業的工作人員可以稱呼為“蜘蛛人”,而電影角色蜘蛛俠形象也可以稱之為“蜘蛛人”,這兩者在視頻中的視覺信息差別很大,但是文本差別并不是很大,此時多模態建模能夠幫助視頻搜索中排序得更合理,這可視為是多模態建模在相關性方向的一種應用。當然,讀者也可以反駁道,“我看這文本信息也有一定的區分度啊,為何就一定需要多模態的能力呢?”。筆者看來,的確就舉的例子而言文本信息有所差別,如果文本模型建模地足夠好,應該是能捕捉到區別,但是我們要考慮到整個視頻庫中很多視頻的文本信息缺失(特別是小視頻,還有就是用戶隨手錄制的vlog等,這些視頻的可用文本信息通常都很少),此時視覺信息可能是唯一能利用的內容信息。此外,文字信息的區別度在某些情況下(比如就我們舉的這個例子)區分度可能遠不如視覺差別來的大,如果能將視覺能力也利用起來,將能大幅度減輕文本模型迭代的壓力。
當然,多模態能力不僅能對相關性進行賦能,同時對質量建模也是作用匪淺的,如下所示:
- 題文不符視頻的判斷:視頻搜索中有著不少題文不符的例子,即是視頻的標題和其實際內容不一致,這種視頻如果只依靠文字去進行建模,有些難case將難以解決,如果引入視覺信息將會對這類型的視頻有著更全面的描述。
- AIGC視頻的判斷:隨著生成式模型的廣泛應用,現在很多AIGC的視頻充斥在搜索引擎內容庫中,這些視頻的視頻內容來自于各種來源的自動拼接,聲音則是采用了TTS生成的機械音,在很多情況下都是屬于低質量的視頻。如果光從文字的角度上看,其文案可能一點毛病都沒有,甚至可能比UGC內容還更加流暢,光靠文字模型是難以解決這種case的。一些高頻的視頻可以采用用戶后驗行為、用戶互動行為去判斷,但是對于一些缺乏用戶消費的視頻來說,只能通過多模態的能力去輔助判斷這類型的視頻質量問題了。
- 內容價值的判斷:內容價值較高的視頻其剪輯風格、分鏡,包括視頻的調色等都有著特定的模式,這種類型的視頻也是適合多模態能力切入的場景。
多模態能力由于是對視頻的一個更為全面的描述,其也很適合對用戶的交互行為和后驗行為進行建模,比如在預測用戶的消費時長建模上賦能。從我們以上的討論不難看出多模態能力對于視頻搜索的重要性,在很多細致的場景中,光靠文本能力無法很好地滿足用戶的需求,因此建設合適的多模態能力對于視頻搜索來說是非常有必要的。
筆者之前曾在博文 [5] 中介紹過一些基礎的視覺多模態技術,如Fig 2.3所示,我在博文中將多模態的匹配分成了語義對齊(semantic alignment)和語義融合(semantic fusion)兩個階段,其定義如下:
- 語義對齊:指的是將文本中的視覺實體,屬性描述,進行對應視覺元素的映射。此處的圖文映射關系可稱之為基礎視覺語義。
- 語義融合:在語義對齊的基礎上,對基礎視覺語義進行融合、組合,從而形成復雜的復合視覺語義。復合視覺語義包括視覺關系,更為抽象的視覺氛圍等。
在筆者看來,在視頻搜索這個業務場景中,視覺多模態能力的收益點主要有兩塊:
- 視覺信息為文本信息作為補充,豐富文本信息的表述。 這種角度下,我們是以文本為中心去思考的,這樣做的原因很簡單,用戶表達需求的手段也是以文本為中心的檢索詞query,因此這個時候文本信息才是居于核心地位的。假設我們的模型 f ( ? ) f(\cdot) f(?)能夠將視覺概念都映射到文本語義空間,那么此時視覺信息的引入相當于就是引入了更豐富的文本。這是多模態建設的基礎要求。
- 視覺信息在描述視頻本身的內容,而與文本語義無關。 在這種角度下,視覺應該描述一些視頻固有的結構,比如剪輯風格、畫風、調性、色彩風格等等,這些視覺概念可能很難用簡單的文本語義表示,但是確實是決定一個視頻之所以有趣、有價值與否的重要視覺因素。這是多模態建設中錦上添花的過程。
具體更多細節此處不展開,建議讀者可以移步 [5] 中去討論。
多模態建設的架構
在多模態能力的建設和落地中,作為視頻內容理解特征的一環,通常都需要對視頻庫里的視頻進行計算特征后離線落盤(數量通常都以10億起步計算),如果一次迭代只能給一個下游業務使用,那么就會顯得成本高昂。一種更經濟的手段是,對視頻進行多模態向量提取并且落盤后,能夠供給給多個業務and多個項目使用,提高多模態能力的產出投入比(ROI),因此我們希望多模態能力是一種分階段的且通用的。如Fig 2.4所示,筆者構想中的多模態能力建設框架圖應該是一個三層架構:
- 基礎數據層:包含了業務的人工標注數據(萬的級別),大規模預訓練常用的視頻數據(億的級別)、視頻文本對數據(億的級別)、圖片文本對數據(10億的級別)等,這些數據通常都是采集自用戶的點展日志,通過一些過濾規則得到。
- 基礎模型層:基礎模型層主要對多模態模型進行建模,最終目標是對每一個視頻進行多模態特征的提取。筆者在這層主要分出了三種類型的模型:自監督模型,跨模態模型和稠密向量稀疏化模型。
- 業務模型層:在基礎模型層產出了對應的視覺內容理解向量之后,可以交給業務模型進行使用,比如相關性模型,質量性模型等。
視覺跨模態建模
筆者想先從基礎模型層的視覺跨模態建模開始講起,“跨模態”指的是跨越視覺和文本兩個模態,給視覺建立與文本關聯的語義信息,這也就是在建模筆者所認為的收益第一點“視覺信息為文本信息作為補充”。跨模態建模的最為經典的工作之一,當屬21年誕生的CLIP(Contrastive Language Image Pretrain)[9],該工作采用大規模對比學習讓視覺模型對齊文本語義概念,取得了顯著的成功。如Fig 2.5 (a)所示,CLIP是一個雙塔模型,分為圖像編碼器和文本編碼器兩大部分,其損失函數采用的是雙向的infoNCE損失,整個計算過程可以由以下的偽代碼示意,具體細節可參考 [5] 的介紹。
# image_encoder - ResNet or Vision Transformer
# text_encoder - CBOW or Text Transformer
# I[n, h, w, c] - minibatch of aligned images
# T[n, l] - minibatch of aligned texts
# W_i[d_i, d_e] - learned proj of image to embed
# W_t[d_t, d_e] - learned proj of text to embed
# t - learned temperature parameter
# extract feature representations of each modality
I_f = image_encoder(I) #[n, d_i]
T_f = text_encoder(T) #[n, d_t]
# joint multimodal embedding [n, d_e]
I_e = l2_normalize(np.dot(I_f, W_i), axis=1)
T_e = l2_normalize(np.dot(T_f, W_t), axis=1)
# scaled pairwise cosine similarities [n, n]
logits = np.dot(I_e, T_e.T) * np.exp(t)
# symmetric loss function
labels = np.arange(n)
loss_i = cross_entropy_loss(logits, labels, axis=0)
loss_t = cross_entropy_loss(logits, labels, axis=1)
loss = (loss_i + loss_t)/2
為何CLIP能如此成功地進行跨模態語義對齊呢?筆者曾在 [5] 中進行過這個問題的討論,此處為了上下文連續性,在此再進行簡單討論。CLIP有兩個關鍵的優化點:
- 大量數據:采用了大量的互聯網帶噪數據,數據量達到了4億對圖文對數據。
- 超大batch_size: 通過
all_gather
機制匯聚來自于多張GPU中的特征,使得batch size達到了32k之多。
如Fig 2.5 (b)所示,在數據量足夠大且batch_size足夠大的時候,一次計算就可以厘清正樣本和多個負樣本的概念區別,這也是被稱之為對比學習的原因,這讓高頻視覺概念的語義對齊變得極其高效。當然,一些低頻的、組合型的視覺概念難以通過對比學習的方式進行對齊,這個時候要依靠后續的語義融合模型建模了,我們在業務落地時候,可以考慮把這塊放到了業務融合模型中進行。
看到模型選型方面,視覺編碼器和文本編碼器都可以統一采用Transformer架構進行統一建模,如視覺編碼器可采用ViT,文本編碼器采用BERT、ERNIE,這樣有幾點好處:
- Transformer的尺度效應(scaling law)已經被廣泛證實,其模型容量和模型設計可以支撐起海量數據的訓練。
- Transformer可以做到高度并行化,并且有很多成熟的性能優化工作,視覺端和文本端統一使用基于Transformer的模型,后續部署的時候可以復用性能優化的經驗。
- 采用Transformer架構對視覺建模,需要對輸入進行分塊(patch),其輸出可以視為是多個視覺稠密的令牌(token),這有利于后面會談到的視覺向量的稀疏化。
在數據這塊,我們從線上的點擊數據中,不難獲取海量的用戶檢索詞query和點擊的視頻video的二元組<query, video>
,但這不意味著文本塔只能輸入query。用戶query是用戶表達需求的產物,query通常是抽象的,而且query中很可能會存在弱視覺語義的表達,什么是弱視覺語義呢? 筆者在博文 [5] 中曾經介紹過,在此再解釋下。我們之前談到的圖文對數據,在理想情況下都應該如同Fig 2.6的左圖所示,文本對圖片中的視覺元素進行客觀地描述,從而模型可以學習到文本與視覺的語義對齊,我們將這種圖文對數據稱之為強視覺關聯(Strong Correlation),筆者也稱之為強視覺語義。然而在真實互聯網數據中,圖文對數據并不是如此的理想,很多時候文本描述并不是在描述畫面的視覺元素,而是整張圖的抽象含義,如Fig 2.6所示,作為對整個圖的視覺描述,理想的本應該是
There are several burning candles on a fruit cake. (加粗的為視覺概念)
但是在實際的互聯網數據中,很多是對整個場景的抽象描述,比如
Happy birthday! make a wish.
這種抽象描述沒有任何視覺元素(實體、屬性、關系等),因此我們稱之為弱視覺關聯(weak correlation),筆者也稱之為弱視覺語義。單純依靠弱視角關聯數據,顯然模型無法將沒有任何視覺語義的文本對齊到圖片中的視覺元素中。而用戶的query,很多時候就是這種弱視覺語義文本。
這也解釋了如果我們直接用<query, video>
去訓練CLIP,其loss會下降得緩慢的現象,正是因為query過于抽象,難以直接映射到視覺中的實體概念。一種可行的方法是參考ERNIE-VIL 2.0 [12-13] 中的方法,在CLIP訓練時采用多視角的文本信息去輔助抽象語義、弱視覺語義的學習,所謂多視角的文本信息,即是描述同一個視頻的多種不同來源的文本信息,成對的<query, video>
中的query是其中一種,視頻本身的標題、OCR、ASR、標簽信息都屬于是多視角的文本信息。如Fig 2.7所示,一種可參考的方式是,文本塔除了喂入用戶query之外,還可以輪流喂入視頻的標題,即是輸入不光是<query, video>
,而且還有<title, video>
,當然此時文本編碼器是共享參數的。此時通過視覺信息的橋接作用,就有機會通過title中更為具體的信息,去詮釋query里面的弱視覺語義概念。<title, video>
去訓練CLIP的loss下降比起<query, video>
會快很多,其實這也很好理解,視頻標題畢竟是視頻用戶自行取的,肯定會比關聯的query的相關性強很多,因此模型學習關聯起來也會更為容易。
肯定會有讀者好奇,“那多視角文本那么好,是不是盡可能都把視頻里面的文本信息,如OCR都給用上去做多視角對比學習呢?”。在筆者看來,OCR信息過于嘈雜,且長度都很長,里面包含有很多視覺元素信息,當然還有更多的非視覺元素信息。從本質上說,我們的文本編碼器無論采用什么多視角學習方法,終究還是為了query理解服務的,query和OCR的分布差別過大將不利于實現這個目的。OCR確實也包含有很多視覺信息,我認為一種較為可行的方式,如Fig 2.8所示,是從視頻中挑選出足夠代表整個視頻主題的若干關鍵幀,這些關鍵幀需要富含強/弱視覺語義概念,同時提取這些關鍵幀的OCR信息進行學習。
整體來看,CLIP是一個視頻-文本的雙塔模型,對于視頻塔的輸入,我們可以有兩種考慮:
- 純視覺輸入:只輸入視頻的視覺信息,也就是視頻幀的信息。
- 混合輸入:除了視頻的視覺信息外,還可以同時輸入視頻側的文本信息,比如標題、OCR等。
我們應該在CLIP中去建模整個視頻的信息嗎?筆者傾向于不要這樣做,有幾點原因:
-
避免“文本短路”(text shortcut):當視頻塔中混合了標題、OCR等文本信息后,文本塔通常輸入的是用戶的query,
<query, video>
屬于跨模態匹配,難度通常比同模態的<query, title>
,<query, ocr>
匹配困難很多。而且考慮到,我們的樣本來自于用戶的點擊樣本,點擊樣本來自于搜索有展現的樣本,已經經過了現有系統(基本上依賴于文本的匹配能力)的漏斗篩選了,因此query和title、ocr之間的匹配會強很多。如Fig 2.9所示,如果視頻塔中同時存在視覺信息,文本信息,那么模型很容易學到query與文本之間的匹配關系,從而忽視query與視覺之間的匹配關系,而后者才是我們的建模目標,這就是筆者所謂的“文本短路”,這種現象也在一些論文中有所報告 [10-11]。 -
提高多模態特征作用的獨特性:即便有辦法緩解“文本短路”現象,筆者也不建議在視頻塔中引入視頻的文本信息。視頻塔產出的稠密向量是會供應給下游的業務模型,比如排序、召回模型使用的,而排序、召回模型中主要輸入又是文本信息,在視頻塔這塊如果過多考慮文本信息,收益很容易被下游模型給掩蓋掉。在語義對齊階段,應該盡可能只做好語義對齊這一件事情,而不要去過多沾染語義融合,因為很可能后者的建模導致前者沒建模準確。
雖然視頻和圖片都是視覺媒體,但視頻不同于圖片,視頻是具有時空特性的視覺媒體。在視頻搜索場景中需要將時序信息組織到何種程度,這也是一個值得思考的問題。在基于動作識別的視頻理解研究中 [9], 很多方法都會考慮建模視頻的光流信息,這屬于“稠密”的序列信息建模,通常都需要比較稠密的幀采樣策略,才能對特定動作的上下文進行建模。如Fig 2.10所示,稠密的抽幀方法會密集地抽取一小段時間內(大部分是幾秒鐘內)的幀,從而才能跟蹤動作語義單元的在幀間的變動,從而為動作識別提供基礎。
而在實用的視頻搜索場景中,筆者認為更需要的是“稀疏”的序列信息建模,如Fig 2.10的視頻A和視頻B所示,在視頻搜索中,更需要通過序列信息去建模這個視頻的主題,以及判斷這個視頻是“主題密集”的,還是“主題稀疏”的。以視頻A [16] 為例,這是一個用戶拼接多個搞笑視頻而成的合集,這種視頻如果均勻抽幀的話,會發現其幀間的主題差異是巨大的,而且上下文之間可能語義關聯很弱,因此是主題稀疏的。視頻B [17] 則是一個精心制作的視頻,主要介紹一個巨大的鯰魚的烹飪做法,因此會發現其上下文的主題是很一致,語義關聯很強,屬于是主題密集的。在視頻搜索中,視覺序列建模的意義正在于此,可以判斷這個視頻的主題屬性,從而為下游業務賦能,比如在視頻質量建模中,通常會認為主題集中的視頻會更有“價值”。
為什么采用稠密向量
最終我們將視覺編碼器產出的稠密向量進行落盤,筆者這個時候想起了之前在百度工作時候,和同事的一次閑聊。同事那時候問我,“對視頻進行標簽分類,與使用視頻內容理解的稠密向量,在業務上有啥區別呢?”。這其實是一個相當好的問題,他的意思很簡單,在現有的技術框架下,有很多對視頻進行分類的工作,比如將視頻分為是醫療類、體育類等等,這個取決與具體業務的分類體系,他其實好奇的是采用稠密的多模態向量會帶來怎么樣的不同。我認為這其實是分類標簽(classification label)和語義標簽(semantic label)的區別,也是獨熱表示(one-hot representation)和分布式表示(distributed representation)的區別。筆者曾經在 [5] 中討論過,我不妨借用下之前的解釋。
在分類任務中,我們的標簽通常是“硬標簽(hard label)”,指的是對于某個樣本,要不是類別A,那么就是類別B,或者類別C等等,可以簡單用one-hot編碼表示,比如[0,1,0], [1,0,0]
等,相信做過分類任務的朋友都不陌生。以ImageNet圖片分類為例子,人工進行圖片類別標注的過程并不是完全準確的,人也會犯錯,而且犯錯幾率不小。那么很可能某些圖片會被標注錯誤,而且圖片信息量巨大,其中可能出現多個物體。此時one-hot編碼的類別表示就難以進行完整的樣本描述。我們這個時候就會認識到,原來標注是對樣本進行描述,而描述存在粒度的粗細問題。one-hot編碼的標簽可以認為是粒度最為粗糙的一種,如果圖片中出現多個物體,而我們都對其進行標注,形成multi-hot編碼的標簽,如[0,1,1]
等,那么此時粒度無疑更為精細了,如果我們對物體在圖片中的位置進行標注,形成包圍盒(bounding box,bbox),那么無疑粒度又進一步精細了。
也就是說,對于標注,我們會考慮兩個維度:1)標注信息量是否足夠,2)標注粒度是否足夠精細。然而,對于一般的xxx-hot標簽而言,除了標注其類別,是不具有其他語義(semantic)信息的,也就是說,我們很難知道類別A和類別B之間的區別,類別C與類別B之間的區別。因為人類壓根沒有告訴他,如Fig 2.11 (a) 所示,基于one-hot標簽的類別分類任務,每個標簽可以視為是笛卡爾坐標系中彼此正交的軸上的基底,這意味著每個類別之間的歐式距離是一致的,也就是說,模型認為貓,狗,香蕉都是等價的類別,但是顯然,貓和狗都屬于動物,而香蕉屬于植物。基于one-hot標注,模型無法告訴我們這一點。
也就是說,貓和狗,相比于香蕉,有著更為接近的語義,也許Fig 2.11 (b)會是個更好的選擇。如果我們的標簽不再是one-hot的,而是所謂的語義標簽,或者在NLP領域稱之為分布式標簽(Distributing label, Distributing vector)或者嵌入標簽(embedding label, embedding vector),那么類別標簽之間的歐式距離就可以描述類別之間的相似程度,這個可視為是簡單的語義信息,然而很多高層語義信息都依賴于此。
以上的解釋其實就部分回答了我同事的問題,首先,對視頻進行標簽分類,都是在一個封閉集合(close set)中進行的,也就是所有類別都會落在這個集合中,這勢必減少了分類的靈活性,因為無法對開放集合(open set)的類別進行分類。 其次,分類標簽是一個非語義標簽,我們從剛才的討論已經明白了語義標簽可以度量不同概念之間的關系,稠密的多模態向量就是一種語義標簽,其中包含有豐富的語義信息,使得這個多模態特征對比于傳統的分類標簽會更加的通用,有利于給更多的下游業務賦能。
視覺稀疏化建模
如果稠密向量需要在線上應用,稠密向量的落盤需要占據不少的正排儲存空間,這塊的成本不容小覷。一個視頻級別的稠密向量,可能需要1KB的儲存空間,而如果要落盤幀級別的稠密向量,一個視頻可能就需要200KB,這是200倍的儲存成本增加!!因此在實際應用中,大部分在線的線上應用只能使用視頻級別的稠密向量,然而已經有不少實驗都證實了幀級別的稠密向量的收益,為了讓線上應用也能以某種形式使用到幀級別的多模態語義信息,視覺稀疏化便是一種可參考的方案。
視覺稀疏化,以某種形式將稠密的視覺向量轉化為稀疏的ID型特征,以求盡可能保留主要語義的情況下,盡可能減少儲存空間。一種可行的視覺稀疏化的方法,就是采用向量量化(Vector Quantization)技術,如公式(2-1)所示,將稠密向量 z e ( x ) ∈ R D z_{e}(x) \in \mathbb{R}^D ze?(x)∈RD在一個訓練好的視覺字典 E = { e 1 , ? , e K } \mathcal{E}=\{e_1,\cdots,e_K\} E={e1?,?,eK?}中尋找最近鄰,并且將最近鄰情況下的詞典索引 k k k記為該稠密向量對應的稀疏特征,通過這個稀疏特征 k k k,可以在 E \mathcal{E} E中查表得到其恢復后的稠密向量 z q ( x ) = e k z_q(x) = e_k zq?(x)=ek?,這個過程就是對 z e ( x ) z_e(x) ze?(x)的稀疏化。如Fig 2.12就展示了一個稠密特征圖 f ∈ R H × W × D \mathbf{f}\in \mathbb{R}^{H \times W \times D} f∈RH×W×D如何通過向量量化的方式轉成稀疏特征 f ′ ∈ { 1 , ? , K } H × W \mathbf{f}^{\prime}\in \{1,\cdots,K\}^{H \times W} f′∈{1,?,K}H×W,并且通過稀疏特征恢復出 f ^ \hat{\mathbf{f}} f^的過程。在最終落盤特征的時候,只需要落盤 f ′ \mathbf{f}^{\prime} f′即可,假如詞典的 K = 8192 K=8192 K=8192,那么只需要一個int16
就可以儲存一個id,這意味著只需要原先 1 / ( 2 D ) 1/(2D) 1/(2D)的儲存空間即可。
在線上應用的時候,只需要將視覺字典分發給各個業務模型,同時將稀疏特征進行落盤,那么線上的業務模型就能以最小的儲存代價,使用幀級別的視覺語義信息了。同時,視覺字典其實就是一個lookup table,和word embedding字典沒什么區別,同樣是可以由業務模型進行更新的,這給業務建模帶來了極大便利。因此,這個過程不妨可以看成是將視覺進行了“文本化”,擴充了一些“視覺token”。
z q ( x ) = e k , w h e r e k = arg ? min ? j ∣ ∣ z e ( x ) ? e j ∣ ∣ 2 (2-1) z_q(x) = e_k, \mathrm{where} \ k = \arg\min_{j} ||z_{e}(x)-e_j||_{2} \tag{2-1} zq?(x)=ek?,where?k=argjmin?∣∣ze?(x)?ej?∣∣2?(2-1)
從本質上看,如Fig 2.13所示,其實稠密視覺向量量化的方法是將視覺語義進行基礎語義的分割,然后嘗試進行基礎語義聚類的結果,視覺詞表 E \mathcal{E} E里面的每一個項都是一個聚類簇中心。當然,只用聚類中心去代表整個類群的實例點,是會帶來信息損失,一些視覺細節將會被忽視,然而對于搜索場景而言,這些視覺細節信息并不非常重要。
那么,這里的核心就是這個視覺詞表,需要怎么訓練呢?這里的方法可以參考VQ-VAE [14],此處的細節也可參考筆者的博文 [18]。 整個框架中有若干參數需要學習,分別是encoder,decoder網絡參數和視覺字典的參數。然而稀疏編碼的過程由于采用了最近鄰方法進行查表,這個過程顯然是無法傳遞梯度的,為了實現編碼器的更新,可以考慮將解碼器的梯度直接拷貝到編碼器中。假設對于編碼后恢復的 z q ( x ) z_q(x) zq?(x)而言,其每個元素表示為 D i , j , k D_{i,j,k} Di,j,k?,那么對于其中某個元素的梯度表示為 ? L ? D i , j , k \dfrac{\partial \mathcal{L}}{\partial D_{i,j,k}} ?Di,j,k??L?,同理,對于編碼后的 z e ( x ) z_e(x) ze?(x)而言,同樣有 ? L ? E i , j , k \dfrac{\partial \mathcal{L}}{\partial E_{i,j,k}} ?Ei,j,k??L?,令 ? L ? E i , j , k = ? L ? D i , j , k \dfrac{\partial \mathcal{L}}{\partial E_{i,j,k}} = \dfrac{\partial \mathcal{L}}{\partial D_{i,j,k}} ?Ei,j,k??L?=?Di,j,k??L?。
那么對于編碼器的梯度就可以表示為 ? L ? W E = ? E i , j , k ? W E ? L ? E i , j , k \dfrac{\partial \mathcal{L}}{\partial W_E} = \dfrac{\partial E_{i,j,k}}{\partial W_E} \dfrac{\partial \mathcal{L}}{\partial E_{i,j,k}} ?WE??L?=?WE??Ei,j,k???Ei,j,k??L?。讓我們觀察下其損失函數,如(1-1)所示,其中的 s g ( ? ) sg(\cdot) sg(?)為停止梯度函數,表示該函數無梯度傳導。decoder的參數通過第一項損失項進行更新(這部分損失可通過MSE損失 L ( x , x ^ ) \mathcal{L}(\mathbf{x}, \hat{\mathbf{x}}) L(x,x^)建模),稱之為重建損失。encoder參數通過第一項和第三項損失進行更新,其中第一項是重建損失,第三項是為了encoder編碼產出和視覺詞典特征空間進行對齊而設計的,由于此時通過 s g ( ? ) sg(\cdot) sg(?)函數停止了梯度,因此此時 E \mathcal{E} E的參數不會得到更新。視覺詞典 E \mathcal{E} E的參數通過第二項損失項進行更新,通過將encoder編碼結果進行停止梯度,我們只對 E \mathcal{E} E進行參數更新。
L = log ? ( p ( x ∣ z q ( x ) ) ) + ∣ ∣ s g [ z e ( x ) ] ? E ∣ ∣ 2 2 + β ∣ ∣ z e ( x ) ? s g [ E ] ∣ ∣ 2 2 (1) \mathcal{L} = \log(p(x|z_q(x))) + ||sg[z_e(x)]-\mathcal{E}||^2_2 + \beta ||z_e(x)-sg[\mathcal{E}]||^2_2 \tag{1} L=log(p(x∣zq?(x)))+∣∣sg[ze?(x)]?E∣∣22?+β∣∣ze?(x)?sg[E]∣∣22?(1)
在實際場景中,公式(1)中的第一項的損失函數可以依照需求定制,比如基于跨模態匹配的業務可以增加一些語義匹配的損失,強化視覺詞典中語義匹配的能力。
視覺自監督建模
以上提到的跨模態語義對齊和視覺稠密向量稀疏化的建模,都是為了語義匹配服務的,由于需要提供成對的文本信息,因此屬于弱監督建模。富有語義信息對于相關性建模來說是非常有增益的,但是對于質量建模、用戶行為建模來說可能還不夠,后者需要多模態更關注與視頻本身的“屬性”,比如視頻的剪輯風格,畫風,分鏡,色彩色調等等,筆者將其統稱為視覺風格,這種純視覺元素并不是語義匹配建模過程考慮的。如Fig 2.15所示,我們以知識分享類視頻為例子,就可能會存在實物演示類風格、真人出鏡類、PPT課程分享、動畫風格講解等等不同的風格,如果考慮上視頻幀間的分鏡、剪輯風格差異等,則會有更豐富和復雜的視覺差異,這些都屬于視頻本身的視覺屬性,不應該通過語義匹配的方式去建模。
在質量建模和用戶行為建模中,筆者認為去建模視頻本身的視覺屬性是非常重要的。以用戶行為建模為例,不同類型的用戶可能會喜好不同類型風格的視頻,很難用語義是否匹配,是否和query相關進行衡量。在質量業務的建模中,語義質量的建模一直是一個難問題,誠然如第一章所述用用戶歷史交互行為(點贊、點踩、評論、停留等等)進行隱式的建模,但是對于行為稀疏的新視頻或者長尾視頻就無能為力了,筆者認為,一個語義質量好的視頻,在視頻的視覺風格上肯定有所特點,如果一個多模態算子能夠描述不同視頻之間的視覺差異性,我們就可以在用戶行為豐富的高頻視頻中,通過數以億計用戶的行為去挖掘出高質量視頻的模式,然后通過模型去挖掘得知哪些視覺風格是高質量的。
從以上的例子我們不難發現,相關性建模的場景,和質量建模、用戶行為建模對多模態能力的要求是不同的,前者更需要將視頻的視覺信息和文本語義信息進行關聯,后者則更關注視頻本身的視覺風格,如果前者可以用對比學習進行建模,那么后者應該如何建模呢?
筆者認為,視覺的自監督預訓練方式在這種場景中,就是一種很好的建模方式。從Fig 2.15中其實我們不難發現,挖掘視頻的視覺風格,可以認為是一種視覺聚類,我們通過設計合適的自監督任務,是可以學習出這種聚類模式的。 筆者提供一個想法,用符號 V q = { v 1 , ? , v N } , v i ∈ R H × W × 3 \mathbf{V}^{q} = \{v_1, \cdots, v_N\}, v_i \in \mathbb{R}^{H \times W \times 3} Vq={v1?,?,vN?},vi?∈RH×W×3表示一個具有 N N N幀的視頻 q q q,假設同一個視頻的視覺風格都是接近的,那么從這個視頻中采樣得到兩個 K K K幀的片段 v i q = { v i , ? , v i + K } \mathbf{v}_i^q = \{v_i, \cdots, v_{i+K}\} viq?={vi?,?,vi+K?}和 v j q = { v j , ? , v j + K } \mathbf{v}_j^q = \{v_j, \cdots, v_{j+K}\} vjq?={vj?,?,vj+K?},這兩個片段之間的視覺風格應該是相近的,假設視頻片段的表征函數為 f ( ? ) f(\cdot) f(?),度量函數為 g ( ? ) g(\cdot) g(?),那么有 g ( f ( v i q ) , f ( v j q ) ) → 1 g(f(\mathbf{v}_i^q), f(\mathbf{v}_j^q)) \rightarrow 1 g(f(viq?),f(vjq?))→1。 從另一個視頻 p p p中采樣一個 K K K幀的視頻片段為 v i p = { v z , ? , v z + K } \mathbf{v}_i^p = \{v_z, \cdots, v_{z+K}\} vip?={vz?,?,vz+K?},假設隨機采樣的視頻 p , q p,q p,q應該具有不同的視覺風格,因此有 g ( f ( v i q ) , f ( v z p ) ) → 0 g(f(\mathbf{v}_i^q), f(\mathbf{v}_z^p)) \rightarrow 0 g(f(viq?),f(vzp?))→0。這個思想參考圖示Fig 2.16,可以用triplet loss進行建模,如公式(2-2)所示,其中的 m m m是margin,具體可參考博文 [32]。當然,也可以采用對比學習的思路,采用infoNCE損失進行建模。
L ( v i q , v j q , v z p ) = max ? ( 0 , m + g ( f ( v i q ) , f ( v j q ) ) ? g ( f ( v i q ) , f ( v z p ) ) ) (2-2) \mathcal{L}(\mathbf{v}_{i}^q, \mathbf{v}_{j}^q, \mathbf{v}_z^{p}) = \max(0, m+g(f(\mathbf{v}_i^q), f(\mathbf{v}_j^q))-g(f(\mathbf{v}_i^q), f(\mathbf{v}_z^p))) \tag{2-2} L(viq?,vjq?,vzp?)=max(0,m+g(f(viq?),f(vjq?))?g(f(viq?),f(vzp?)))(2-2)
想必讀者能看出來,“同個視頻的視覺風格接近,不同視頻的視覺風格不同”這個假設是一個很強的假設,在實際中不一定現實,因此這個方法的難點在于如何去挑選合適的正樣本和負樣本。
多模態的業務應用
簡單應用
一旦產出了多模態算子之后,就可以給業務使用了,典型的搜索業務包括排序和召回,建模的子維度又可以分為相關性、質量、用戶行為等等,多模態在這些場景中都有所應用。在粗排和精排階段,多模態最直接的應用形式,就是將query向量和視覺向量匹配的相似度打分(QV打分)直接引入到排序中,作為Fig 1.4中的一維特征。這種做法很直接,但有3個主要缺點:
- 打分分辨率較低:采用對比學習訓練出來的query向量和視覺向量的匹配打分,通常打分范圍都很窄,其提供的分辨率比較低。
- 視覺向量的利用率低:QV打分只考慮了query和視頻視覺的匹配關系,沒有建模視覺與其他視頻特征(如OCR、ASR、標題等)的關系。
- 使用場景受限:只采用QV打分,無法很好地賦能其他業務方向,比如用戶行為估計和質量建模等。
即便如此,QV打分還是能對題文不符和需求不符的case有一定區分能力的,去迭代QV打分對于業務來說也是有所收益的。然而考慮到上線一版視覺向量的成本是很高的,為了迭代QV打分去單獨迭代一版視覺向量的性價比太低了,我們可以參考LiT [19] 的做法,將視覺向量固定后,挖掘最新的在線點展數據,通過CLIP的方式去訓練,從而只更新query模型。 query模型通常是在線計算的,迭代query模型對于上線來說沒有額外的負擔,而且可以參考 FILIP [20] 的方式去建模細粒度的query需求。通過固定視覺向量,只更新query模型的方式,我們可以定期(比如一個季度)去挖掘最新的數據,采用更大的batch size(因為最大資源開銷的視覺側已經固定了)去訓練query模型,這樣query模型能夠學習出最新的需求分布。這個也是一個值得參考的迭代方向。
多模態融合
只用QV打分太過于浪費了,很多復雜的語義關系需要融合視覺和文本信息一起考慮,因此更好的做法是將視覺向量融合入到文本語義模型中,形成多模態語義模型。通常,相關性模型就是一個語義模型,主流是采用基于Transformer的模型進行建模,如BERT、ERNIE等,我們可以將視覺向量融入到相關性模型中。問題來了,視覺向量要以什么形式融入到基于Transformer的相關性模型中呢?參考多模態大模型的融合方法,常用的多模態融合方法可以分為以下幾種:
- Frozen [21]/LLaVa [22]: 采用視覺前綴,直接將訓練好的視覺向量拼接到文本的embedding輸入上,給LLM進行訓練和推理。 視覺前綴可視為所謂的visual prompt,引導模型生成更好的內容。
- BLIP2 [24]: 視覺前綴對視頻不定長度的媒體不友好,而且視覺前綴的方式也過于粗糙。BLIP2通過引入Q-Former的方式,引入了所謂的learnable query,可視為是一種可學習的prompt,其好處就是,第一階段的訓練,可以單獨通過圖文對數據對該prompt進行特定模態的優化訓練,第二階段才將該prompt引入到LLM中。因此該visual prompt比起Frozen來說,會更具有適合LLM的視覺語義信息。 可參考筆者的博文介紹 [24]。BLIP2產生的visual prompt,也是拼接文本輸入到LLM的,耦合度較低。
- Flamingo [3]: 類似于BLIP2,也是引入了可學習的prompt,但是其產生prompt會直接以cross-attention的方式影響到LLM,而BLIP2不會。 Flamingo的visual prompt和LLM的耦合度更高。可參考筆者的博文 [26]。
- MetaLM [26] /Kosmos v1 [27] /Kosmos v2 [28]: 將自回歸的LLM視為是通用語言能力接口,不同模態通過所謂的『非因果語言模型』進行建模,這種方式將編碼器統一成了Transformer,而且特征都是以稀疏化的方式存在的。 這種方式天然對交織數據友好。 可參考博文:[29-31]。
其中第三種和第四種方式,對于搜索場景的多模態語義模型來說可能不太合適,因此筆者比較推薦的是第一種和第二種方式。第一種方式,直白地說就是將視覺向量直接拼接到文本輸入上,筆者接下來討論下一些思考。在Fig 2.4中的視覺跨模態建模中,其實是會產出幀級別的細粒度稠密向量和視頻級別的粗粒度稠密向量,而在實際線上應用的時候,受限于成本,則通常只能落盤視頻級別的稠密向量。為了間接地用上細粒度的稠密向量,如Fig 2.17所示,可以考慮采用Teacher-Student的訓練范式,在Teacher模型部分引入細粒度和粗粒度的稠密多模態向量,而用于上線的Student模型只引入粗粒度的視覺向量。由于student模型上的視覺向量只有一個token,直接拼接到文本輸入上未免顯得太過弱勢,為了提高視覺向量的影響面,也可以考慮引入一個“短接”的旁路,直接連到最后的輸出層。
在某些“不幸”的情況下,線上由于某些原因還沒法直接拿到視覺向量的時候(可能由于沒有建正排庫),又急著推動上線,此時也有些比較“tricky”的方法。可以考慮將Fig 2.17中的Student模型視為是“助教模型”,通過這個模型去大規模蒸餾純文本的student模型,如Fig 2.17的純文本Student模型所示。讀者可能會好奇,對比teacher模型的輸入,student模型存在輸入上的模態缺損,這樣做是否合理且有收益呢?從筆者的實踐來看,這樣做是有收益的,我覺得也是能解釋的通的。首先,我們的視覺向量已經在基礎模型層做過了不錯的跨模態語義對齊了,可以認為視覺向量和文本信息之間存在語義關聯。在大規模蒸餾的過程中,即便student模型沒有視覺向量的輸入,從而可以利用文本信息去“記住”這些視覺信息。這個實踐其實讓筆者去思考一個問題,這種視頻級別的稠密向量,在語義融合的應用過程中,是以什么形式拿到收益的?筆者認為,視覺向量在此處有兩種作用:
- 提供文本所缺失的信息量:這一點容易理解,視覺向量是對視頻視覺內容的語義理解過程,一些視頻文本無法提供的信息,可以通過視覺向量提供。此處提供的信息可以是視覺實體語義信息、視頻場景信息等。
- 對文本信息的確認: 由于視頻文本信息中有一大部分是OCR信息,在Fig 2.1 (b)中其實不難發現,OCR信息是分很多類型的,包括字幕域、背景域、固定域、噪聲域等,有時候遇到復雜的視頻中可能還會出現表格型、圖表型數據等。即便OCR進行了分域,也難以避免OCR中混入噪聲,而這會給后續模型的使用帶來困擾。采用視覺信息,可以對OCR中關鍵信息進行“確認和加強”,相當于是同時采用文本和視覺信息去確認同一件事情、實體、活動或者是場景等視頻內容。
當然,也可以是上面兩種作用的結合。考慮到實際的視頻搜索場景中,大部分case所需要的信息,都是由文本信息提供的,因此筆者覺得第二個作用的建模思路可以著重考慮。第二個建模思路要求視覺向量具有兩種能力:
- 上文一直提到的語義對齊能力。
- 視頻結構化內容理解的能力,比如能提供一定的OCR-free的文字識別能力。
如果繼續沿著這個思路,在業務模型應用的設計上,也應該考慮以某種機制引入視覺向量對文本信息進行加權的能力,比如交叉注意力(cross-attention)可能就是一個可以參考的方法。
在視覺稀疏化建模一章中,我們介紹過對視覺進行稀疏化建模的方法,通過這種方法可以將稠密的視覺向量轉化為稀疏的視覺令牌(token),這些令牌不妨可看成是視覺的“文本化”信息。在業務應用中,我們可以利用這些稀疏的視覺令牌進行更豐富復雜的建模。首先,有了稀疏化視覺向量后,我們可以采用統一的多模態預訓練范式。在搜索常用的文本判別式模型中,我們一般采用MLM(masked language modeling)的方式進行預訓練,如果引入多模態稠密向量,可以考慮采用UNITER [33] 類似的跨模態MLM損失進行建模 [5]。而如果引入的是稀疏化后的視覺向量,則可以將跨模態MLM損失也一并省掉,直接采用MLM損失就可以統一文本-視覺模態的預訓練任務了。
漸漸寫得有點長了,受限于篇幅,后續內容以后再補充了。
Reference
[1]. https://blog.csdn.net/LoseInVain/article/details/126214410, 《【見聞錄系列】我所理解的搜索業務二三事》
[2]. https://blog.csdn.net/LoseInVain/article/details/116377189,《從零開始的搜索系統學習筆記》
[3]. 張俊林. 這就是搜索引擎. 電子工業出版社, 2012.
[4]. https://www.6aiq.com/article/1588904027930, 《搜索中的 Query 理解及應用》
[5]. https://fesianxu.github.io/2023/03/04/story-of-multimodal-models-20230304/, 《視頻與圖片檢索中的多模態語義匹配模型:原理、啟示、應用與展望》
[6]. Ding, Ming, Chang Zhou, Hongxia Yang, and Jie Tang. “Cogltx: Applying bert to long texts.” Advances in Neural Information Processing Systems 33 (2020): 12792-12804. aka Cogltx
[7]. Luo, Z., Zhao, P., Xu, C., Geng, X., Shen, T., Tao, C., … & Jiang, D. (2023). Lexlip: Lexicon-bottlenecked language-image pre-training for large-scale image-text sparse retrieval. In Proceedings of the IEEE/CVF International Conference on Computer Vision (pp. 11206-11217). aka Lexlip
[8]. Radford, A., Kim, J. W., Hallacy, C., Ramesh, A., Goh, G., Agarwal, S., … & Sutskever, I. (2021, July). Learning transferable visual models from natural language supervision. In International Conference on Machine Learning (pp. 8748-8763). PMLR. aka CLIP
[9]. https://blog.csdn.net/LoseInVain/article/details/105545703,《萬字長文漫談視頻理解》
[10]. https://blog.csdn.net/LoseInVain/article/details/134842120,《視頻檢索中的模態均衡方法》
[11]. Wang, Xun, et al. “Modality-Balanced Embedding for Video Retrieval.” Proceedings of the 45th International ACM SIGIR Conference on Research and Development in Information Retrieval. 2022.
[12]. https://blog.csdn.net/LoseInVain/article/details/128160516, 《ERNIE VIL 2.0,多模態模型的一種多視角預訓練范式》
[13]. Shan, Bin, Weichong Yin, Yu Sun, Hao Tian, Hua Wu, and Haifeng Wang. “ERNIE-ViL 2.0: Multi-view Contrastive Learning for Image-Text Pre-training.” arXiv preprint arXiv:2209.15270 (2022). aka ERNIE-vil 2.0
[14]. Van Den Oord, Aaron, and Oriol Vinyals. “Neural discrete representation learning.” Advances in neural information processing systems 30 (2017). aka VQ-VAE
[15]. https://www.bilibili.com/video/BV1WF4m1w7YB/, 《【羽毛球新手干貨】新手學習羽毛球的練習順序?打羽毛球需要學會的24個基本動作》
[16]. https://www.bilibili.com/video/BV1jM4m1k7W3, 《完了,今天的功德又笑沒了!!!#190》
[17]. https://www.bilibili.com/video/BV1zz421C7Wh/, 《1900買一條幾十斤的南方大口鯰,切開金燦燦的,我都震驚了》
[18]. https://blog.csdn.net/LoseInVain/article/details/130524728, 《VQ-VAE的實現方法分析——一種基于梯度回調的方法》
[19]. Zhai, X., Wang, X., Mustafa, B., Steiner, A., Keysers, D., Kolesnikov, A., & Beyer, L. (2022). Lit: Zero-shot transfer with locked-image text tuning. In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (pp. 18123-18133). Short for LiT
[20]. Yao, L., Huang, R., Hou, L., Lu, G., Niu, M., Xu, H., … & Xu, C. (2021). Filip: Fine-grained interactive languageimage pre-training. arXiv preprint arXiv:2111.07783. short for FILIP
[21]. Tsimpoukelli, Maria, Jacob L. Menick, Serkan Cabi, S. M. Eslami, Oriol Vinyals, and Felix Hill. “Multimodal [few-shot learning with frozen](https://www.zhihu.com/search?q=few-shot learning with frozen&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra={“sourceType”%3A"answer”%2C"sourceId"%3A3494788518}) language models."Advances in Neural Information Processing Systems34 (2021): 200-212. aka Frozen
[22]. Liu, Haotian, Chunyuan Li, Qingyang Wu, and Yong Jae Lee. “Visual instruction tuning.” Advances in neural information processing systems 36 (2024). aka llava
[23]. Li, Junnan, Dongxu Li, Silvio Savarese, and Steven Hoi. “Blip-2: Bootstrapping language-image pre-training with frozen image encoders and large language models.” arXiv preprint arXiv:2301.12597 (2023). aka BLIP2
[24]. https://blog.csdn.net/LoseInVain/article/details/136013909, 《BLIP2——采用Q-Former融合視覺語義與LLM能力的方法》
[25]. https://blog.csdn.net/LoseInVain/article/details/136072993, 《Flamingo:一種交織圖文的視覺語言大模型方法》
[26]. Hao, Yaru, Haoyu Song, Li Dong, Shaohan Huang, Zewen Chi, Wenhui Wang, Shuming Ma, and Furu Wei. “Language models are general-purpose interfaces.” arXiv preprint arXiv:2206.06336 (2022). aka MetaLM
[27]. Huang, Shaohan, Li Dong, Wenhui Wang, Yaru Hao, Saksham Singhal, Shuming Ma, Tengchao Lv et al. “Language is not all you need: Aligning perception with language models.” arXiv preprint arXiv:2302.14045 (2023). short for Kosmos 1
[28]. Peng, Zhiliang, et al. “Kosmos-2: Grounding Multimodal Large Language Models to the World.” arXiv preprint arXiv:2306.14824 (2023). aka Kosmos-2.
[29]. https://blog.csdn.net/LoseInVain/article/details/136161262, 《MetaLM:一種融合因果語言模型和非因果語言模型的方法》
[30]. https://blog.csdn.net/LoseInVain/article/details/136428429, 《Kosmos-1: 通用接口架構下的多模態大語言模型》
[31]. https://blog.csdn.net/LoseInVain/article/details/136459707,《Kosmos-2: 在多模態大語言模型中引入基準和指代能力》
[32]. https://blog.csdn.net/LoseInVain/article/details/103995962, 《一文理解Ranking Loss/Contrastive Loss/Margin Loss/Triplet Loss/Hinge Loss》
[33]. Chen, Y. C., Li, L., Yu, L., El Kholy, A., Ahmed, F., Gan, Z., … & Liu, J. (2020, September). Uniter: Universal image-text representation learning. In Computer Vision–ECCV 2020: 16th European Conference, Glasgow, UK, August 23–28, 2020, Proceedings, Part XXX (pp. 104-120). Cham: Springer International Publishing. short for UNITER