對(duì)比學(xué)習(xí)算法在轉(zhuǎn)轉(zhuǎn)的實(shí)踐
1.什么是對(duì)比學(xué)習(xí)
1.1 對(duì)比學(xué)習(xí)的定義
對(duì)比學(xué)習(xí)(Contrastive Learning, CL)是近年來(lái) AI 領(lǐng)域的熱門(mén)研究方向,吸引了眾多研究學(xué)者的關(guān)注,其所屬的自監(jiān)督學(xué)習(xí)方式,更是在 ICLR 2020 被 Bengio 和 LeCun 等大佬點(diǎn)名稱為 AI 的未來(lái),后陸續(xù)登陸 NIPS, ACL, KDD, CIKM 等各大頂會(huì),Google, Facebook, DeepMind,阿里、騰訊、字節(jié)等大廠也紛紛對(duì)其投入精力,CL 的相關(guān)工作也是刷爆了 CV,乃至 NLP 部分問(wèn)題的 SOTA,在 AI 圈的風(fēng)頭可謂一時(shí)無(wú)兩。
CL 的技術(shù)源泉來(lái)自度量學(xué)習(xí),大概的思想是:定義好樣本的正例和負(fù)例,以及映射關(guān)系(將實(shí)體映射到新的空間),優(yōu)化目標(biāo)是讓正例在空間中與目標(biāo)樣本的距離近一些,而負(fù)例要相對(duì)遠(yuǎn)一些。正因?yàn)槿绱耍珻L 看上去跟向量化召回思路很像,但其實(shí)二者有本質(zhì)的區(qū)別,向量化召回屬于監(jiān)督學(xué)習(xí)的一種,會(huì)有明確的標(biāo)簽數(shù)據(jù),而且更注重的負(fù)樣本的選擇(素有負(fù)樣本為王的“學(xué)說(shuō)”);而 CL 是自監(jiān)督學(xué)習(xí)(屬于無(wú)監(jiān)督學(xué)習(xí)的一種范式)的一支,不需要人工標(biāo)注的標(biāo)簽信息,直接利用數(shù)據(jù)本身作為監(jiān)督信息,學(xué)習(xí)樣本數(shù)據(jù)的特征表達(dá),進(jìn)而引用于下游任務(wù)。此外,CL 的核心技術(shù)是數(shù)據(jù)增強(qiáng)(Data Augmentation),更加注重的是如何構(gòu)造正樣本。下圖是一個(gè)抽象的 CL 整體流程圖
對(duì)比學(xué)習(xí)的標(biāo)簽信息來(lái)源于數(shù)據(jù)本身,核心模塊是數(shù)據(jù)增強(qiáng)。圖像領(lǐng)域的數(shù)據(jù)增強(qiáng)技術(shù)是比較直觀的,比如圖像的旋轉(zhuǎn)、遮擋、取部分、著色、模糊等操作,都可以得到一張與原圖整體相似但局部相異的新圖(即增強(qiáng)出來(lái)的新圖),下圖是部分圖像數(shù)據(jù)增強(qiáng)的手段(出自SimCLR[1])。
1.2 對(duì)比學(xué)習(xí)的原理
談到CL的原理,不得不提自監(jiān)督學(xué)習(xí),它避開(kāi)了人工標(biāo)注的高成本,以及標(biāo)簽低覆蓋的稀疏性,更容易學(xué)到通用的特征表示。自監(jiān)督學(xué)習(xí)可以分成兩大類:生成式方法和對(duì)比式方法。生成式方法的典型代表是自編碼器,而對(duì)比式學(xué)習(xí)的經(jīng)典代表即ICLR 2020的SimCLR,通過(guò)(增強(qiáng)后的)正負(fù)樣本在特征空間的對(duì)比學(xué)習(xí)特征表示。相比較生成式方法,對(duì)比式方法的優(yōu)勢(shì)在于無(wú)需對(duì)樣本進(jìn)行像素級(jí)的重構(gòu),只需要在特征空間能夠?qū)W到可區(qū)分性即可,這使得相關(guān)的優(yōu)化變得簡(jiǎn)單。筆者認(rèn)為,CL的有效性主要體現(xiàn)在學(xué)習(xí)item表示的可區(qū)分性,而可區(qū)分性的學(xué)習(xí)依賴正負(fù)樣本的構(gòu)造思路,以及具體的模型結(jié)構(gòu)和優(yōu)化目標(biāo)。
結(jié)合CL的實(shí)現(xiàn)過(guò)程,Dr Zhang[2]抽象了三個(gè)CL必須要回答的問(wèn)題,也是其區(qū)別于度量學(xué)習(xí)的典型特征,即(1)如何構(gòu)造正例和負(fù)例,也就是數(shù)據(jù)增強(qiáng)具體是如何實(shí)現(xiàn)的;(2)Encoder映射函數(shù)如何構(gòu)造,不僅要盡可能多地保留原始信息,而且要防止坍塌問(wèn)題;(3)損失函數(shù)如何設(shè)計(jì),目前通常使用的NCE loss,如下公式所示。不難看出,這三個(gè)基本問(wèn)題對(duì)應(yīng)建模的三要素:樣本,模型,優(yōu)化算法。
從 loss 公式中可以看出,分子部分強(qiáng)調(diào)的是與正例的距離越近越好,S函數(shù)衡量的是相似性,距離越近對(duì)應(yīng)的S值越大,分母強(qiáng)調(diào)的是與負(fù)例的距離越遠(yuǎn)越好,loss 越低,對(duì)應(yīng)的可區(qū)分性越高。
在這三個(gè)基本問(wèn)題中,數(shù)據(jù)增強(qiáng)是 CL 算法的核心創(chuàng)新點(diǎn),不同的增強(qiáng)手段是算法有效性的基本保障,也是各大 CL 算法的identity;Encoder函數(shù)通常借助神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn);除 NCE loss外,還有其他 loss 的變體,比如Google[3]就提出了監(jiān)督對(duì)比損失。
1.3 經(jīng)典對(duì)比學(xué)習(xí)算法系列
CL是自監(jiān)督學(xué)習(xí)的一種學(xué)習(xí)算法,提到自監(jiān)督學(xué)習(xí),Bert 恐怕是 NLP 領(lǐng)域無(wú)法回避的話題,Bert 預(yù)訓(xùn)練 + Fine-tuning 的模式在諸多問(wèn)題的解決方案中實(shí)現(xiàn)了突破,既然自監(jiān)督可以在 NLP 取得成功,難道計(jì)算機(jī)視覺(jué)就不可以嗎?實(shí)際上 Bert 在 NLP 領(lǐng)域取得的成功,也直接地刺激了 CL 在圖像領(lǐng)域的發(fā)生和發(fā)展。鑒于數(shù)據(jù)增強(qiáng)可以在圖像領(lǐng)域直觀地展開(kāi),CL 也是率先在 CV 領(lǐng)域取得進(jìn)展,比如 CL 的發(fā)展契機(jī)—— SimCLR 算法,其創(chuàng)新點(diǎn)主要包括(1)探索了多種不同的數(shù)據(jù)增強(qiáng)技術(shù)的組合,選擇了最優(yōu);(2)在 Encoder 之后增加了非線性映射 Projector,主要是考慮 Encoder 學(xué)習(xí)的向量表示會(huì)把增強(qiáng)的信息包含在內(nèi),而 Projector 則旨在去除這部分影響,回歸數(shù)據(jù)的本質(zhì)。后來(lái)Hinton的學(xué)生在 SimCLR 的基礎(chǔ)上實(shí)現(xiàn)了 SimCLR v2,主要改進(jìn)點(diǎn)在于 Encoder 的網(wǎng)絡(luò)結(jié)構(gòu),同時(shí)借鑒了 MoCo 使用的 Memory Bank 的思想,進(jìn)一步提升了 SOTA。
實(shí)際上,在 SimCLR 之前,Kaiming He 在2019年底提出了對(duì)比學(xué)習(xí)的另一個(gè)經(jīng)典算法MoCo[4],其主要思想是既然對(duì)比是在正負(fù)樣本之間進(jìn)行的,那么增加負(fù)樣本數(shù)量,可以提高學(xué)習(xí)任務(wù)的難度,從而增強(qiáng)模型性能,Memory Bank 是解決該問(wèn)題的經(jīng)典思路,但卻無(wú)法避免表示不一致的問(wèn)題,鑒于此,MoCo 算法提出了使用動(dòng)量的方式更新 Encoder 參數(shù),從而解決新舊候選樣本編碼不一致的問(wèn)題。后來(lái),Kaiming He 又在 MoCo 的基礎(chǔ)上提出了 MoCo v2(在 SimCLR 提出之后),模型主要框架沒(méi)有改動(dòng),主要在數(shù)據(jù)增強(qiáng)的方法、Encoder 結(jié)構(gòu)以及學(xué)習(xí)率等細(xì)節(jié)問(wèn)題上做了優(yōu)化。
2 對(duì)比學(xué)習(xí)的應(yīng)用
對(duì)比學(xué)習(xí)不僅是學(xué)術(shù)界在圖像、文本、多模態(tài)等多個(gè)領(lǐng)域的熱門(mén)研究方向,同時(shí)也在以推薦系統(tǒng)為代表的工業(yè)界得到了應(yīng)用。
Google 將 CL 應(yīng)用于推薦系統(tǒng)Google SSL[5],目的在于針對(duì)冷門(mén)、小眾的 item 也能學(xué)習(xí)到高質(zhì)量的向量表示,從而輔助解決推薦冷啟動(dòng)問(wèn)題。其數(shù)據(jù)增強(qiáng)技術(shù)主要采用 Random Feature Masking(RFM),Correlated Feature Masking(CFM)的方法(CFM 一定程度上解決了 RFM 可能構(gòu)造出無(wú)效變體的問(wèn)題),進(jìn)而 CL 以輔助塔的形式,結(jié)合雙塔召回的主任務(wù)共同訓(xùn)練,整體流程如下圖所示
在模型的訓(xùn)練過(guò)程中,主任務(wù)的 item 主要還是來(lái)自曝光日志,因此也是對(duì)頭部熱門(mén) item 比較友好,為了消除馬太效應(yīng)的影響,在輔助任務(wù)中的樣本構(gòu)造需要考慮與主任務(wù)不同的分布,后續(xù) CL 在轉(zhuǎn)轉(zhuǎn)的實(shí)踐過(guò)程中也是借鑒了這樣的思考,從而確保模型學(xué)習(xí)結(jié)果的充分覆蓋。
數(shù)據(jù)增強(qiáng)不局限在 item 側(cè),Alibaba-Seq2seq[6]將 CL 的思想應(yīng)用在序列推薦問(wèn)題上,即輸入用戶行為序列,預(yù)測(cè)下一個(gè)可能交互的 item。具體地,其數(shù)據(jù)增強(qiáng)主要應(yīng)用在用戶行為序列特征,將用戶歷史行為序列按照時(shí)序劃分成兩個(gè)子序列,作為數(shù)據(jù)增強(qiáng)后的用戶的表示,喂入雙塔模型,最終輸出結(jié)果越相似越好。與此同時(shí),該文為了顯式建模用戶的多興趣,在 Encoder 部分提取出多個(gè)向量,而不是壓縮成一個(gè)用戶向量。因?yàn)殡S著子序列的拆分,以及正負(fù)例的構(gòu)造,用戶天然具有多個(gè)行為序列的向量表示,在正例中,用戶前一部分歷史行為的向量,與后一部分歷史行為的向量,距離相近,而在負(fù)例中,不同用戶的距離相對(duì)較遠(yuǎn),而且即使同一用戶,在不同類別商品的向量表示也相對(duì)較遠(yuǎn)。
CL 還可以與其他學(xué)習(xí)范式結(jié)合應(yīng)用,圖對(duì)比學(xué)習(xí)[7],整體框架如下圖所示
GCL 通常通過(guò)隨機(jī)刪除圖中的點(diǎn)或者邊,實(shí)現(xiàn)圖數(shù)據(jù)的增強(qiáng),而本文的作者傾向于保持重要的結(jié)構(gòu)和屬性不變,擾動(dòng)發(fā)生在不重要的邊或者節(jié)點(diǎn)。
3 對(duì)比學(xué)習(xí)在轉(zhuǎn)轉(zhuǎn)的實(shí)踐
圖像領(lǐng)域取得了成功,文本領(lǐng)域也是可以的,比如美團(tuán)-ConSERT[8]算法,在句子語(yǔ)義匹配任務(wù)的實(shí)驗(yàn)中,相比之前的 SOTA(BERT-flow)提升了8%,并且在少量樣本下仍能表現(xiàn)出較好的性能提升。該算法將數(shù)據(jù)增強(qiáng)作用在 Embedding 層,采用隱式生成增強(qiáng)樣本的方法,具體地,提出了四種數(shù)據(jù)增強(qiáng)方法:對(duì)抗攻擊(Adversarial Attack),打亂詞序(Token Shuffling),裁剪(Cutoff)和 Dropout,這四種方法均通過(guò)調(diào)整 Embedding 矩陣得到,比顯式增強(qiáng)方法更高效。
3.1 CL在推薦召回的實(shí)踐
轉(zhuǎn)轉(zhuǎn)平臺(tái)致力于促進(jìn)低碳循環(huán)經(jīng)濟(jì)的更好發(fā)展,能夠覆蓋全品類商品,近年來(lái)尤其在手機(jī)3C領(lǐng)域的發(fā)展表現(xiàn)突出。CL 在轉(zhuǎn)轉(zhuǎn)推薦系統(tǒng)中的實(shí)踐也是選擇了基于文本的應(yīng)用思路,考慮到二手交易特有的屬性,需要解決的問(wèn)題包括(1)二手商品的孤品屬性,導(dǎo)致 ID 類的向量并不適用;(2)數(shù)據(jù)增強(qiáng)是怎么實(shí)現(xiàn)的;(3)正例和負(fù)例如何構(gòu)造;(4)Encoder 的模型結(jié)構(gòu)是怎樣的(包括 loss 的設(shè)計(jì)問(wèn)題)。針對(duì)這四個(gè)問(wèn)題,結(jié)合下面的整體流程圖進(jìn)行詳細(xì)說(shuō)明
針對(duì)二手商品的孤品屬性問(wèn)題,我們采用基于文本的向量作為商品的表征,具體地,使用商品的文本描述(包括標(biāo)題與內(nèi)容)集合,訓(xùn)練 word2vec 模型,并基于詞向量通過(guò) pooling 得到商品的向量表示。
自編碼器(Auto Encoder)算法是文本對(duì)比學(xué)習(xí)領(lǐng)域常用的數(shù)據(jù)增強(qiáng)手段之一(除此之外,還有機(jī)器翻譯、CBERT等不同思路),我們也是采用 AE 算法訓(xùn)練模型,學(xué)習(xí)商品向量,并利用算法的中間向量作為商品的增強(qiáng)向量表示,也就有了正例。
負(fù)例的生產(chǎn)原則是 Batch 內(nèi)隨機(jī)選取不相似的商品,相似商品的判斷依據(jù)是根據(jù)用戶的后驗(yàn)點(diǎn)擊行為計(jì)算而來(lái)。在以 CF(協(xié)同過(guò)濾)為代表的推薦系統(tǒng)召回結(jié)果中,能夠通過(guò)共同點(diǎn)擊行為召回的商品組合,認(rèn)為是相似的,否則認(rèn)為是不相似的。之所以采用行為依據(jù)判斷是否相似,一方面是為了將用戶的行為引入其中,實(shí)現(xiàn)文本與行為的有機(jī)結(jié)合,另一方面也是為了盡可能地貼合業(yè)務(wù)目標(biāo)。
具體到 Encoder 部分,我們采用的是類似孿生網(wǎng)絡(luò)的雙塔結(jié)構(gòu),分別喂入樣本(正正 or 正負(fù))的文本向量,訓(xùn)練分類模型,網(wǎng)絡(luò)結(jié)構(gòu)為三層全連接的神經(jīng)網(wǎng)絡(luò),雙塔共享該網(wǎng)絡(luò)參數(shù),并通過(guò)優(yōu)化交叉熵?fù)p失優(yōu)化模型參數(shù)。實(shí)際工業(yè)界,大部分推薦系統(tǒng)中雙塔模型的訓(xùn)練目標(biāo)均為用戶后驗(yàn)行為(點(diǎn)擊、收藏、下單等),而我們的訓(xùn)練目標(biāo)是樣本相似與否,之所以采用孿生網(wǎng)絡(luò)的形式,也是出于這樣做可以保證學(xué)習(xí)結(jié)果的覆蓋。
根據(jù) CL 的常規(guī)思路,提取最終 Encoder 部分的輸入向量作為商品的向量化表示,可以進(jìn)一步在推薦系統(tǒng)的召回、粗排甚至精排等環(huán)節(jié)應(yīng)用。目前已經(jīng)在轉(zhuǎn)轉(zhuǎn)推薦系統(tǒng)的召回模塊落地,給線上帶來(lái)了超過(guò)10%的下單提袋率的提升。
3.2 CL在轉(zhuǎn)轉(zhuǎn)的未來(lái)規(guī)劃
通過(guò)人工評(píng)估以及線上AB實(shí)驗(yàn),充分確認(rèn)了CL習(xí)得向量表示的有效性,在召回模塊落地后,可以在推薦系統(tǒng)其他模塊,甚至其他算法場(chǎng)景推而廣之。以預(yù)訓(xùn)練的方式學(xué)習(xí)商品向量表示(當(dāng)然,也可以學(xué)習(xí)用戶的向量表示),只是一條應(yīng)用路徑,CL 更多的是提供了一種學(xué)習(xí)框架或者學(xué)習(xí)思路,通過(guò)數(shù)據(jù)增強(qiáng)和對(duì)比的形式,使算法學(xué)習(xí)物品的可區(qū)分性,這樣的思路可以自然地引入推薦系統(tǒng)的排序模塊,因?yàn)榕判騿?wèn)題也可以理解成物品的可區(qū)分性問(wèn)題。
關(guān)于作者
李光明,資深算法工程師。參與轉(zhuǎn)轉(zhuǎn)搜索算法、推薦算法、用戶畫(huà)像等系統(tǒng)的算法體系建設(shè),在GNN、小樣本學(xué)習(xí)、對(duì)比學(xué)習(xí)等相關(guān)領(lǐng)域有實(shí)踐應(yīng)用。微信號(hào):gmlldgm,歡迎建設(shè)性交流。
轉(zhuǎn)轉(zhuǎn)研發(fā)中心及業(yè)界小伙伴們的技術(shù)學(xué)習(xí)交流平臺(tái),定期分享一線的實(shí)戰(zhàn)經(jīng)驗(yàn)及業(yè)界前沿的技術(shù)話題。關(guān)注公眾號(hào)「轉(zhuǎn)轉(zhuǎn)技術(shù)」(綜合性)、「大轉(zhuǎn)轉(zhuǎn)FE」(專注于FE)、「轉(zhuǎn)轉(zhuǎn)QA」(專注于QA),更多干貨實(shí)踐,歡迎交流分享~
參考資料
[1]SimCLR: A_Simple_Framework_for_Contrastive_Learning_of_Visual_Representations
[2]張俊林: https://mp.weixin.qq.com/s/2Js8-YwUEa1Hr_ZYx3bF_A
[3]Google: Supervised_Contrastive_Learning
[4]MoCo: Momentum_Contrast_for_Unsupervised_Visual_Representation_Learning
[5]SSL: Self-supervised_Learning_for_Large-scale_Item_Recommendations
[6]Ali-Seq2seq: Disentangled_Self-Supervision_in_Sequential_Recommenders
[7]GCL: Graph_contrastive_learning_with_adaptive_augmentation
[8]ConSERT: ConSERT:_A_Contrastive_Framework_for_Self-Supervised_Sentence_Representation_Transfer?