图推荐算法在EE问题上的应用
分享嘉賓:莊正中?資深數據挖掘工程師
編輯整理:陳家輝
內容來源:先薦推薦系統學院
出品平臺:DataFunTalk
注:轉載請在后臺留言“轉載”。
?
導讀:本次分享將圍繞以圖為基礎衍生的一類推薦算法原理和應用,以及 E&E 問題 ( 如何應對新用戶和新內容 ) 的一些處理方法。E&E 指探索與利用,是推薦系統當中的兩個核心問題。
主要內容包括:
-
Background
-
Related Work
-
Our Work
01
Background
1.?推薦系統在 E&E 上的兩大難點
在建立推薦系統的模型之前,我們需要獲得用戶和內容的相關數據。可是在推薦系統的實踐中,經常會遇到冷啟動的問題,即缺少新進入的用戶信息和新進入的內容信息。對于用戶信息,很多公司都會有市場部從市場上的各個渠道導入進來,成本較高,且無法完全覆蓋。對于新進入的用戶,他們往往是沒有歷史行為的,而這個行為特征卻是推薦系統中最重要的特征之一。而新用戶的留存對于公司是至關重要的,所以對于新用戶的推薦要求盡可能的精準,使其對于平臺產生忠誠度。新用戶的推薦是推薦系統的第一個難題。第二個難點則是新內容的推薦,新內容首先是沒有用戶的反饋,沒有用戶的反饋也就無法利用相應的評估體系總結內容的真實價值。同時,新內容還存在難曝光的問題。現存的推薦系統,從比較傳統的推薦系統,到 Word2Vec,再到現在各種各樣的神經網絡,在召回階段都無法很好的召回新內容,?所以很難進入到訓練樣本中去,這是新內容的長尾問題。
2.?經典圖模型—協同過濾
我們可以把協同過濾認為是一種圖推薦模型, 因為用戶和內容可以認為是二分圖結構。推薦系統的宗旨是建立更多的用戶到內容的鏈接,隨著圖越來越大,就可以抽取到更多的信息, 從而服務更多的用戶。以 item-based CF 為例,通過計算 item 之間的相似度,從而計算出最相似的 topK 內容,把它們當作當前 item 的鄰接點,構成物與物相連的有向圖保存在起來。推薦時快速定位用戶接觸過的 seeds 列表:在"一推多"場景直接查找節點的鄰邊。?在 "n 推 n" 場景根據多節點對各鄰邊加權求和。在多樣性推薦中將 seeds 分組并執行多個"一推多"操作。
CF 的缺點也很明顯,首先,由于算法的設計問題,導致了它是一種偏熱門推薦。在數據過濾的初期,沒有達到某種閾值的 user 和 item 將會被過濾掉,形成馬太效應。第二,容易形成內部環路。比如某些很受歡迎的主播,他們互為 topK,導致一直在他們內部互推。
這時,我們可以通過知識圖譜和 node2vec 來拓展圖的泛化能力。
3.?Graph Embedding
我們都知道在 NLP 任務中,word2vec 是一種常用的 word embedding 方法,來源于神經網絡模型,是神經網絡的一種中間結構的簡化。結構如上圖所示:
word2vec 通過語料庫中的句子序列來描述詞與詞的共現關系,進而學習到詞語的向量表示。它是將序列向量化的一個淺層神經網絡,通常只需要有效行為的序列就可以快速得到一個以 id 為單特征 item2vec 召回模型。
Graph Embedding 的思想類似 word2vec,使用圖中節點與節點的共現關系來學習節點的向量表示。在 graph 中隨機游走生成頂點序列,構成訓練集,然后采用 skip-gram 算法,訓練出低維稠密向量來表示頂點。這種思想與傳統的協同過濾相比有兩個比較明顯的特點:
-
序列保留了時序信息
-
內容覆蓋率提升,相關性略降低
在 graph 中主要存在兩種關系,homophily 和 structural equivalence。所謂 homophily,即是在 graph 中緊密相連的鄰域。具有這種關系的頂點之間,學習出來的向量應該接近或者相似。structural equivalence,就是指在圖中具有相似作用的頂點,他們之間未必相鄰,甚至可能相隔較遠,都是所在鄰域的中心頂點。滿足這種關系的頂點之間,特征向量也應該接近或者相似。通常在現實世界的 graph 中,會同時存在這兩種關系。可以表示如下結構:
但是在不同的任務中需要關注的重點不同,可能有些任務需要關注網絡 homophily,而有些任務比較關注網絡的 structural equivalence,可能還有些任務兩者兼而有之。那么關鍵的問題就是如何來描述節點與節點的共現關系。RandomWalk 是一種可重復訪問已訪問節點的深度優先遍歷算法。給定當前訪問起始節點,從其鄰居中隨機采樣節點作為下一個訪問節點,重復此過程,直到訪問序列長度滿足預設條件。
DeepWalk 從一個節點開始采樣,跳到下一個節點的概率完全取決于鄰邊的權重, 無法靈活地捕捉這兩種關系,在這兩種關系中有所側重。而實際上,對于這兩種關系的偏好,可以通過不同的序列采樣方式來實現。有兩種極端的方式,一種是 Breadth-First Sampling ( BFS ),廣度優先搜索,如圖中紅色箭頭所示,從 u 出發做隨機游走,但是每次都只采樣頂點 u 的直接鄰域,這樣生成的序列通過無監督訓練之后,特征向量表現出來的是 structural equivalence 特性。另外一種是 Depth-First Sampling ( DFS ),深度優先搜索,如圖中藍色箭頭所示,從 u 出發越走越遠,學習得到的特征向量反應的是圖中的 homophily 關系。Node2vec 則額外定義了參數 p、q,用于控制回退、BFS、DFS 動作。
02
Related?Work
1.?Alibaba graph-embedding
首先我們介紹一篇阿里巴巴的圖嵌入技術論文 "Billion-scale Commodity Embedding for E-commerce Recommendation in Alibaba ( kdd 2018 )", 其流程如下圖所示:
首先如圖 (a),假設每個用戶有不同的用戶行為,每個用戶瀏覽過不同的 item 按時間順序排列。這里有一個業務上的技巧,就是把用戶在某個時間窗內的連續行為作為一個 session,例如一個小時,如果超過時間窗,就劃分為不同的 session。通常在短周期內訪問的商品更具有相似性。每個 session 構成一個 sampled sequence,將所有 sampled sequence 構成有向圖,圖邊表示該方向流過的次數,得到的 graph。
如圖 (b),邊權重記錄了商品的出現次數。計算商品的轉移概率,并根據轉移概率做游走,生成商品序列,圖 (c)。最后通過 skip-gram 訓練出 embedding。
新商品沒有用戶行為,因此無法根據 Base Graph Embedding ( BGE ) 訓練得出向量。為了解決物品的冷啟動問題,阿里加上了物品的邊信息 Side Information ( SI ),例如品牌,類別,商店等信息。SI 相似的商品,在向量空間中也應該接近。如下圖所示:
在最下面的 Sparse Features 中,?SI0?表示商品本身的 one-hot 特征,?SI1?到 SIn?表示 n 個邊信息的 one-hot 特征,阿里采用了13種邊信息特征。每個特征都索引到對應的 embedding 向量,得到第二層的 Dense Embeddings,然后將這 (n+1) 個向量做平均來表示這個商品,公式如下圖。?其中,Wvs?表示商品 v 的第 s 個邊信息向量,?Hv?是隱向量。
剩下的事情就和 BGE 相同了。這個做法叫 Graph Embedding with Side Information ( GES )。不同的邊信息對于商品的向量可能會有不同的貢獻,可以另外學習一個權重矩陣 A∈R|V|×(n+1),其中 |V| 表示商品集合 V 的數量,Aij?表示第 i 個商品的第 j 個邊信息權重。計算方法如下所示,從平均變成了加權求和。對權重取 e 的指數是為了保證所有邊信息的權重大于0。
這個方法叫做 Enhanced Graph Embedding with Side Information ( EGES )。
2.?Airbnb Word2Vec
Airbnb 提出的冷啟動和采樣方式同樣值得我們借鑒。首先,它同樣是采用 session 進行分割的,而且明確指出 30mins 內的連續有序 sequences。同時提出了一個新的負采樣策略,即從與當前 item 的同一個 cluster 里面采樣負樣本。而且 Airbnb 強化了付費行為的訓練。點擊序列中若有付費行為,則將這個 item 強制納入該序列每個 item 的上下文窗口。
Airbnb 的冷啟動策略很簡單, 他并沒有做 end2end 的學習屬性的 embedding,而是直接把 new item 按主要屬性 ( 房間數,地域,地段等等 ) 檢索到最相似的 top3 個已知的 item,取3個 item 向量的平均值初始化 new item embedding。
更多詳情,請參考:
Real-time Personalization using Embeddings for Search Ranking at?Airbnb ( kdd 2018 )
03
Our Work
1.?Mixed Graph-Vector model
在實踐中,我們發現 CF 算法用于實時召回表現出的點擊率較高,但召回存在上限,word2vec 算法表現出的泛化能力較好,可以讓更多的內容得到召回,但也就帶了泛化提升后的不確定性。兩個召回策略是存在很多數據重疊,思考能否從精簡算法的角度將兩者合并起來,并各取所長。
具體來說,生成策略可以表示為下圖:
先利用之前 CF 算法的計算得到的內容相似度矩陣,取最相似的 topK 重建一個 item 間相似性關聯圖,采用 node2vec 算法,對上圖進行隨機游走生成序列,再使用 word2vec 完成 graph embedding。所以我們最終可以得到兩個產物,一個 item similarity graph,即原來的協同過濾圖。第二個則是由 graph embedding 產生的 item embedding。
在推薦時,先通過用戶觸摸過的 item seed 定位到圖節點,如果 item 不在模型則終止。然后獲取到圖節點距離1的鄰接點,如果已推薦則擴展到距離2的鄰接點,此時會進行一個過濾操作,已推薦的不會再推。如果推薦數據不足則使用圖節點向量進行 vector search,運用向量最簡單的方法就是內積或者余弦相似度,尋找出 N 個與其最相似的 item 進行補充。所以最終的推薦結果,結合了 CF 與 Graph embedding 兩者的優勢。
2.?Side Info Graph
上述的混合模型在性能上的提升僅來自其模型層面做的 graph embedding,即圖中的節點為所有內容的邊界,帶來的覆蓋提升也不會突破這個邊界。因此對于冷啟動內容的處理,我們將標簽作為一種冷啟動參數參與到模型訓練,使得新內容可以被高級模型接受。
這里與阿里巴巴的 EGES 構建圖的策略不同,我們沿用了協同過濾生成的 item 相似矩陣構建 graph。在 embedding 和權重的訓練過程與 EGES 過程一樣。訓練完之后,我們可以獲得特征的 embedding 和權重矩陣。這個方法主要是針對新內容的冷啟動問題。
3.?Two?tower DSSM
對于 user 和 item 的匹配,我們采用的是雙塔結構進行匹配,具體結構如下:
雙塔結構很簡單,左側為 user 的行為特征和基本特征的 embedding,拼接后經過全連接層和激活層的特征融合和提取,形成 user vector。同理右側的 item network,可以通過之前 GES 計算的 item 的 embedding,進行特征融合。最后將 user vector 和 item vector 進行內積和 sigmoid 函數輸出匹配分數。
在工程上,由于用戶行為的實時性,user vector 需要進行實時計算。但 item 側的相關 embedding 可以通過查表得到,節省資源和計算時間。
4. Graph?Restrict Vector Search
我們采用圖來約束推薦的搜索范圍。我們的新用戶面臨兩種類型:
-
第一種是他可能有標簽但是沒有行為,或者行為很少。
-
第二種是完全沒有行為,需要我們去探索。
我們主要利用圖結構 item 之間的約束關系,比如說我們剛剛生成的用戶向量,它的搜索結果僅限于用戶剛剛點擊或者瀏覽的 item 相鄰的節點,而這些節點是我們通過大量的用戶反饋所生成的邊的關系。所以用圖約束進行搜索,一方面可以加快計算速度,還可以進一步探索下一個曝光 item 的性質。
04
問答環節
問:構建 session 過程中怎么過濾異常的數據?
答:這里我提出幾個比較典型的異常情況:
-
異常點擊 ( 時間太短的點擊 )
-
異常 item ( 更新異常頻繁的 item )
-
異常用戶 ( 點擊量異常多的 user )
問:Two tower 中的 user scene vector 和 item scene vector 的區別?
答:這兩個是 user 和 item 的 feature field,可以根據需要進行整理。比如 user scene 包括 location、time、event、weather 等, item scene 包括 location、upload、division 等。
問:圖不是全連通的,有多個子圖,這種怎么樣做 embedding 比較好?
答:如果圖是隔斷的,那直接當作兩個圖來做兩次 embedding,因為很難有額外信息通過邊把兩個圖聯系起來。?
總結
以上是生活随笔為你收集整理的图推荐算法在EE问题上的应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ES亿级数据检索优化,三秒返回突破性能瓶
- 下一篇: 掌握 Kafka