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