天天看點

推薦系統系列——矩陣分解與FM算法矩陣分解算法邏輯回歸算法優缺點FM模型算法FFM算法

目錄

矩陣分解算法

隐語義模型

矩陣分解算法原理

矩陣分解算法的求解

矩陣分解算法優缺點

邏輯回歸算法優缺點

FM模型算法

FM公式的了解

FM模型的應用

FM算法的優缺點

FFM算法

FFM算法的思想

矩陣分解算法

隐語義模型

核心思想:通過隐含特 征(latent factor)聯系使用者興趣和物品(item), 基于使用者的行為找出潛在的主題和分類, 然後對item進行自動聚類,劃分到不同類别/主題(使用者的興趣)。

對比:是把協同過濾算法進行了一種延伸, 把使用者的相似性和物品的相似性通過了一個叫做隐向量的方式進行表達

如果我們知道了使用者A和使用者B兩個使用者在豆瓣的讀書清單, 從他們的閱讀清單可以看出,使用者A的興趣涉及偵探小說、科普圖書以及一些計算機技術書, 而使用者B的興趣比較集中在數學和機器學習方面。 那麼如何給A和B推薦圖書呢?
先說說協同過濾算法, 這樣好對比不同:
1. 對于UserCF,首先需要找到和他們看了同樣書的其他使用者(興趣相似的使用者),然後給他們推薦那些使用者喜歡的其
他書。
2. 對于ItemCF,需要給他們推薦和他們已經看的書相似的書,比如作者B看了很多關于資料挖掘的書,可以給他推薦機器學習或者模式識别方面的書。
​
而如果是隐語義模型的話, 它會先通過一些角度把使用者興趣和這些書歸一下類, 當來了使用者之後, 首先得到他的興趣分類, 然後從這個分類中挑選他可能喜歡的書籍。
​
這裡就看到了隐語義模型和協同過濾的不同, 這裡說的角度其實就是這個隐含特征, 比如書籍的話它的内容, 作者, 年份,主題等都可以算隐含特征,如果這個例子還不是很清晰的話,那麼下面再舉個更為具體的例子, 看看是如何通過隐含特征來劃分開使用者興趣和物品的。      
推薦系統系列——矩陣分解與FM算法矩陣分解算法邏輯回歸算法優缺點FM模型算法FFM算法

矩陣分解算法原理

通過分解協同過濾的共現矩陣(評分矩陣)來得到使用者和物品的隐向量, 就是上面的使用者矩陣Q和物品矩陣P, 這也是“矩陣分解”名字的由來。

推薦系統系列——矩陣分解與FM算法矩陣分解算法邏輯回歸算法優缺點FM模型算法FFM算法

那麼如果有了使用者矩陣和物品矩陣的話, 我們就知道了如果想計算使用者u

對物品i的評分, 隻需要

矩陣分解算法的求解

  • 随機初始化使用者矩陣U和物品居中P
  • 建構損失函數
  • 利用梯度下降法求解損失函數的最小值,對應的U和P矩陣即為所要分解的矩陣

矩陣分解算法優缺點

a. 優點:

  • 泛化能力強: 一定程度上解決了稀疏問題
  • 空間複雜度低: 由于使用者和物品都用隐向量的形式存放, 少了使用者和物品相似度矩陣, 空間複雜度由降到了(n+m)*f
  • 更好的擴充性和靈活性:矩陣分解的最終産物是使用者和物品隐向量, 這個深度學習的embedding思想不謀而合, 是以矩陣分解的結果非常便于與其他特征進行組合和拼接, 并可以與深度學習無縫結合。

b.缺點:

但是, 矩陣分解算法依然是隻用到了評分矩陣, 沒有考慮到使用者特征, 物品特征和上下文特征, 這使得矩陣分解喪失了利用很多有效資訊的機會, 同時在缺乏使用者曆史行為的時候, 無法進行有效的推薦。 是以為了解決這個問題,邏輯回歸模型及後續的因子分解機模型, 憑借其天然的融合不同特征的能力, 逐漸在推薦系統領域得到了更廣泛的應用。

邏輯回歸算法優缺點

優點:

  1. LR模型形式簡單,可解釋性好,從特征的權重可以看到不同的特征對最後結果的影響。
  2. 訓練時便于并行化,在預測時隻需要對特征進行線性權重,是以性能比較好,往往适合處理海量id類特征,用id類特

征有一個很重要的好處,就是防止資訊損失(相對于範化的 CTR 特征),對于頭部資源會有更細緻的描述

  1. 資源占用小,尤其是記憶體。在實際的工程應用中隻需要存儲權重比較大的特征及特征對應的權重。
  2. 友善輸出結果調整。邏輯回歸可以很友善的得到最後的分類結果,因為輸出的是每個樣本的機率分數,我們可以很容易的對這些機率分數進行cutoff,也就是劃分門檻值(大于某個門檻值的是一類,小于某個門檻值的是一類)

缺點:

1.無法自動做特征交叉,需要人工手動參與,并且比較依賴人工的工程經驗,也可能造成資訊的損失。

2.不能處理非線性資料,産生更具深層意義的高維特征,是以其産生的推薦結果是直白的,暴力的。

FM模型算法

針對邏輯回歸的第一個缺點,即無法做特征交叉,FM模型對邏輯回歸模型增加了一個二階交叉項并對其做出了修改,能夠自動對每個特征做特征交叉。下面是基于邏輯回歸模型提出的PLOY2模型

但這個式子有一個問題,隻有當 xi與 xj均不為0時這個二階交叉項才會生效,後面這個特征交叉項本質是和多項式核SVM等價的,為了解決這個問題,我們的FM登場了!

FM模型使用了如下的優化函數:

事實上做的唯一改動就是把wij 替換成了<vi,vj> ,大家應該就看出來了,這實際上就有深度學習的意味在裡面了,實質上就是給每個xi計算一個embedding,然後将兩個向量之間的embedding做内積得到之前所謂的 好處就是這個模型泛化能力強 ,即使兩個特征之前從未在訓練集中同時出現,我們也不至于像之前一樣訓練不出wij,事實上隻需要xi和其他的 xk同時出現過就可以計算出的embedding!

FM公式的了解

  • 首先,單從模型表達能力上來看,FM是要強于LR的,至少它不會比LR弱,當交叉項參數 全為0的時候,整個模型就退化為普通的LR模型。對于有n個特征的模型,特征組合的參數數量共有個,并且任意兩個參數之間是獨立的。

    而FM模型中二次項的參數數量減少為kn 個,遠少于多項式模型的參數數量。另外,參數因子化使得xhxi的參數和xixj的參數不再是互相獨立的,是以我們可以在樣本稀疏的情況下相對合理地估計FM的二次項參數。具體來說,xhxi和xixj的系數分别為<vh,vi>和<vi,vj>,它們之間有共同項 vi。也就是說,所有包含“ xi的非零組合特征”(存在某個 ,使得 ​)的樣本都可以用來學習隐向量,這很大程度上避免了資料稀疏性造成的影響。具體的例子如下,主要是FM之中的隐向量之間具有相關性,隐向量可以從其他的隐向量對中學習而得。而POLY2隻能由資料給定。是以當資料比較稀疏是,PLOY2中的交叉項非常稀疏,容易退化成LR。而FM則可以通過其他非0組合特征中學習到隐向量。具體例子如下:

推薦系統系列——矩陣分解與FM算法矩陣分解算法邏輯回歸算法優缺點FM模型算法FFM算法
推薦系統系列——矩陣分解與FM算法矩陣分解算法邏輯回歸算法優缺點FM模型算法FFM算法
  • FM的公式是一個通用的拟合方程,可以采用不同的損失函數用于解決regression、classification等問題,比如可以采用MSE(Mean Square Error)loss function來求解回歸問題,也可以采Hinge/Cross-Entropy loss來求解分類問題。當然,在進行二進制分類時,FM的輸出需要使用sigmoid函數進行變換,該原理與LR是一樣的。直覺上看,FM的複雜度是。但是FM的二次項可以化簡,其複雜度可以優化到 。由此可見,FM可以線上性時間對新樣本作出預測。

FM模型的應用

最直接的想法就是直接把FM得到的結果放進sigmoid中輸出一個機率值,由此做CTR預估,事實上我們也可以做召回。

由于FM模型是利用兩個特征的Embedding做内積得到二階特征交叉的權重,那麼我們可以将訓練好的FM特征取出離線存好,之後用來做KNN向量檢索。

工業應用的具體操作步驟:

  1. 離線訓練好FM模型(學習目标可以是CTR)
  2. 将訓練好的FM模型Embedding取出
  3. 将每個uid對應的Embedding做avg pooling(平均)形成該使用者最終的Embedding,item也做同樣的操作
  4. 将所有的Embedding向量放入Faiss等
  5. 線上uid送出請求,取出對應的user embedding,進行檢索召回

FM算法的優缺點

優點:

  • 引入了二階項,能夠自動進行特征組合
  • 二階項的參數為兩個特征之間的隐向量(由矩陣分解算法我們可以知道,隐向量具備了特征之間更深層的資訊,進而能為我們挖掘出從沒出現過的特征組合)
  • 隐向量之間具有相關性,能夠解決樣本稀疏時的參數軌迹問題。

缺點:

  • 當<vh,vi>和<vi,vj>,它們之間有共同項 vi時,vi是綜合了vh和vj等多個和vi有互動的特征學習到的。雖然具有普遍意義,但是當vh和vj的差别很大時,使用同樣的vi是不太合理的。是以我們引入了FFM。
推薦系統系列——矩陣分解與FM算法矩陣分解算法邏輯回歸算法優缺點FM模型算法FFM算法

FFM算法

FFM算法的思想

  • 在學習隐向量前,先把特征進行分類
  • 對于每個特征,按照不同的分類域學習不同的隐向量,也就是一個特征對應着多個隐向量。(也就是一個特征對應多個隐向量。 這樣在與不同域(類)裡面特征交叉的時候, 用相應的隐向量去交叉計算權重, emmm, 這倒是一種思路, 并且這樣做的好處是學習隐向量的時候隻需要考慮相應的域的資料, 且與不同類的特征進行關聯采用不同的隐向量, 這和不同類特征的内在差異也比較相符。 這其實就是FFM在FM的基礎上做的改進, 引入了域的概念, 對于每個特征, 針對不同的交叉域要學習不同的隐向量特征。)
  • 域了解起來的話其實就是先對特征根據性質的不同進行了一個分類,不同的分類就是不同的域,域内特征一般都是同一個categorical特征經過One-Hot編碼生成的數值特征,比如使用者性别, 職業, 日期啊等等。

繼續閱讀