【论文】eALS

2019-06-25 12:18:34 浏览数 (2)

本文对于加快矩阵分解作出了贡献。解决了两个问题:

  1. 缺少负面反馈数据。大部分MF是基于正面反馈建模的,用户交互过才会有数据记录。然而,用户没有交互过的数据,可能是他还没看过该数据,也可能他不喜欢,看到了也没查阅该数据。不管是没看过,还是不喜欢,在矩阵中都只是"0"值。为了采样负面反馈数据,有几种做法:
    1. 把缺失数据都当做负面反馈,施加一个统一的值[1]。Robin Devooght认为ρ = α(nm − |R|)/|R|,比较好。p=1时,为观测值与已观测值重要性相等。也是这么做的,以便降低计算复杂度。然而,这种假设在现实世界中是无效的、不合理的。
  2. 大部分算法是基于离线数据的,因此难以跟上快速变换的在线数据。

隐式反馈容易获取,但难以利用,因为不易挖掘其中的负面反馈信息。

3. 准备工作

3.1 隐式反馈中的MF

通常预测分数是依靠特征向量想成得到的:

人们通常会再加一个偏置:

Hu提出可以再加一个权重w[2]:

3.2 ALS效率优化

一般来说,目标函数是

通过求导数=0的点,我们可以得到极值

image.png

时间复杂度是:

但是矩阵求逆的时间复杂度太大。Hu[2]提出给那些未观测到数据的元素都赋予固定的权重w0。

image.png

从而时间复杂度变为:

但上式的前半部分在

时依旧占据着主要的开销。更何况后半部分的时间复杂度也大于SGD,SGD的时间复杂度如下:

3.3 逐元素处理的ALS

我们可以一个一个元素地处理,比如下式:

把导数设为0,我们可以得到:

image.png

同理,对于商品特征向量,有:

时间复杂度: 可以降到

image.png

如果提前计算

则时间复杂度甚至能降到

image.png

4. eALS

4.1 缺失值处理

提出了以下公式:

ci表示没用户点击的item i是true negative的概率。ci如何表示,是一个问题。

4.1.1 流行程度相关的权重策略

上文的ci可以表达为以下公式,该公式考虑了被观测item的流行程度:

fi的表达如下:

意思就是: 浏览过物品i的人数 / ∑每个物品被浏览过的人数。

α一般取0.5效果较好,取1以上时会加重流行的item重要性。 另外,统一权重的方法相当于上面公式中α=0且w0 = c0/N的时候。

4.2 学习公式

时间复杂度如下:

最快的依然是基于SGD的BPR,因为后者只对部分的缺失数据进行采样、学习。

4.3 在线更新

每次出现新交互(u,i)时,更新的时间复杂度如下:

总结

  1. 最关键的是,eALS的公式学习不是基于梯度下降,而是用一步到位的计算公式。该公式的效率比其他同类型(一步到位)的公式要高。也正因为一步到位计算,它必须对每个空缺位置进行填充。(一般填0,但权重不填0)。
  2. 对于每个缺失位置都进行了填充,只是其权重不是固定值,而是一个与对应item的流行度相关的值。物品越流行,则其不被某用户点击时,施加的"惩罚"越大
  3. 速度最快的还是BPR,因为后者不会填充所有缺失位置,而是只填充部分空缺。当然,由于采用梯度下降的方法,也不要求user-item交互矩阵填充所有空缺。

疑问

结合本文4.1.1的公式,有两个疑问:

  1. 我觉得还是没把"未被观测"和"未被点击"的人所区分开。一个很流行的物品没有被某个user购买,没准是因为这个user真的没见过这个物品,但公式会因为物品很流行,强行认为user不喜欢该物品。
  2. 就算r_ui^2(user对item是否产生交互的预测值)考虑了user对item的喜好程度,那预测值,则当item缺失没被user看到过,而未被user点击时,其施加的惩罚应当更低吧?然而公式会使得这个惩罚更高。

  1. Robin Devooght. Dynamic Matrix Factorization with Priors on Unknown Values. ↩
  2. Y. Hu, Y. Koren, and C. Volinsky. Collaborative filtering for implicit feedback datasets ↩ ↩

0 人点赞