第 3 章 基礎推薦演算法

2022-06-17 14:12:13 字數 4244 閱讀 9079

原文

全文目錄

相關性召回+點選率排序

根本任務:匹配

匹配過程步驟:

相關性召回, 對使用者做360度全方位掃瞄, 盡量多的描述和覆蓋使用者可能感興趣高質量的物品;

候選集融合, 重點關注多樣性和相關性的均衡, 召回演算法的優先順序等問題;

結果排序, 按照某一確定目標進行排序;

業務干預

分層明確的邏輯架構, 有利於專案整體的並行化和效果調優的並行化;

匹配的常用計算路徑:

直接計算使用者與物品的相關性;

使用者到物品的行為權重+物品與物品的相關性 => 使用者與物品的相關性; (基於物品的協同過濾(item-based cf)演算法)

使用者與使用者的相關性+使用者到物品的行為權重 => 使用者與物品的相關性; (基於使用者的協同過濾(user-based cf)演算法)

使用者與標籤的相關性+標籤與物品的相關性 => 使用者與物品的相關性;

相關性, 由演算法計算出的相關性, 認為是一種複雜相關性靜態相關性;

行為權重, 根據使用者與物品之間產生的行為關係計算出的一種時效性較短的相關性, 認為是一種簡單相關性動態相關性;

基於矩陣分解的演算法,隱語義模型(latent factor model, lfm), 將使用者與物品之間的關係, 建模為 "使用者到隱特徵 + 隱特徵到物品" 的鏈條, 然後通過求解隱特徵資訊來求解整個鏈條;

矩陣 \(r\) 表示使用者對物品行為的原始矩陣

\[r = \left\ r_ & r_ & \cdots & r_ \\ r_ & r_ & \cdots & r_ \\ \vdots & \vdots & \ddots & \vdots \\ r_ & r_ & \cdots & r_ \\ \end \right\}

\]每一行表示乙個使用者, 每一列表示乙個物品, 每個元素 \(r_\) 表示使用者 \(u\) 對物品 \(i\) 的行為;

矩陣分解則是分解為:

x =\left\ x_ & x_ & \cdots & x_ \\ x_ & x_ & \cdots & x_ \\ \vdots & \vdots & \ddots & \vdots \\ x_ & x_ & \cdots & x_ \end \right\},

y =\left\ y_ & y_ & \cdots & y_ \\ y_ & y_ & \cdots & y_ \\ \vdots & \vdots & \ddots & \vdots \\ y_ & y_ & \cdots & y_ \end \right\}

\]x 矩陣每一列表示乙個使用者, y 矩陣每一列表示乙個物品; 每一行均表示乙個隱類別;

優點:缺點: 隱特徵缺乏直接的解釋, 導致隱變數這個中間資料難易復用, 有效資料只有最終的使用者和物品的資料;

lfm 思路: 先得到使用者和物品的原始行為矩陣, 然後借助矩陣中有值(有行為)的元素來計算求解兩個隱變數矩陣的值, 再用隱變數反過來求解缺失值元素的值, 從而得到推薦結果;

衍生出的相關模型: plsa, lda, 詞嵌入, 句嵌入, 文件嵌入等;

lfm 求解 x, y 轉化為以下式子的優化問題(損失函式):

\[l = || r_ - (x^t×y)_ ||_f^2

\]\(||m||_f^2\) 是矩陣 \(m\) 的 frobenius 範數(f-範數)的平方, 表示矩陣中每個元素的平方和;

\[m = [a_]_\\

||m||_f = \sqrt^2}}

\]sample下標代表矩陣中的樣本集;

目標: 損失函式 l 取得最小值的 \(x_\), \(y_\):

\[l = \sum_(r_ - \sum_(x_ × y_))^2

\]單純優化上式可能會出現過擬合現象, 所以加入正則化項:

\[l = \sum_(r_ - \sum_(x_ × y_))^2 + \lambda(\sum^2}+\sum^2})

\]其中, \(\lambda\) 是正則化引數, 代表正則化力度;

求解方法有兩種:

基於梯度下降的方法

隨機梯度下降法(stochastic gradient descent, sgd), 每次隨機找一條訓練樣本, 求得其梯度, 然後將引數向梯度的反方向前進一步, 不斷重複該過程, 求得一組結果穩定的引數值;

求兩組引數 \(x_\) 和 \(y_\) 的偏導數:

\[\frac} = -2(r_-\sum(x_ \times y_))y_ + 2\lambda x_ \\

\frac} = -2(r_-\sum(x_ \times y_))x_ + 2\lambda y_

\]根據上面的梯度求得引數的前進方向:

\[x_ = x_ + \alpha((r_ - \sum(x_ \times y_))y_ - \lambda x_) \\

y_ = y_ + \alpha((r_ - \sum(x_ \times y_))x_ - \lambda y_)

\]可以先將 \(x_\) 和 \(y_\) 隨機初始化, 然後按上面公式不斷迭代;

其中三個引數 \(\lambda\)(正則化係數) , \(\alpha\)(學習率) , \(k\)(隱特徵) 都需要反覆試驗來確定最優值;

不基於梯度的交替最小二乘法

交替最小二乘法(als), 將兩組引數交替保持一組固定不變, 來優化另外一組;

引入新變數: \(c_ = 1+\alpha r_\)

優化目標變更為:

\[l = \sum_ c_ (r_ - \sum(x_ \times y_))^2 + \lambda(\sum^2}+\sum^2})

\]改寫向量形式:

\[l = \sum_c_(r_ - x_u^ty_i)^2 + \lambda(\sum_u}) \\

l = \sum_^(c_(r_ - x_u^ty_i)^2 + \lambda(}))

\]通過微積分運算求得解析解:

\[x_u = (yc^uy^t + \lambda i)^yc^ur_u \\

y_i = (xc^ix^t + \lambda i)^xc^ir_i

\]從根本邏輯上劃分演算法:

基於內容的演算法(後面介紹)

關聯規則演算法是對資料做了嚴格限制, 比如限制分析一次購物涉及的物品之間的關係, 計算出的資料相關性會更強, 由於使用了更少的資料而導致覆蓋率較差;

相似度演算法則是分析一段時間內購買行為資料, 相關性上有所犧牲, 但會有更好的多樣性和覆蓋率;

可以說相似度演算法是一種廣義的關聯規則演算法;

兩個 n 維向量 x (\(x=(x_1, x_2, \dots, x_n)^t\))和 y (\(y=(y_1, y_2, \dots, y_n)^t\)) 的余弦相似度:

\[consine(x, y) = \frac = \frac^nx_iy_i}^n x_i^2}\sqrt^n y_i^2}}

\]大資料稀疏情況下會造成兩個層面的浪費:

採用剪枝優化,

優化後的計算流程:

將使用者到物品的行為原始資料轉為物品到使用者的倒排表;

遍歷倒排表得到所有的 intersect(i, j), 和所有的 count(i);

使用 intersect(i,j) 和 count(i) 計算物品 i 和物品 j 之間的非零相似度;

同物品與物品的相關性計算方法, 將使用者和物品位置互換即可;

以上介紹的方法都是基於使用者行為的召回演算法, 存在如下問題:

以下介紹基於使用者畫像(標籤)的演算法;

將使用者與物品的關係拆解為多個中間相關性的組合;

解決方法: 基於內容的推薦演算法, 或直接推薦暢銷熱品或新品;

冷啟動時期推薦系統的責任:

給出推薦結果;

盡快探測使用者的興趣, 推薦種類豐富的物品, 增大命中使用者興趣的可能性;

解決冷啟動問題, 在推薦系統中稱為exploration & exploitation 問題(ee問題), 即探索與利用問題;

als交替最小二乘法推導

演算法第3章小結

動態規劃 基本要素 1 最優子結構性質 2 重疊子問題性質 步 驟 1 找出最優解的性質,並刻畫其結構特徵 2 遞迴地定義最優值 3 以自底向上的方式計算最優值 4 根據計算最優值時的資訊構造最優解 自底向上的填表方法 1 表的維數 2 填表範圍 3 填表順序 例1 矩陣連乘問題 void mati...

AJAX基礎 第4章(3)

offsetparent 大多說offsetparent返回body,但是在頁面td元素中存在絕對 相對定位時offsetparent的值。但在頁面td元素中存在絕對 相對定位時offsetparent的值。在td中的元素會把第乙個絕對 相對定位的hierarchy parent當作offsetpa...

第3章 ARM程式設計基礎

偽指令 指令功能描述 code16 指示彙編編譯器後面的指令為16位的tumb指令 code32 指示彙編編譯器後面的指令位32位的arm指令 export global 宣告乙個符號可以被其它檔案引用 import extern 指示編譯器當前符號在其它檔案中定義,本檔案中可能引用該符號 equ為...