《推薦系統 - 技術、評估及高效演算法》 - 第5章 協同過濾演算法的高級課題

推薦系統的性能依賴於輸入的不同類型:

  • 最高效的輸入是用戶高質量的顯示反饋(直接說出對哪些物品感興趣,如netflix的「感興趣」和「不感興趣」);

  • 隱式反饋:觀察用戶的行為來間接得到用戶的喜好,如觀影歷史、購買記錄、瀏覽歷史、搜索歷史,甚至是滑鼠移動。如果一個有看了多部同一導演的作品,說明用戶很喜歡這個導演;

兩個有本質區別的實體:用戶 & 物品,兩種主要方法來比較這兩個實體:

基於鄰域的方法:基於鄰域方法,關注物品間關係或用戶間關係;基於物品的方法,據某用戶對和他感興趣的物品相似的物品的評分,建立用戶對這件物品的偏好模型;

隱語義模型:將物品和用戶映射至相同的隱語義空間,隱語義空間通過描述產品和用戶兩實體在因子上特徵來解釋評分,這些因子是根據用戶的反饋自動推動出來的。

一、預備知識:

  • 為用戶建立評分數據模型觀察每個用戶對每個物品的偏好程度及評分的時間,為一個用戶計算一個相關集:包含此用戶給予評分的全部"物品"集、對每個物品的"評分"及產品評分的對應"時間"。(此集合可能大多數據都是空的,因為用戶只會評價有限的物品,如在Netflix上,相對於大量的片庫來說,一個用戶有評分的電影量是非常小的值)。

  • 建立評分數據模型的目的通過目觀測到的數據來做機器學習,目的是為了能 預測未來的評分。所以,對於提供學習的數據須做「過擬合」數據的預防。

1.1 基準預測:

  • 偏置:某些用戶對某物品評分比其他用戶高,或某些物品得到評分比其他物品高的傾向明顯,需要將偏置情況也封裝進基準預測中;
  • 一個策略分值的簡單例子 - 估算用戶A對電影B的預測評分:用戶A對所有電影的平均評分是3.7。電影B與一般電影要好,我們估算好0.5分。用戶A是一個挑剔的用戶,其平分比一般用戶低0.3分,則用戶A對電影B的說通得分是3.7 + 0.5 - 0.3 = 3.9;

1.2 隱式反饋:

在Netflix上平均一個用戶對 208 部電影進行評分。其他用戶行為,如觀看記錄、用戶對觀看過或評分過電影的其他屬性(如類型、地區、明星等)的收集,亦可做為用戶喜好的計算參考;

另外,用戶選擇一個電影打分,就告訴我們他對此電影更有興趣,我們可以將此用戶與全部電影數據集建立一個二元矩陣,1表示已評分,0表示未評分,此二元矩陣對提高預測準確度有重要參考作用。

二、因子分解模型:

用隱語義模型做協同的目標是「揭示隱藏特徵"。具體模型如pLSA、神經網路、隱式Dirichlet分配、以及由用戶對物品評分矩陣因子分解推導出的模型(基於SVD)。

SVD是為識別隱語義變數而發展起來的,由於大部分評分值缺失,將SVD應用到協同比較困難,早期的研究方法依賴於填充(通過預測填充缺失的評分值,須做大量數據計算)不準確的填充會導致數據傾斜。最近的研究根據觀測到的評分直接建模,通過正則模型避免擬合。

SVD:將用戶和物品兩方面信息(用戶的多種信息 和 物品的多種信息),映射到維度為 f 的聯合隱語義空間,試圖通過描述物品和用戶在各因子上的特徵來解釋評分值,這些因子是從用戶反饋自動推斷出來的。如電影的喜劇/悲劇、面向兒童的等級、甚至是一些無法解釋的維度;

SVD++:據用戶的評分物品集來描述用戶的特徵。

timeSVD++(考慮時間因子):

  • 物品本身的時效性衡量:不同類型的物品差異較大,如新聞的時間切割粒度要比電影的粒度精細很多;

  • 用戶的喜好變化

  1. 從短期層面上講,用戶的喜好變化很快。個人認為對於不同類型物品的推薦採用方法不同。如對於新聞的推薦,用戶的時間段粒度建議粗些,而數據即新聞的粒度建議細些。對於電影的推薦,用戶的時間粒度建議細些,而新聞的粒度可以粗些;

  2. 用戶在不同的時間點也可能有不同的行為、或對物品喜好的傾向。如周末傾向追劇多些,工作日傾向看資訊多些。可針對用戶行為,建立不同粒度時間因子的推薦策略;
  3. 若用戶一天內集中對差異較大的物品評分,或某天評分與往常習慣差距較大(如這天心情特別好,而對某一般的電影給了高分),這些數據在時間因子上都需要做處理,而非直接應用;
  • 通用的時間策略:季節、一天的不同時段(白天/晚上、早上/午休/下班路上/晚上在上/深夜)、工作日周末等。部分公司(包括名聲很響的大公司們)會生硬的切換通用策略,如晚23點以後提升」擦邊數據「的權重,個人認為此做法欠考慮,未考慮用戶自身情況,為提高轉化傷害體驗的做法個人很不認同。
  • 綜上:準確率隨因子維度數目增加而提高,緯度越高表達「用戶 - 電影」的複雜交互能力越強,

    三、基於近鄰的模型:

    基於鄰域的插值的協同過濾演算法或許是創建一個推薦系統最流行的方式,三個主要組成部分描述了這個演算法特徵:數據規範化、近鄰的選擇、插值s

    3.1 物品相似度度量:基於皮爾遜相關係數,一些物品或許只有幾個共同用戶評分,建議用基準預測器的殘差補償特定用戶和特定物品的偏差;

    3.2 基於相似度的插值:

    • 相似度的雙重作用:識別出最近的近鄰物品、作為插值係數(插值是離散函數逼近的重要方法,利用它可通過函數在有限個點處的取值狀況,估算出函數在其他點處的近似值)

    • 相似度方法優點

    1. 可解釋:(user CF通常是一個黑盒,我可能不認識我的鄰居,但item CF用於推薦理由的解釋用戶會更熟悉,如基於我喜歡《wall.E》為我推《Up》)

    2. 新的評分:在用戶輸入新評分後立即給出更新過的推薦結果;

    3.3 聯合派生插值權重:

    給定一個近鄰集合,計算 」 插值權重 「 ,通過這些權重得到預測規則。推倒插值權重時同時考慮近鄰物品之間的相互依賴關係。

    基於物品鄰域方法的有效計算需要提前計算與每個物品對相關的特定值,以達到快速檢索的目的。

    四、增強的基於近鄰的模型:

    基於鄰域模型的本質是局部的,矩陣分解技術是全局的。結合這兩個模型的原理,同樣基於物品或用戶間關係,通過考慮數據中存在的弱信號來提高準確度。

    4.1 全局化的鄰域模型:

    建立模型:

    • 使用與特定用戶無關的基於物品的權重,由初始框架公式定義物品間權重,再通過用戶評分做調整;

    • 考慮插值權重,把未知和已知的評分聯繫起來,將權重做為調整或補償的一部分,並把它們增加到基準預測器中;

    • 採用二元的用戶輸入形式,分析哪些物品被評分而不關注具體評分值,使用全局權重而非特定用戶的插值係數,是為了強調缺失值的影響。

    一些說明:

    一個用戶的觀點不僅體現在他評分的物品,也體現在他沒有評分的物品。如對《怪物史萊克3》評分高的用戶,也會對《怪物史萊克1》和《怪物史萊克2》評分較高。程序會對《怪物史萊克1》、《怪物史萊克2》和《怪物史萊克3》建立高權重。如果一個用戶沒有1和2評分,而僅對3評分,則對3的這個評分將會被懲罰。

    對於評分記錄較多的用戶,我們寧願給出詭異且不常見的推薦。對於評分記錄很少的用戶,使用接近基準值的保險推薦結果。

    4.2 因式分解的鄰域模型:

    以4.1為基礎,通過剪掉不可能的基於物品的關聯來簡化該模型,進而改善時間和空間複雜度,但簡化操作越大則準確性也越低。需解決保留準確度情況下,降低時間和空間複雜度的問題。

    把基於物品的關係進行因式分解:

    • 將存儲之間的所有成對關係:存儲量過大;

    • 只存某物品的top-K近鄰:準確度有下降;

    • 因子分解的鄰域模型:無以上問題,將物品與三個向量關聯起來,從而把基於物品的關係包含到模型中。將物品映射到一個f維隱語義空間中,通過隨機梯度下降演算法完成。

    基於用戶的模型傳統的用戶鄰域模型計算效率較低,一般情況下用戶量大於物品量。使用因式分解的方法,將每個用戶與兩個向量關聯起來。

    基於物品的用記的因式分解可以組合成集合模型,如同時訓練兩種單獨模型,使它們在訓練時就能相互了解。

    4.3 基於鄰域的模型的動態時序:

    • 基於物品的權重反映了物品的固有特點,因此不會隨時間變化,學習過程應該獲取無偏的長期值;

    • 若用戶在一個時間周期內同時對兩個物品給予很高評價,則對這兩個物品的有關係是一個很好的指示,若用戶給這兩個物品的評價相隔5年,則相關度表現較弱。但這些考慮對用戶依賴度較高,如有些用戶的喜好是比較穩定的;

    • 若一個用戶興趣變化較大,則此用戶之前的評分,不應該對當前時刻有很大影響;

    參考文獻:弗朗西斯科·里奇 (Francesco Ricci) 《推薦系統:技術、評估及高效演算法》 機械工業出版社; 第1版 (2015年7月1日)


    推薦閱讀:

    在機器學習模型的訓練期間,大概幾十分鐘到幾小時不等,大家都會在等實驗的時候做什麼?
    演算法題概念初解
    刷完了leetcode,接下來刷哪個網站比較好呢?
    將數據壓縮84%,在壓縮數據上索引的一種新思路,PiXiu方法
    潔癖朋友吃壽司卷

    TAG:推荐 | 算法 | 协同过滤 |