基于hadoop的商品推荐系统_【论文笔记】基于矩阵分解的推荐系统
本文是對經典論文的閱讀筆記,大部分為論文的中文翻譯內容(筆者英語水平也就六級飄過的水準,不喜勿噴)
論文標題:Matrix factorization techniques for recommender systems
隨著Netflix競賽的結果所示,矩陣分解模型在商品推薦上的表現要優于傳統的近鄰技術,矩陣分解允許合并附加信息,如隱式反饋、時間效應和置信度。
現代消費者被太多的選擇所困擾。電子零售商和內容提供商提供了大量的產品選擇,提供了前所未有的機會來滿足各種特殊需求和品味。為消費者提供最合適的產品是提高用戶滿意度和忠誠度的關鍵。因此,越來越多的零售商開始對推薦系統感興趣。推薦系統通過分析用戶對產品的興趣模式,提供符合用戶口味的個性化推薦。因為好的個性化推薦系統可以增加用戶體驗的另一個維度,像亞馬遜和Netflix這樣的電子商務行業的領導者已經將推薦系統作為網站的重要組成部分。
這種系統對娛樂產品,如電影、音樂和電視節目特別有用。許多客戶將觀看同一部電影,而每個客戶可能會觀看許多不同的電影。事實證明,客戶愿意表明他們對特定電影的滿意程度,因此網站可以獲得關于哪些電影吸引哪些客戶的大量數據。公司可以通過分析這些數據向特定的客戶推薦電影。
推薦系統策略
一般來說,推薦系統基于兩種策略中的一種。內容過濾方法為每個用戶或產品創建一個配置文件來描述其性質。例如,一個電影配置文件可以包括關于它的類型、參與的演員、票房受歡迎程度等等的屬性。用戶配置文件可能包括人口統計信息或在適當的問卷上提供的答案。配置文件允許程序將用戶與匹配的產品關聯起來。當然,基于內容的策略需要收集可能不可用或者不易收集的外部信息。
一個著名的成功實現內容過濾的是Music Genome Project,它在http://Pandora.com中被用于互聯網廣播服務。一個訓練好的音樂分析器根據數百種不同的音樂特征為音樂基因組計劃中的每首歌曲打分。這些屬性或基因,不僅捕獲了一首歌的音樂同一性,而且還捕獲了許多重要的品質,這些品質與理解聽眾的音樂喜好有關。
內容過濾的另一種方法是只依賴于過去的用戶行為——例如,以前的交易記錄或對產品的評分——而不需要創建明確的配置文件。這種方法稱為協同過濾,這是Tapestry(第一個推薦系統)的開發人員創造的術語。協同過濾分析了用戶之間的關系和產品之間的相互依賴關系,以識別新的用戶-項目關聯。
協同過濾的一個主要吸引力是它是使用鄰域自由的,但它可以解決數據方面的問題,這些問題通常難以捉摸,很難用內容過濾來描述。雖然協同過濾通常比基于內容的技術更準確,但由于它無法解決系統的新產品和新用戶,因此存在所謂的“冷啟動”問題。在這方面,內容過濾是更好的。
協同過濾的兩個主要領域是鄰域模型和隱因子模型。鄰域模型關注于計算項目之間或用戶之間的關系。面向商品的方法基于同一用戶對“相鄰”商品的評分,評估用戶對商品的偏好。一個產品的鄰居指的是其他產品,這些產品在被同一用戶評價時往往得到相似的評價。例如,考慮電影Saving Private Ryan。它的鄰居可能包含戰爭電影,Spielberg的電影,和Tom Hanks的電影。為了預測特定用戶對Saving Private Ryan的評分,我們將尋找該用戶實際評價的影片的最近鄰居。正如圖1所示,以用戶為導向的方法識別出志同道合的用戶,他們可以互相補充評分。
圖1隱因子模型是一種替代方法,它通過根據評分模式推斷出的20到100個因子來表征商品和用戶,從而試圖解釋評分。從某種意義上說,這些因子包含了上述人為創造的歌曲基因的計算替代物。對于電影來說,發現的因子可能會衡量明顯的維度,例如喜劇與戲劇,動作量或對兒童的導向;不太明確的維度例如角色發展的深度或古怪程度;或者完全無法解釋的維度。對于用戶來說,每個因子都衡量了用戶對相應電影因子中得分高的電影的喜愛程度。
圖2展示了一個二維簡化示例的這種思想。考慮兩個假設的維度,即女性主導與男性主導,嚴肅的人與逃避現實者。該圖顯示了這兩個維度上可能有幾部著名電影和一些虛構用戶。對于此模型,相對于電影的平均評分,用戶對電影的預測評分將等于該電影和用戶在圖表上的位置的點積。例如,我們認為Gus喜歡Dumb and Dumber,討厭The Color Purple,把Braveheart設為平均水平。值得注意的是一些電影例如Ocean's 11和用戶例如Dave在這兩方面都是中立的。
圖2矩陣分解模型
一些最成功的隱因子模型的實現是基于矩陣分解的。矩陣因子分解的基本形式是通過從項目評分推斷出的因子向量來表征項目和用戶。對項目因子和用戶因子的高相關性促成了推薦。這些方法結合了良好的可擴展性和預測精度,近年來變得流行起來。此外,它們為建模各種現實情況提供了很大的靈活性。
推薦系統依賴于不同類型的輸入數據,這些數據通常放在一個矩陣中,一個維度表示用戶,另一個維度表示感興趣的項目。最方便的數據是高質量的顯式反饋,包括用戶對項目感興趣的顯式輸入。例如,Netflix收集了電影的星級評分數據,而TiVo用戶通過按下大拇指向上和向下按鈕來顯示他們對電視節目的喜好。我們將明確的用戶反饋稱為評分。通常,明確的反饋包含一個稀疏矩陣,因為任何一個用戶可能只對可能的項目的一小部分進行了評價。
矩陣因子分解的一個優點是它允許合并額外的信息。在沒有顯式反饋的情況下,推薦系統可以通過隱式反饋推斷用戶的偏好,通過觀察用戶的購買歷史、瀏覽歷史、搜索模式甚至鼠標移動等行為,間接反映用戶的意見。隱式反饋通常表示事件的存在或不存在,因此通常用密集填充的矩陣表示。
基本的矩陣分解模型
矩陣分解模型將用戶和物品映射到一個維數為f的聯合隱因子空間,用戶與物品的交互被建模為該空間的內積。因此,每個項目i與一個向量
對應,每個用戶u與一個向量 對應。對于一個給定的項目i, 的的元素是衡量項目擁有這些因子的程度,積極的或消極的。對于一個給定的用戶u, 的元素可以衡量用戶對項目的興趣程度,這些項目的相關因素偏高,無論是正面的還是負面的。點乘 的結果 獲得了每個用戶u和項目i的交互---用戶對項目特征的總體興趣。這近似于用戶u對項目i的評分,用 表示,從而得到估計評分如下: (1)主要的挑戰是計算每個項目和用戶映射的因子向量
。推薦系統完成這個映射后,可以很容易地根據公式1估計用戶對任何物品的評價。這種模型與奇異值分解(SVD)密切相關,奇異值分解是一種用于在信息檢索中識別潛在語義因子的成熟技術。在協同過濾域中應用SVD需要考慮用戶項目評分矩陣。由于用戶項目評分矩陣的稀疏性導致矩陣中的缺失值占了很大一部分,這常常會帶來困難。當有關矩陣的知識不完全時,傳統的奇異值分解是無定義的。此外,如果只對相對較少的已知項目進行處理,就很容易出現過擬合。
較早的系統依靠估算來填補缺失的評分并使評分矩陣密集。但是,由于這樣進行估算會大大增加數據量,因此代價可能非常昂貴。此外,不準確的估計可能使數據失真很大。因此,最近的工作建議僅直接對觀察的評分建模,同時通過正則化模型來避免過度擬合。為了學習因子向量(
和 ),系統將已知評分的正則化平方誤差最小化:(2)這里,K是已知評分
的用戶u與項目i的集合(u,i)。系統通過擬合先前觀察到的評分來學習模型。然而,我們的目標是用一種預測未來未知評分的方式來概括之前的評分。因此,系統通過對學習參數進行正則化來避免對觀測數據的過擬合,學習參數要受到懲罰。常數
控制了正則化的程度,通常由交叉驗證來確定。Ruslan Salakhutdinov 和 Andriy Mnih的“Probabilistic Matrix Factorization”為正則化提供了一個概率基礎。學習算法
兩個方法可以來最小化(2)式,分別是隨即梯度下降和交替最小二乘法(ALS)。
隨機梯度下降
Simon Funk推廣了對(2)式的隨機梯度下降,其中,算法循環遍歷訓練集中的所有評分。對于每個給定的訓練案例,系統都會預測
并計算相關的預測誤差。然后,它在梯度的相反方向上按與r成比例的量級修改參數,從而得出:
這種流行的方法易于實現并且獲得了相對快速的運行時間。然而,在某些情況下,使用ALS優化是更好的。
交替最小二乘法
因為
和 是未知的,2式是非凸的。然而,如果我們固定一個未知項,則優化問題將變成二次問題,并且可以得到最優解。因此,ALS技術在固定 和固定 之間轉化。當所有的 固定時,系統通過解決最小二乘問題重新計算 ,反之亦然。這保證了2式每一步都在減少,直到收斂。一般來說,隨機梯度下降比ALS更簡單、更快,但ALS至少在兩種情況下是有利的。首先是系統可以使用并行化的時間。在ALS中,系統獨立于其他項目因子計算每個
,獨立于其他用戶因素計算每個 。這可能會導致算法的大量并行化。第二種情況是針對以隱式數據為中心的系統。因為不能將訓練集視為稀疏的,所以像梯度下降那樣遍歷每個單個訓練案例將是不切實際的。ALS可以有效解決這種情況。添加偏置
矩陣分解協同過濾方法的一個優點是它在處理各種數據的靈活性和其他具體應用的要求。這就要求在保持相同學習框架來計算式1。式1試圖獲取用戶和產生不同評分值的項目之間的交互。然而,許多觀察到的評分值的變化是由于與用戶或項目相關的影響,即偏差或截距(intercepts),與任何交互無關。例如,典型的協同過濾數據表現出較大的系統趨勢,即某些用戶給予的評價要高于其他用戶,而某些項目所獲得的評價要高于其他項目。畢竟,有些項目被普遍認為比其他項目更好(或更差)。
因此,通過
來解釋全部評分值是不明智的。取而代之的是,系統嘗試識別這些值中各個用戶或項目偏見可以解釋的部分,僅對數據的真實交互部分進行因子建模。一個一階的將偏置包含的評分預測模型 如下式所示: (3)包含偏置項的評分
由 進行表示并且由用戶影響和項目影響所導致。總體平均評分由μ表示,參數 和 分別表示用戶u和項目i與平均值的觀察偏差。例如,假設你要對用戶Joe對電影《泰坦尼克號》的評分進行一次估算。現在,假設所有電影的平均評分μ為3.7分。此外,泰坦尼克號比平均的電影要好,所以它的評分傾向于比平均評分高0.5分。另一方面,Joe是個挑剔的用戶,打分傾向于比平均分低0.3分。因此,Joe對《泰坦尼克號》電影的評分預估為3.9分,(3.7+0.5-0.3)。式1的偏差擴展式如下: (4)在這里,觀察到的評分被分解為四個部分:總體平均評分,項目偏置分,用戶偏置分,和用戶-項目交互項。這使得每個部分只能解釋與之相關的信號部分。系統通過最小化平方誤差函數來學習:
(5)由于偏差往往會捕獲很多觀察到的信號,因此準確的建模至關重要。因此,其他的論文有提供了更詳盡的偏差模型。
額外的輸入源
通常一個系統必須處理冷啟動問題,其中許多用戶提供很少的評分,使它很難就他們的口味得出一般結論。緩解這個問題的一種方法是合并關于用戶的其他信息源。推薦系統可以使用隱式反饋來深入了解用戶的偏好。實際上,無論用戶是否愿意提供明確的評分,他們都可以收集行為信息。零售商可以利用客戶的購買記錄或瀏覽歷史來了解他們的傾向,以及這些客戶可能提供的評級。
為簡單起見,考慮使用布爾類型隱式反饋的情況。N(u)代表用戶u表示隱式偏好的項目集。這樣,系統就通過用戶隱式首選的項目對用戶進行了描述。在這里,需要一組新的項目因子,其中項目i與
相關聯。因此,在N(u)中表示項目偏好的用戶由下式向量進行特征化:對求和正規化通常是有效的,例如
另一個信息源是已知的用戶屬性,例如,人口統計信息。再次,為簡單起見,考慮布爾屬性,其中用戶u對應于屬性A(u)的集合,該集合可以描述性別,年齡組,郵政編碼,收入水平等。一個獨立的因子向量
對應于每個屬性,通過一組用戶關聯的屬性來描述用戶:矩陣分解模型應集成所有信號源,并增強用戶表示能力:
盡管前面的示例處理的是增強用戶表示能力(在這種情況下,缺少數據更為常見),但在必要時可以對項目進行類似的處理。
時間動態
到目前為止,所提出的模型都是靜態的。實際上,隨著新選擇的出現,產品的感知度和受歡迎度會不斷變化。同樣,客戶的偏好也會發生變化,從而導致他們重新定義自己的口味。因此,系統應考慮到反映用戶項交互的動態,時間漂移性質的時間效應。
矩陣分解方法可以很好地模擬時間效應,具有很好的實時性來改善準確性。將評級分解為不同的項可以使系統分別處理不同的時間方面。具體而言,以下的項會隨時間變化:項目偏置
;用戶偏置 以及用戶偏好設置 。第一個時間效應解決了一個事實,即商品的受歡迎程度可能會隨著時間而改變。例如,電影可能會受到外部事件(例如演員在新電影中的露面)的觸發而變得流行或者變得不流行。因此,這些模型處理項目偏置
可以當作是時間的函數。第二種時間效應使用戶可以隨時間更改其基線評級。例如,傾向于將平均電影評級為“ 4星”的用戶現在可以將此類電影評級為“ 3星”。這可能反映了幾個因素,包括用戶評分尺度的自然漂移,用戶分配評分相對于其他近期評分的事實,以及評分者在家庭中的身份可能隨時間而改變的事實。因此,在這些模型中,參數 是時間的函數。時間動態超越了這一點。它們還會影響用戶的偏好,從而影響用戶與項目之間的交互。用戶會隨著時間改變其偏好。例如,喜歡心理刺激類型電影的粉絲可能會在一年后成為犯罪劇的粉絲。同樣,人類會改變他們對某些演員和導演的看法。該模型采用用戶因素(向量
)來解釋這種影響作為時間的函數。另一方面,它指定靜態項目特征 ,因為與人類不同,項目本質上是靜態的。加入時間因素后評分預測規則如下所示:
(7)具有不同置信水平的輸入
在一些設置中,并不是所有觀察到的評分都具有相同的權重或可信度。例如,大量的廣告可能會影響對某些商品的投票,而這些商品并不能恰當地反映長期特征。類似地,系統可能會遇到試圖傾斜某些物品的評分的敵對用戶。
另一個例子是建立在隱式反饋基礎上的系統。在這種解釋正在進行的用戶行為的系統中,用戶的確切偏好分數很難量化。因此,該系統使用粗略的二進制表示形式工作,指出“可能喜歡該產品”或“可能對該產品不感興趣”。在這種情況下,將置信度得分與估計的偏好附加在一起很有價值。置信可以來自于可用的描述動作頻率的數值,例如,用戶觀看某個節目的時間,或者用戶購買某個商品的頻率。這些數值表示每次觀察的置信度。各種與用戶無關的因素偏好可能導致一次性事件;然而,重復發生的事件更有可能反映用戶的意見。
矩陣分解模型可以很容易地接受不同的置信水平,這讓它給予較少有意義的觀察較少的權重。若對觀察的評分
的置信度記為 ,則模型對成本函數(方程5)進行增強,以說明置信度如下:總結
以上是生活随笔為你收集整理的基于hadoop的商品推荐系统_【论文笔记】基于矩阵分解的推荐系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言字符指针清零,C语言中字符串的内存
- 下一篇: win10子系统ubuntu图形界面_w