圖機器學(xué)習(xí)在螞蟻集團推薦業(yè)務(wù)中的應(yīng)用
本文將介紹圖機器學(xué)習(xí)在螞蟻推薦系統(tǒng)中的應(yīng)用。在螞蟻的實際業(yè)務(wù)中,有大量的額外信息,比如知識圖譜、其他業(yè)務(wù)的用戶行為等,這些信息通常對推薦業(yè)務(wù)很有幫助,我們利用圖算法連接這些信息和推薦系統(tǒng),來增強用戶興趣的表達。全文主要圍繞以下幾方面內(nèi)容展開:
- 背景
- 基于圖譜的推薦
- 基于社交和文本的推薦
- 基于跨域的推薦
01 背景
支付寶除了最主要的支付功能外還有大量的推薦場景,包括腰封推薦、基金推薦和消費券推薦等等。支付寶域內(nèi)的推薦相比于其他推薦最大的區(qū)別是用戶的行為稀疏,活躍度較低,很多用戶打開支付寶只是為了支付,不會關(guān)注其他東西。所以推薦網(wǎng)絡(luò)中UI邊的記錄是非常少的,我們的關(guān)注點也是低活目標(biāo)的推薦。比如為了提升DAU,可能只會給低活用戶在腰封投放內(nèi)容,正常用戶是看不到的;基金推薦板塊我們更關(guān)注的是那些沒有理財或理財持倉金額較低的用戶,引導(dǎo)他們買一些基金進行交易;消費券的推薦也是為了促進低活用戶的線下消費。
低活用戶歷史行為序列信息很少,一些直接根據(jù)UI歷史行為序列來推薦的方法可能不太適用于我們的場景。因此我們引入了下面三個場景信息來增強支付寶域內(nèi)的UI關(guān)系信息:
- 社交網(wǎng)絡(luò)的UU關(guān)系
- II圖譜關(guān)系
- 其他場景的UI關(guān)系
通過社交網(wǎng)絡(luò)的UU關(guān)系可以獲取低活用戶好友的點擊偏好,根據(jù)同質(zhì)性就可以推斷出該用戶的點擊偏好,物品與物品之間的圖譜關(guān)系可以發(fā)現(xiàn)、擴展用戶對相似物品的喜好信息,最后跨域場景下的用戶行為對當(dāng)前場景的推薦任務(wù)也有很大幫助。
02基于圖譜的推薦
很多推薦場景中用戶的行為是稀疏的,尤其是在對新用戶進行刻畫時,可利用的行為信息很少,所以通常要引入很多輔助信息,比如attribute、contexts、images等等,我們這里引入的是knowledge graph—知識圖譜。
1. 現(xiàn)存挑戰(zhàn)
知識圖譜是一個大而全的歷史專家知識,有助于我們的算法推薦,但是還存在兩個問題:
一是圖譜本身可能并不是為了這個業(yè)務(wù)而設(shè)計的,所以里面包含很多無用信息,訓(xùn)練過程也非常耗時。一個常用的解決辦法是只保留圖譜中能關(guān)聯(lián)上我們商品的邊,把其他邊都刪掉,但這又可能會造成一些信息損失,因為其他邊也是有用的。
二是圖譜用做輔助信息時,沒辦法將用戶的偏好聚合到圖譜內(nèi)部的邊上。如上圖所示,用戶1喜歡電影1和電影2的原因可能是因為它們有同一個主演,而用戶2喜歡電影2和電影3的原因是它們的類型相同。如果只用普通的圖模型的UI、II關(guān)系來建模,只能得到用戶和電影的相關(guān)性,而沒辦法將用戶的這些潛在意圖聚合到圖譜中。
所以我們后面主要解決圖譜蒸餾和圖譜精煉這兩個問題。
2. 現(xiàn)有方法
① 基于Embedding的模型
基于Embedding的方法先通過圖譜表征學(xué)習(xí)的方法把圖譜中的節(jié)點轉(zhuǎn)化為一個Embedding,然后將Embedding直接接入到UI模型中。這類方法提前學(xué)習(xí)了圖譜中的相關(guān)性,并把其轉(zhuǎn)為一個Embedding,所以很難再衡量用戶與知識邊的相似性,沒有解決圖譜蒸餾和圖譜精煉的問題。
② 基于Path的模型
基于Path的方法根據(jù)圖譜中的知識邊把圖譜分解為多條meta-path,但是構(gòu)建meta-path 的過程需要很多專家知識,同時也沒有體現(xiàn)出用戶對知識邊的偏好。
③ 基于GCN的模型
基于GCN 的方法通過UI和II關(guān)系建模,一般通過attention的方法根據(jù)不同類型的邊取不同的權(quán)重,但邊的權(quán)重只和邊兩端的節(jié)點表征相關(guān),與目標(biāo)節(jié)點的表征無關(guān)。
3. 解決方案
我們提出的模型主要分為4個部分,首先通過圖譜表征學(xué)習(xí)得到圖譜表征,利用知識依賴傳播來學(xué)習(xí)、聚合得到不同邊的重要性,然后通過一個蒸餾模塊對圖譜中的邊采樣、去噪,再加入條件注意力做圖譜精煉,最后做一個雙塔模型得到結(jié)果。
下面介紹每一部分的具體細(xì)節(jié):
① 圖譜表征學(xué)習(xí)層
我們這里使用的是傳統(tǒng)的TransH圖譜表征模型,因為我們的圖譜中有很多many-to-one和one-to-many的邊。通過TransH把每一個節(jié)點都映射到邊對應(yīng)的空間中,在這個空間上衡量兩個邊的相似性。
② 圖譜表征學(xué)習(xí)層
學(xué)習(xí)完圖譜邊的表征后,在鄰居內(nèi)聚合圖譜邊的表征,再通過求不同的邊空間的cos距離作為點的加權(quán)聚合圖譜點的表征。因為圖譜中的邊的噪聲很大,所以我們會做一個額外的采樣,根據(jù)我們學(xué)到的權(quán)重在目標(biāo)子圖上進行采樣,目標(biāo)子圖就是用戶和商品的二階子圖合在一起,經(jīng)過采樣得到更小的子圖。
③ 圖譜表征學(xué)習(xí)層
得到子圖之后,我們做一個條件注意力,在給定用戶和商品的情況下衡量邊的重要性。邊的重要性可以分為兩部分,一部分是這個邊本身很重要,另一部分是用戶很關(guān)注這個邊。邊本身的重要性已經(jīng)在上一步中的知識依賴注意力中學(xué)習(xí)了,不用再做額外訓(xùn)練,用戶對邊的重要性是通過將所有目標(biāo)集合的表征和邊兩端點的表征拼接做一個注意力得到條件注意力,再根據(jù)條件注意力做點的聚合。
④ 雙塔模型
最后做一個雙塔模型衡量pairwise loss,用類Adam方法同時優(yōu)化圖譜表征學(xué)習(xí)loss和推薦系統(tǒng)的目標(biāo)loss,我們的算法復(fù)雜度與點和邊的數(shù)量呈線性關(guān)系。
4. 實驗結(jié)果
① 實驗數(shù)據(jù)集和基準(zhǔn)模型選擇
我們選取了一些推薦系統(tǒng)加知識圖譜的數(shù)據(jù)集和我們業(yè)務(wù)的基金推薦數(shù)據(jù)集,baseline主要有基于正則的CKE方法,基于矩陣分解的NMF方法,基于Path的異構(gòu)圖的方法RippleNet和基于GCN的KGAT。
②注意力可視化
左邊的Knowledge attention中,每條邊上的數(shù)值只和兩端節(jié)點相關(guān),在右上角的U532和i1678上的值很小,后面就不容易采樣到這條邊。右邊的兩個圖用戶都是U0,但商品不一樣,整個圖的權(quán)重就完全不同。在預(yù)測U0-i2466以及U0-i780的相關(guān)性時,兩個圖最右一條路的權(quán)重就完全不同,并且U0-i2466的最右一條路徑的權(quán)重更大一些,因為在預(yù)測U0-i2466的相關(guān)性時最右邊的一條路要更重要一些。
③模型評價
我們在Top-K推薦和CTR點擊任務(wù)上衡量了模型效果,相比于baseline模型都有很大提升,在線上做基金推薦A/B testing實驗也帶來效果的提升。最后我們做了消融實驗,結(jié)果顯示去掉條件注意力或知識注意力模型效果都會下降,證明了我們所做改進的有效性。
03基于社交和文本的推薦
我們這里的基于社交和文本的推薦不是一個傳統(tǒng)意義上的推薦場景,主要是為了幫助運營理解用戶意圖,給用戶創(chuàng)造一些新內(nèi)容、新廣告來引導(dǎo)用戶增長。比如腰封推薦的封面如何設(shè)計,運營只有在充分理解用戶意圖后才能設(shè)計出符合用戶心理預(yù)期的內(nèi)容。
1. 現(xiàn)存挑戰(zhàn)
一個自然的方法就是使用Topic Model來衡量用戶到意圖,意圖到商品的分布,把用戶當(dāng)做一個文檔,商品當(dāng)做一個單詞分解出用戶意圖。但實際上用戶的點擊是稀疏的,尤其是我們的目標(biāo)客戶是低活用戶時,并且商品的點擊服從長尾分布,也很難獲取用戶的興趣和意圖。
2. 解決方案
首先我們將UU關(guān)系和UI關(guān)系都加入到GNN中來學(xué)習(xí),衡量用戶的點擊行為,然后我們對學(xué)習(xí)到的用戶—意圖先驗分布做一個近似,傳統(tǒng)的Topic Model的先驗分布是一個狄利克雷分布,我們這里用的是一個Logistic Normal的分布,它和狄利克雷分布長得很像,可以通過一些重參數(shù)化的工作使得這個分布的學(xué)習(xí)是可導(dǎo)的。
學(xué)習(xí)完用戶與用戶之間的關(guān)系后,下一步學(xué)習(xí)語料間的關(guān)系。上圖中有一個小程序,里面有一段文本描述,利用skip-gram模型計算item與正、負(fù)樣本的相似度,得到單詞的相似度,并通過一個DNN將單詞的相似度映射為用戶意圖表征,最后通過KL散度約束分布調(diào)整為我們想要的形式。
3. 實驗結(jié)果
我們的數(shù)據(jù)集是用戶的連續(xù)7天的點擊數(shù)據(jù),其中包括大約50萬用戶,9206件商品和2億用戶歷史點擊行為,社交網(wǎng)絡(luò)中包括700萬條邊,每個用戶平均有14-15個鄰居節(jié)點。
我們分別做了離線和在線實驗測試,離線實驗衡量了不同數(shù)量Topic下的用戶間的相似性和語義間的相似性。在線實驗通過我們的模型預(yù)測出的用戶意圖反饋給運營,運營根據(jù)用戶意圖設(shè)計描述文本和展示頁面做線上推薦。整體模型的實驗鏈路可能比較長,因為運營中間會產(chǎn)出一些素材,線上A/B實驗的目標(biāo)分為兩部分,一部分是運營根據(jù)我們的模型反饋設(shè)計素材,一部分是利用歷史專家經(jīng)驗做產(chǎn)出。實驗結(jié)果顯示我們的模型在離線、在線實驗中都相較于之前有了很大提升。
04基于跨域的推薦
我們的推薦目標(biāo)是低活用戶,他們可能沒有標(biāo)簽,沒有特征,甚至從來沒有使用過支付寶。上圖中我們首先分析了用戶之間的相似性,其中與藍(lán)色代表陌生人的行為相似性,紅色代表與朋友的行為相似性,結(jié)果顯示關(guān)系更接近的朋友行為重疊度更高,所以我們可以使用用戶的好友行為信息作為用戶信息的一個補充。然后我們分析了活躍用戶和不活躍用戶的好友數(shù)量,發(fā)現(xiàn)活躍用戶的好友數(shù)量是遠(yuǎn)多于不活躍用戶的,所以我們想能不能把活躍用戶的點擊信息遷移到其不活躍的好友信息上來輔助推薦。
所以我們模型的一個核心思想就是對齊活躍用戶和不活躍用戶的特征空間,因為不活躍用戶在很多特征上都是缺失的,所以他和活躍用戶的特征空間本質(zhì)上是不一樣的。這里我們使用GNN學(xué)習(xí)用戶的表征,將用戶的表征映射到一個共同空間。如上圖所示,CD-GNN的結(jié)構(gòu)上層是我們想預(yù)測的一個活躍用戶,下層是我們想預(yù)測的一個不活躍用戶,他們經(jīng)過兩個GNN的學(xué)習(xí)再通過一個領(lǐng)域不變層映射到一個共享的表征上,最后對活躍用戶和非活躍用戶都做一個label的預(yù)測。
具體來說,圖模型包括Social網(wǎng)絡(luò)和User-Page網(wǎng)絡(luò),對兩個網(wǎng)絡(luò)做不同的聚合,通過Domain Invariant Layer將活躍用戶和非活躍用戶映射到同一空間,最終的loss=Source loss+Target loss-Domain invariant loss。線上的A/B實驗效果顯示我們的模型相較于GCN在CTR上提升很大,在行為稀疏的情況下我們的模型仍然能取得一個好的效果。
上面是我們團隊近期發(fā)表的一些成果,我講的主要是上面3篇的工作。
05互動問答
Q1:CD-GNN層的參數(shù)是不是共享的?
A1:不是共享的,因為活躍用戶的一些特征,比如ID特征是遠(yuǎn)多于不活躍用戶的,兩者的特征分布并不一致,所以這里我們沒有做共享 。
Q2:跨域推薦的問題中不活躍用戶的Target Label數(shù)量很少,導(dǎo)致模型對不活躍用戶的Target Embedding學(xué)習(xí)很差,這類問題應(yīng)該怎么考慮?
A2:可以用一些pre-trained方法來提前增加一些表征信息,或者把缺失的特征通過一些方法補充上??梢赃呑鰣D模型邊做特征的補充,把鄰居的特征也補充過來,而不是只簡單把鄰居特征聚合,其中再添加類似于特征重構(gòu)的loss可能會幫助解決這個問題。
Q3:第一個基于圖譜的方法是在精排場景落地的?里面的GNN一般做到幾階?
A3:我們的基金推薦板塊給用戶曝光的只有5個基金,不像其他場景下推薦出一個列表,底下可能有幾百條信息,用戶可以一眼看到這5個基金,重排的影響不是很大。我們模型的結(jié)果直接接到線上,是一個精排模型。一般就做到兩階GNN,三階在一些任務(wù)上的提升不是很大,并且線上的時延太長了。