超越用户embedding矩阵:用哈希对大型用户建模
“?本文介紹了一種新的用戶偏好表示方法PreHash ,同時考慮到了大規模數據和冷啟動用戶。該方法可以在很多推薦算法中替代其用戶embedding矩陣。若干SOTA算法上的實驗結果顯示該算法不僅取得了更好的效果,還減少了模型的參數。”
作者:胖魚,北京交大研究生在讀,方向為機器學習,推薦系統。
「0?摘要:」
論文標題:Beyond User Embedding Matrix: Learning to Hash for Modeling Large-Scale Users in Recommendation(后臺回復【prehash】可下載論文)
處理?「大規模數據」?和?「冷啟動用戶」是推薦系統的兩大挑戰。在真實場景(千萬級別用戶)下,很難利用用戶的embedding矩陣儲存個性化的用戶偏好。許多研究者關注具有豐富歷史信息的用戶,然而,在真實的系統里,大多數用戶都只有少量交互信息。在本文的工作中,作者提出了一種新的「用戶偏好表示方法PreHash」?,同時考慮到了大規模數據和冷啟動用戶。在該方法中,根據用戶的?「歷史交互信息」?生成了一系列?「籃子」。具有相似偏好的用戶自動被分在用一個籃子。之后將會學習每一個籃子的表示。在設計籃子時,只有有限的參數被儲存,這樣大大節省了內存。更重要的是,當用戶進行新的交互行為后,他的籃子和表示會相應的更新,這樣可以更有效得理解和建模用戶。該算法還十分靈活,「可以在很多推薦算法中替代其用戶embedding矩陣」。因此,我們在很多SOTA算法上進行了實驗。實驗結果展示該算法不僅取得了更好的效果,還減少了模型的參數。
「1 Introduction:」
個性化的用戶偏好向量在推薦系統里非常重要。先前的工作為每個用戶生成其偏好特征向量,并把他們當作特征矩陣儲存。矩陣分解方法通常使用一個特定向量表示用戶。一些深度模型也使用embedding層將用戶映射為偏好向量。
然而,這些方法?「很難應用于實際的大規模數據」?上。原因之一是,儲存這樣一個用戶?「embedding矩陣」很困難(內存和計算時間)。同時,其無法考慮到冷啟動用戶。最后,這些算法無法做到?「增量學習」?,即在更新用戶特征向量時只能重新訓練模型。
構建用戶偏好特征向量的簡單方法就是將與之交互過的物品向量求和。然而對于冷啟動用戶,這樣的方法不適用。
本文提出的PreHash方法是一種靈活的用戶偏好表示模塊,可以?「替代很多推薦方法中的用戶embedding矩陣」?。PreHash有兩個部分,「歷史部分和hash部分」?。歷史部分使用一個注意力網絡提取?「歷史偏好向量」?。在hash部分,有?「許多籃子」,每一個籃子包含偏好相似的用戶。Hash部分最重要的功能是?「對于每一個用戶」?,他都會找到一些與其?「行為類似的頻繁用戶」?。
「3 用戶偏好哈希:」
「3.1核心思想」
學習用戶偏好向量通過兩種方式:用戶近期交互過的物品,與當前用戶有相似偏好的其他用戶。因此使用一個history part從用戶的交互歷史中學到用戶的歷史偏好。為了找到與當前用戶偏好類似的用戶,這里設計了一個hash part建模用戶的hash偏好向量。最后用注意力網絡將兩個part混合。
biasedMF,相對于普通的矩陣分解加上了biases項。PreHash將其用戶表示部分u替換。
「3.2歷史部分」
這一部分從用戶?「以往的交互信息中捕獲了偏好」???紤]到每當對于一個新的物品,有一些物品能顯著表達用戶偏好,而一些物品則不行。所以這里采取了「注意力網絡對物品向量加權」?。v是目標物品的向量。權重可以看做?「當前物品和歷史物品的關聯程度」?。根號l是對交互次數做標準化。
關于注意力網絡的解釋:是否購買iphone,與用戶以前購買的book信息無關。
「3.3哈希部分」
僅僅利用?「歷史向量不足以捕獲用戶偏好」?,因為很多?「新用戶沒有足夠的交互信息」?。這里使用了一個哈希模塊,?「根據與目標用戶的相似性」(根據歷史物品交互),找到?「一些頻繁用戶來表示目標用戶」?。哈希部分的功能就是用有限的空間儲存和計算偏好。
在哈希部分,偏好類似的用戶使用共同的桶來儲存偏好。「當有新的交互后,這一部分可以動態更新?!?/strong>
「3.3.1 哈希桶」
用來儲存類似用戶的偏好。「首先將每個桶a與一個頻繁用戶u綁定」?。將其稱作“錨用戶”。他們最終的哈希向量直接來源于a:
在這里的哈希函數可以看做?「輸入用戶歷史向量,輸出其哈希向量」?。
這里的?「頻繁用戶可以被預先定義」?。本文采取簡單的策略,直接?「選取交互行為最多的用戶」?。
對于其余用戶,PreHash使用層級哈希找到最關聯的籃子。然后將籃子向量加權求和得到當前用戶的哈希向量。
「3.3.2層級哈?!?/strong>
一個全連接樹,歷史向量u作為輸入,每一個節點有一個決策向量n,從父節點繼承權重。第i層第j個節點。假定其有c個子節點,其權重分配:
目的也是為了獲得用戶和桶的關聯權重。
為什么采用哈希?提高計算效率。
「3.3.3Top-k加權求和」
為了得到用戶哈希偏好,這里不對所有的籃子加權求和,只考慮?「關聯最大的k個籃子」
「3.4模型輸出」
為了生成最終的用戶偏好向量,PreHash使用一個注意力網絡。將?「兩個向量變成最終的用戶表示」?。類似加權求和的效果。
「4 實驗設置」
「數據集:」?亞馬遜電子商務數據集的四個子集,以及RecSys Challenge 2017數據集。
「Baseline:」?矩陣分解的經典方法,以及深度的經典方法Wide&Deep等
「訓練:」?將任務視為top-n推薦。使用?「pair-wise訓練策略」?(BPR那篇文章)訓練所有的模型。對每一個正交互樣本,隨機采樣其負樣本。
是相應的預測結果。損失函數鼓勵對正樣本的預測高于負樣本。
「5 實驗結果分析」
實驗部分寫的很清楚,首先提出了四個需要回答的問題,之后逐一驗證。
「5.1有效性」
首先,兩種常見的矩陣分解方法取得了最差的效果,這是由于數據的稀疏性。FISM遠遠好于其他方法。他沒有用戶偏好矩陣,而是直接根據物品相似性進行推薦。結果說明了「矩陣分解方法在大型稀疏數據集上效果很差」,必須采取新的方法來考慮用戶偏好。FISM是基于物品相似度的方法,也表明了基于用戶交互項進行用戶表示的方法比使用user embedding矩陣的方法好。這也驗證了最近發現的ItemKNN要比很多SOTA網絡方法好。
為什么加上PreHash之后標準的矩陣分解方法效果變好了很多?原因在于在進行目?「標物品推薦」?的時候,獲取了?「每名用戶的歷史信息」。對于每名目標用戶,hash部分幫助找到一些相關的籃子來儲存類似用戶的偏好。這些?「歷史信息對為每位用戶的推薦有幫助」,特別是冷啟動用戶。除此以外的優點:省內存。
「5.2高效性」
根據結果列表,可以看出PreHash的方法相比原始方法大大?「節省了參數」?。
「5.3靈活性」
驗證是否可以在深度模型中使用:
深度模型好的原因是其?「利用到了review信息」?。三個深度模型的參數相同原因是相比于用戶物品embedding矩陣而言,其網絡參數數量可忽略。
「5.4在冷啟動用戶上」
測試集上的用戶被劃分為了三個不同類別。以往少于三次交互的成為冷啟動用戶
實驗結果表明,效果在三個部分都有提升。PreHash好的原因是在hash部分?「顯式得利用到了同組頻繁用戶」?(warm user)的偏好。
「6.1剝離實驗」
「去除hash part,只包含history part的效果已經比較好」?。因為在矩陣過于稀疏時,矩陣分解中的潛向量很難捕捉到用戶歷史和偏好。但是「history part可以捕捉到」?。
與一些聚類算法相對比(用聚類id用戶)。展示了PreHash在建模相似用戶偏好的有效性。
「6.2參數敏感度」
籃子的個數增加時,性能是先減小在增加,這說明可能當籃子數量小時反而會引起組內混亂。
「6.3案例分析」
為了觀察PreHash在籃子中學到了什么。檢索了每個籃子里出現次數最多物品??梢杂^察到,在層級hash后,兩個籃子相關但是彼此不同。兩個籃子分別是游戲軟件和硬件。證明PreHash中算法的有效性。
「對我們的啟發:」
用戶建模部分一定要關注?「冷啟動用戶」?,可以將其與頻繁用戶關聯。
在融合兩方面的特征時,可以使用一些技巧代替直接concat。
總結
以上是生活随笔為你收集整理的超越用户embedding矩阵:用哈希对大型用户建模的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从DSSM语义匹配到Google的双塔深
- 下一篇: 机器学习模型在携程海外酒店推荐场景中的应