返回介绍

数学基础

统计学习

深度学习

工具

Scala

十四、 Netflix BellKor Solution [2009]

发布于 2023-07-17 23:38:24 字数 36827 浏览 0 评论 0 收藏 0

  1. Netflix 数据集包含从 1999-12-312005-12-31 期间,所有用户在所有电影上的评分。其中用户数量为 $ m=480189 $ ,电影数量为 $ n=17770 $ ,评分数量超过1 亿,每个评分关联有评分日期。另外,所有用户都是脱敏的。

    比赛数据以training-test 的形式给出,其中:大约 420 万个评分被保留,这些评分包括每个用户最近的 9 部电影评分。如果用户评论电影的数量少于 18 个,则保留的电影评分数量会少于9 部。剩余的电影评分都作为训练集给出。

    保留的电影评分被随机划分为三个数据集:

    • Probe 数据集:这部分数据集给出了label,即评分。参赛选手可以自由地在本地利用这部分数据集来作为训练或测试。

    • Quiz 数据集:这部分数据集未给出 label。参赛选手可以将他们模型在 Quiz 数据集上的预估结果上传到比赛网站,网站会给出 Quiz 数据集上的评估的 RMSE ,并根据该 RMSE 在公开的排行榜上公布。

      在比赛结束之前,参赛者可以反复提交他们的在 Quiz 数据集上的预估评分,每次都可以看到网站给出的RMSE 结果。

    • Test 数据集:这部分数据集未给出 label 。参赛选手可以将他们模型在 Test 数据集上的预估结果上传到比赛网站,但是只有到比赛结束的那一刻网站才会公布在 Test 数据集上的评估的 RMSE。网站取其中得分最高的结果作为获胜者。

    与训练集相比,保留的电影评分数据集包含更多评分稀疏的用户,因此更难预测。从某种意义上看,这代表了对协同过滤系统的实际需求:系统需要从已有的评分中预估新的评分,并且平等地对待所有用户,而不仅仅是活跃用户。

  2. 论文 《The BellKor Solution to the Netflix Grand Prize》 给出了作者参加Netflix 比赛获胜的模型及其思路,论文中所有的结果都是在 Quiz 数据集上评估的。

  3. 令用户 $ u $ 对电影 $ i $ 的评分为 $ r_{u,i} $ ,评分取值为 1~5 分;令用户 $ u $ 对电影 $ i $ 的预估评分为 $ \hat r_{u,i} $ 。令评分时间为 $ t_{u,i} $ ,其粒度为天级。

    大约 99%user-item 评分是缺失的,因为一个用户通常只会观看很小一部分比例的电影。因此定义观察到的 $ (u,i) $ 集合为: $ \mathcal K = \{(u,i)\mid r_{u,i} \text{ is known}\} $ 。注意: $ \mathcal K $ 也包含了 Probe 集合。

    定义所有用户集合为 $ \mathbb U $ , 所有电影集合为 $ \mathbb I $ ,用户 $ u $ 的评分电影集合为 $ \mathbb I_u $ ,定义电影 $ i $ 收到评分的用户集合为 $ \mathbb U_i $ 。

    另外,在 Quiz 数据集和 Test 数据集中,我们知道用户对哪些电影评分,但是具体评分不知道。评分这一行为(即使不知道具体数值)已经包含了有效信息,因此我们定义集合 $ \mathbb N_u $ 为用户 $ u $ 发生评分行为的电影集合。 $ \mathbb N_u $ 是 $ \mathbb I_u $ 的扩展,因为它考虑了 Quiz 数据集和 Test 数据集。

  4. 在比赛中,为了防止过拟合我们使用 $ L_2 $ 正则化。

    另外,所有超参数都是通过手动搜索的方式来调优:执行多次搜索并在 NetflixProbe 数据集上选择 RMSE 最佳的参数。这种方式并不是最优的,有两个原因:

    • 首先一旦设置了超参数的值,我们就不会对其进行修改。但是如果未来引入了新的超参数,则可能还需要回过头来修改它的值,使得整体效果最优。
    • 其次我们在相同算法的多个变种之间使用了相同的超参数值,事实上需要对每个变种进行更精细的调整从而使用不同的超参数值。

    我们之所以选择这种方便快捷、但是准确性较低的方式是因为我们的经验表明:单个预测器 predictor 上准确性的过度调整,并不能在整体组合 predictor 中起到多大贡献。

  5. 我们采用的是多个模型混合blending的方式,而不是采用单个模型。

14.1 Baseline Predictor

  1. 协同过滤模型试图建模useritem 之间的交互 interaction ,这些交互使得用户对不同电影产生了不同的评分。但是,很多观察到的评分是由于用户或item 本身导致的,与user-item 的交互无关。典型的例子是:系统中某些用户的评分普遍高于其它用户,即 user bias ;另外系统中某些item 收到的评分也普遍高于其它item,即 item bias

    我们在 baseline predictor 中封装了不涉及user-item 交互的因素,这使得后续的 predictor 可以专注于建模user-item 交互的部分。

    令 $ \mu $ 为所有用户在所有电影上的平均评分,则用户 $ u $ 对电影 $ i $ 的 baseline 预估为:

    $ b_{u,i} = \mu + b_u + b_i $

    其中参数 $ b_u $ 表述用户 $ u $ 的 bias,参数 $ b_i $ 为电影 $ i $ 的 bias

    如:假设所有用户在所有电影上的平均评分为 $ \mu = 3.7 $ 分。“张三” 是比较苛刻的用户,其评分普遍比平均水平低 0.3 分;电影 《流浪地球》 比较热门,其评分普遍比平均水平高 0.5 分。则“张三” 对于 《流浪地球》 的评分预估为 $ 3.7 + 0.5 - 0.3 = 3.9 $ 分。

  2. 求解参数 $ b_u,b_i $ 的一种简单方法是分别计算 $ b_i $ 和 $ b_u $ :

    首先对每个电影 $ i $ ,根据它收到评分对 $ \mu $ 的偏离的均值来计算 $ b_i $ :

    $ b_i = \frac{\sum_{u\in \mathbb U_i}(r_{u,i} - \mu)}{\lambda_1 + |\mathbb U_i|} $

    然后对每个用户 $ u $ ,根据用户评分对 $ \mu $ 和 $ b_i $ 的偏离的均值来计算 $ b_u $ :

    $ b_u = \frac{\sum_{i\in \mathbb I_u}(r_{u,i} - \mu - b_i)}{\lambda_2 + |\mathbb I_u|} $

    其中分母中的 $ \lambda_1,\lambda_2 $ 为正则化参数,这是为了防止除以零。这两个参数通过对 Probe 数据集交叉验证得到,这里我们使用 $ \lambda_1 = 25,\lambda_2 = 10 $ 。

  3. 求解参数 $ b_u,b_i $ 的一种更准确的方法是求解下列目标函数的最优化问题:

    $ \min_{\mathbf {\vec b}} \sum_{(u,i)\in \mathcal K}(r_{u,i} - \mu - b_u - b_i)^2 + \lambda_3\left(\sum_u b_u^2 + \sum_i b_i^2\right) $

    这里 $ \mathbf {\vec b} $ 代表所有的用户和 itembias 。第一项表示通过 $ b_{u,i} $ 来拟合 $ r_{u,i} $ ;第二项为正则化项来防止过拟合。该最优化问题可以通过随机梯度下降法来求解。

    在实际应用中我们也采用这个更准确的求解方法。

14.1.1 时间效应

  1. 随着时间的变化,baseline predictor 有两个主要影响:

    • 电影的热门程度会发生变化。如,电影可能会受到外部事件的发生而热门或爆冷。因此我们将 item bias $ b_i $ 作为时间的函数。
    • 用户的平均评分会发生变化。如,用户可能会因为近期失业或失恋从而对电影的整体评分下降。因此我们将 user bias $ b_u $ 作为时间的函数。

    因此带时间效应的 baseline predictor 在时刻 $ t_{u,i} $ 的预估值为:

    $ b_{u,i} = \mu + b_u(t_{u,i}) + b_i(t_{u,i}) $

    其中 $ b_u(t), b_i(t) $ 都是时间相关的实值函数。

  2. 长期的时间效应和短期的时间效应是不同的。一方面,我们不希望电影每天的热门程度都在波动,而是在更长周期内变化;另一方面,我们观察到用户的时间效应每天可能变化,这反映出用户行为的天然不一致性inconsistency

    因此与电影的时间效应相比,用户的时间效应更短期,因此捕获用户的时间效应需要更高的分辨率(即时间粒度更细)。

  3. 我们首先建模电影的时间效应。我们发现可以将 item bias 根据时间分桶,在每个桶内item bias 都是固定的。

    • 分桶数量越大,则时间粒度越细(即,分辨率更高),但是每个桶内的评分数量越少,统计结果越不准确。
    • 分桶数量越小,则时间粒度越粗(即,分辨率越低),但是每个桶内的评分数量越多,统计结果越准确。

    因此我们需要在分辨率和桶内评分数量之间取得平衡。实际上,很多不同的分桶大小都可以产生相同的模型预估准确率。在我们的实现方式中,我们使得每个分桶对应于连续十周的数据,从而仅用30 个分桶就覆盖了数据集的所有日期。

    每个时间 $ t $ 关联一个桶编号 $ \text{Bin}(t) $ ,在我们这里它就是一个从 130 的整数。每个 item bias 被拆分为一个稳定的部分、一个时变的部分:

    $ b_i(t) = b_i + b_{i,\text{Bin}(t)} $

    通过最近 $ N $ 天的统计量来刻画 $ b_i(t) $ 。但是两个前提:itembias 波动缓慢,统计数据规模足够大从而置信。

  4. item 上对item bias 分桶的效果很好,但是在user 方面这是一个挑战。一方面我们希望为用户提供更高的分辨率,从而捕获短期的时间效应;另一方面我们希望每个分桶内有足够数量的评分从而产生可靠的参数估计。

    可以考虑为user bias 使用不同的表现形式,一个简单的选择是:使用线性函数来捕获 user bias 随时间的偏移drift

    对用户 $ u $ , 定义其平均的评分日期为 $ t_u $ 。假设用户 $ u $ 在日期 $ t $ 有过评分,则在日期 $ t $ 定义:

    $ \text{dev}_u(t) = \text{sign}(t-t_u)\times |t-t_u|^\beta = \begin{cases} |t-t_u|^\beta,&t \ge t_u\\ - |t-t_u|^\beta,& t\lt t_u \end{cases} $

    其中:

    • $ |t-t_u| $ 衡量时刻 $ t $ 到 $ t_u $ 之间的天数。
    • $ \text{sign}(\cdot) $ 为符号函数。
    • $ \beta \gt 0 $ 为超参数,它根据 Probe 数据集进行交叉验证得到,这里我们设置为 $ \beta = 0.4 $ 。

    user-bias 定义为线性函数:

    $ b_u(t) = b_u +\alpha_u\times \text{dev}_u(t) $

    其中 $ \alpha_u $ 为斜率, $ b_u $ 为截距,它们都从数据中学习得到。

    这里用线性函数来拟合,虽然简单但是实用。当然也可以采用更复杂的函数来拟合。

  5. 建模user bias 的线性函数和用户行为中的渐进式漂移 gradual drift 相吻合。但是我们还观察到用户的突发式漂移 sudden drift 。如,我们发现用户在某一天给出的多个评分往往几种在单个值。

    这种效应的跨度通常不到一天,这很可能反映了用户当时的心情。为解决这种超短期效应,我们为每个用户在每一天配置了一个参数 $ b_{u,t} $ ,从而解决 day-specific 效应:

    $ b_u(t) = b_u + \alpha_u\times \text{dev}_u(t) + b_{u,t} $

    考虑了以上这些时间效应之后,baseline predictor 现在为:

    $ b_{u,i} = \mu +b_u + \alpha_u\times \text{dev}_u(t_{u,i}) + b_{u,t_{u,i}} + b_i + b_{i,\text{Bin}(t_{u,i})} $

    如果将它作为一个独立的 predictor,则其在 Quiz 数据集上的 RMSE 结果为 0.9605

  6. 除了item biasuser bias 之外,另一个时间效应影响的因素是用户评分范围(即评分的上限和下限)的改变。

    之前我们考虑item bias $ b_i(t) $ 时,认为item bias 是和用户无关的。事实上由于用户的评分范围的变化, $ b_i(t) $ 也不完全和用户无关。为解决该问题,我们定义一个用户相关的、依赖时间的范围参数 $ c_u(t) $ ,则baseline predictor 进一步改进为:

    $ b_{u,i} = \mu +b_u + \alpha_u\times \text{dev}_u(t_{u,i}) + b_{u,t_{u,i}} +\left( b_i + b_{i,\text{Bin}(t_{u,i})}\right)\times c_u(t_{u,i}) $

    $ c_u(t) $ 的实现可以参考 $ b_u(t) $ ,即:

    $ c_u(t) = c_u + c_{u,t} $

    其中 $ c_u $ 是 $ c_u(t) $ 的时不变的部分, $ c_{u,t} $ 代表每天变化的部分。

    采用了 $ c_u(t) $ 之后,baseline predictorQuiz 数据集上的 RMSE 下降到了 0.9555

    有意思的是,这个不包含user-item 交互的基准模型得到了和 Netflix Cinematch 推荐系统几乎相同的效果,后者在 Quiz 数据集上的 RMSE0.9514

    这种思考方式是自顶向下拆解任务的模型:先判断影响任务的背后要素,然后对这些要素分别建模。

14.1.2 频次效应

  1. 我们位于另一个参赛小组的同事发现的规律引起了我们的注意:用户在给定日期的评分数量是当天数据变化的重要因素。

    令 $ F_{u,i} $ 为用户 $ u $ 在日期 $ t_{u,i} $ 上评分的数量,则它就是当天的评分频次。考虑到不同用户的频次差异非常大,我们采用对数之后四舍五入,即 $ f_{u,i} = \lfloor \log_a F_{u,i}\rfloor $ , $ a $ 为超参数。

    有意思的是:即使 $ f_{u,i} $ 完全由用户 $ u $ 驱动,它也会影响 item bias 而不是 user bias 。其原因在后面解释。因此,对于每个item $ i $ ,我们定义变量 $ b_{i,f} $ ,它捕获 item $ i $ 在对数频次 $ f $ 上的bias 。因此baseline predictor 进一步改进为:

    $ b_{u,i} = \mu +b_u + \alpha_u\times \text{dev}_u(t_{u,i}) + b_{u,t_{u,i}} +\left( b_i + b_{i,\text{Bin}(t_{u,i})}\right)\times c_u(t_{u,i}) + b_{i,f_{u,i}} $

    我们注意到:将 $ b_{i,f_{u,i}} $ 乘以 $ c_u(t_{u,i}) $ 也是有道理的,因为这表示对bias 的范围进行约束。但是我们并未在实际中应用,也没有对此展开实验。

  2. 将频次项添加到 item bias 中的效果非常明显,baseline predictorQuiz 数据集上的 RMSE0.9555 下降到了 0.9278 。这已经优于原始的 Netflix Cinematch 算法。

    对于 baseline predictor 无论它多么准确,都无法产生个性化的推荐,因为它没有包含任何 user-item 之间的交互。从某种意义上讲,它捕获了与个性化推荐不太相关的数据部分,这使得后续的个性化推荐模型能够使用更加干净、更加高质量的数据,从而产生更好的推荐。

  3. 频次为什么效果好?为观察频次贡献的来源,我们有两个经验洞察:

    • 首先可以看到:对于单独的 baseline predictor,引入频次项的效果非常强大。但是在后面我们将会看到,它们在完整的 predictor 中贡献小得多。当添加了 user-item 交互项(矩阵分解方法或邻域方法)时,它们的大部分收益都会消失。
    • 其次,频次与item bias 配合使用时似乎有所帮助,但是与 user bias 配合使用时却毫无帮助。
  4. 频次有助于区分用户对大量电影进行评分的日期,通常这些评分日期和用户观看电影的日期有一定的距离,这使得评分日期的评分和观看日期的评分存在一定差异。我们认为:当用户进行大量评分时,用户仍然会反映其正常偏好,但是电影会呈现不对称的评分。

    • 某些电影被部分用户喜欢,并能很长时间内记住(印象深刻);但是另一部分用户不喜欢它们,并逐渐遗忘掉,即沉默的负样本。因此,只有非常喜欢它们的用户才会在观看日期之后一段时间对其进行评分,而不喜欢它们的用户则压根不会想起它们。

      这在热门电影上表现得非常明显,即:要么被用户喜欢且记忆深刻,要么被用户遗忘或忽略。

    • 某些电影很糟糕,不喜欢它们的用户总是做出负面评价;但是另一部分喜欢的用户会逐渐将其遗忘,即沉默的正样本。因此,在观看电影很长时间之后,只有不喜欢该电影的用户才对其进行评分。

    这就解释了这种 bias 和电影相关联,和用户无关联。这也解释了为什么当添加了 user-item 交互项时,大多数效果消失了:这些交互项已经 “了解” 用户对于电影是喜欢还是不喜欢。

    因此,我们假设高频次并不能代表用户偏好的较大变化,但是我们假设大多数情况下高频次会对电影的频分带来bias :有些电影会带来大量的正面评价(沉默的负样本)、有些电影会带来大量的负面评价(沉默的正样本)。

  5. 进一步验证我们的假设具有实际意义。如果频次确实代表了选择性的偏见biased selection,则应该将它们视为噪声,并在进行推荐的时候分离出来。即:训练的时候考虑频次项,但是推荐的时候剔除这一项。因为我们考虑的是:给用户推荐的时候,用户的当时的评价(而不是经过一段时间之后)。

14.1.3 预测未来

  1. 我们的模型包含大量的day-specific 具体于日期的参数,如 $ b_{u,t_{u,i}}, c_{u,t_{u,i}},b_{i,f_{u,i}}, b_{i,\text{Bin}(t_{u,i})} $ 。在训练期间我们可以从训练数据中学得它们的值,但是在预测期间,尤其时在未来的日期(如明天),如何选择它们的取值?比如在训练集中 $ t_{u,i} $ 最大为300,但是预测时 $ t_{u,i} = 301 $ 。

    一种简单的方法是:将这些具体于日期的参数设为默认值,如 $ c_{u,t_{u,i}} $ 默认为零, $ b_{u,t_{u,i}} $ 默认为零。

  2. 一个问题是:如果我们不能用这些具体于日期的参数来预估未来的评分,那么它们存在的意义是什么?我们大费周章的建立模型、训练参数,结果在预测期间将它们都置为零,似乎这些参数存在的意义不大。

    事实上,我们对时间的建模并未尝试捕获未来的变化,它捕获的是短时效应,这些短时效应对用户的历史反馈产生了重大影响。当模型识别出这类影响时,必须对其进行打压以便让我们能够对更长期的信号进行建模。这使得我们的模型可以更好的捕获数据的长期特征,同时让这些day-specific 参数吸收掉短期的波动。

    因此,day-specific 参数完成了训练数据的清理,从而改善了模型对将来的预测。

14.1.4 混合模型

  1. 我们最终的混合模型包含了时间效应的 baseline predictor

    $ b_{u,i} = \mu +b_u + \alpha_u\times \text{dev}_u(t_{u,i}) + b_{u,t_{u,i}} +\left( b_i + b_{i,\text{Bin}(t_{u,i})}\right)\times c_u(t_{u,i}) $

    为学习参数 $ b_u,\alpha_u,b_{u,t},b_i,b_{i,\text{Bin}(t)},c_u,c_{u,t} $ 我们最小化目标函数,并通过随机梯度下降法来优化:

    $ \mathcal L = \sum_{(u,i)\in \mathcal K}\left (r_{u,i} - \mu-b_u - \alpha_u\times \text{dev}_u(t_{u,i}) - b_{u,t_{u,i}} -\left( b_i + b_{i,\text{Bin}(t_{u,i})}\right)\times (c_u+c_{u,t_{u,i}}) \right )^2 +\\ \lambda_1 b_u^2+\lambda_2 \alpha_u^2 + \lambda_3b_{u,t_{u,i}}^2 + \lambda_4 b_i^2+\lambda_5 b_{i,\text{Bin}(t_{u,i})}^2+\lambda_6(c_u-1)^2 +\lambda_7 c_{u,t_{u,i}}^2 $

    我们对每个参数都是用独立的学习率、对每个参数使用独立的正则化系数:

    注意: $ c_u $ 的正则化尽可能接近 1.0,其它正则化则尽可能接近 0.0 。另外,除了 $ c_u $ 的初始值为 1.0 之外, 所有其它参数的初始化值为 0.0

    predictorQuiz 数据集上的 RMSE0.9555

  2. 我们最终的混合模型包含了频次效应的 baseline predictor

    $ b_{u,i} = \mu +b_u + \alpha_u\times \text{dev}_u(t_{u,i}) + b_{u,t_{u,i}} +\left( b_i + b_{i,\text{Bin}(t_{u,i})}\right)\times c_u(t_{u,i}) + b_{i,f_{u,i}} $

    我们也是用随机梯度下降进行优化,并使用独立的学习率、正则化系数。

    对于超参数 $ a $ 我们选择为 6.76

    predictorQuiz 数据集上的 RMSE0.9278 。我们将这个模型记作 [PQ1]

14.2 MF Predictor

  1. MF 模型假设每个用户 $ u $ 关联一个用户因子向量 $ \mathbf{\vec p}_u\in \mathbb R^d $ ,每个item $ i $ 关联一个item 因子向量 $ \mathbf{\vec q}_i\in \mathbb R^d $ , $ d $ 为向量的维度。另外,可以将 $ \mathbb N_u $ 视为用户 $ u $ 隐式反馈的item 集合(知道有评分,但是不知道评分的具体取值)。因此,每个 item $ i $ 还关联一个 item 隐式反馈因子向量 $ \mathbf{\vec y}_j\in \mathbb R^d $ 。

    进一步的,我们考虑时间效应,即:用户的偏好随着时间改变,即 $ \mathbf{\vec p}_u(t) $ 。这里我们认为item 的特质是时不变的。因此得到 timeSVD ++ 模型:

    $ \hat r_{u,i} = b_{u,i} + \mathbf{\vec q}_i\cdot \left(\mathbf{\vec p}_u(t_{u,i}) + |\mathbb N_u|^{-1/2}\sum_{j\in \mathbb N_u} \mathbf{\vec y}_j\right) $

    其中 $ b_{u,i} $ 为考虑时间效应的 baseline predictor

    $ b_{u,i} = \mu +b_u + \alpha_u\times \text{dev}_u(t_{u,i}) + b_{u,t_{u,i}} +\left( b_i + b_{i,\text{Bin}(t_{u,i})}\right)\times c_u(t_{u,i}) $

    注意:这里的归一化形式为 $ |\mathbb N_u|^{-\alpha} $ ,我们选择了 $ \alpha = \frac 12 $ 。

  2. 我们对 $ \mathbf{\vec p}_u(t) $ 的每个分量进行建模:

    $ \mathbf{\vec p}_u(t) = \left(p_{u,1}(t),\cdots,p_{u,d}(t)\right)^T $

    类似于user bias ,我们有:

    $ p_{u,k}(t) = p_{u,k} + \alpha_{u,k}\times \text{dev}_u(t) + p_{u,k,t} $

    其中:

    • $ p_{u,k} $ 捕获了用户因子的时不变部分,即用户兴趣的稳定部分。
    • $ \alpha_{u,k}\times \text{dev}_u(t) $ 捕获了用户因子的时间线性变化部分,即用户兴趣的长期变化部分。
    • $ p_{u,k,t} $ 捕获了用户因子的瞬时变化部分,即用户的兴趣的 day-specific 部分。

    我们还可以使用内存效率更高的版本,此时没有 day-specific 部分:

    $ p_{u,k}(t) = p_{u,k} + \alpha_{u,k}\times \text{dev}_u(t) $
  3. 我们还可以引入频次效应。由于频次会影响电影的感知,因此我们尝试将频次诸如到 item 因子向量中。因此,我们为每个电影因子建立另一个版本:

    $ \hat r_{u,i} = b_{u,i} +\left(\mathbf{\vec q}_i + \mathbf{\vec q}_{i,f_{u,i}}\right)\cdot \left(\mathbf{\vec p}_u(t_{u,i}) + |\mathbb N_u|^{-1/2}\sum_{j\in \mathbb N_u} \mathbf{\vec y}_j\right) $

    这里 $ b_{u,i} $ 为引入频次效应的 baseline predictor

    $ b_{u,i} = \mu +b_u + \alpha_u\times \text{dev}_u(t_{u,i}) + b_{u,t_{u,i}} +\left( b_i + b_{i,\text{Bin}(t_{u,i})}\right)\times c_u(t_{u,i}) + b_{i,f_{u,i}} $

    这里 $ \mathbf{\vec q}_{i,f_{u,i}} = (q_{i,1,f_{u,i}},\cdots,q_{i,d,f_{u,i}})\in \mathbb R^d $ 。

    注意:虽然引入了频次效应的 item bias 效果非常显著,但是引入了频次效应的 item 因子(即 $ \mathbf{\vec q}_{i,f_{u,i}} $ )的增益非常小。

  4. 我们在最终混合模型中包含了矩阵分解的多个变种。所有模型都是通过直接应用于原始数据的随机梯度下降来学习,无需任何预处理或后处理。

    在对模型混合的过程中,我们发现 每个predictor 的过拟合是有益的。即:让每个 predictor 训练更长的step , 从而对训练集过拟合。

    • 第一个MF predictor 为:

      $ \hat r_{u,i} = b_{u,i} + \mathbf{\vec q}_i\cdot \left(\mathbf{\vec p}_u(t_{u,i}) + |\mathbb N_u|^{-1/2}\sum_{j\in \mathbb N_u} \mathbf{\vec y}_j\right)\\ p_{u,k}(t) = p_{u,k} + \alpha_{u,k}\times \text{dev}_u(t) $

      bias 相关参数的学习率和正则化系数如下:

      对于因子向量 $ \mathbf{\vec p}_u,\mathbf{\vec q}_i,\mathbf{\vec y}_j $ ,我们使用 0.0015 的正则化系数,初始学习率为 0.008 并以 0.9 的衰减系数在每轮迭代中衰减。 对于 $ \alpha_{u,k} $ ,其学习率为 1e-5 ,正则化系数为 50

      predictor 的三个变种,以及各自在 Quiz 数据集上的 RMSE 为:

      
      
      xxxxxxxxxx
      31 d=20, 迭代step = 40, RMSE = 0.89142 d=200, 迭代step = 40, RMSE = 0.88143 d=500, 迭代step = 50, RMSE = 0.8815
    • 第二个MF predictor 为:

      $ \hat r_{u,i} = b_{u,i} + \mathbf{\vec q}_i\cdot \left(\mathbf{\vec p}_u(t_{u,i}) + |\mathbb N_u|^{-1/2}\sum_{j\in \mathbb N_u} \mathbf{\vec y}_j\right)\\ p_{u,k}(t) = p_{u,k} + \alpha_{u,k}\times \text{dev}_u(t) + p_{u,k,t} $

      $ p_{u,k,t} $ 的学习率为 0.004,正则化系数为 0.001。其它参数的学习率和正则化系数如前所述。每个 predictor 也针对训练集过拟合。

      predictor 的两个变种,以及各自在 Quiz 数据集上的 RMSE 为:

      
      
      xxxxxxxxxx
      21 d=200, 迭代step = 80, RMSE = 0.88252 d=500, 迭代step = 110, RMSE = 0.8841
    • 第三个MF predictor 为:

      $ \hat r_{u,i} = b_{u,i} +\left(\mathbf{\vec q}_i + \mathbf{\vec q}_{i,f_{u,i}}\right)\cdot \left(\mathbf{\vec p}_u(t_{u,i}) + |\mathbb N_u|^{-1/2}\sum_{j\in \mathbb N_u} \mathbf{\vec y}_j\right)\\ p_{u,k}(t) = p_{u,k} + \alpha_{u,k}\times \text{dev}_u(t) + p_{u,k,t} $

      $ \mathbf{\vec q}_{i,f_{u,i}} $ 的学习率为 2e-5 ,正则化系数为 0.02 。其它参数的学习率和正则化系数如前所述。每个 predictor 也针对训练集过拟合。

      predictor 的六个变种,以及各自在 Quiz 数据集上的 RMSE 为:

      
      
      xxxxxxxxxx
      61 d = 200, 迭代step =40, RMSE=0.87772 d = 200, 迭代step =60, RMSE=0.87873 d = 500, 迭代step =40, RMSE=0.87694 d = 500, 迭代step =60, RMSE=0.87845 d = 1000, 迭代step =80, RMSE=0.87926 d = 2000, 迭代step =40, RMSE=0.8762

      我们将其中 $ d=200 $ 以及迭代step40 的变种记作 [PQ2]

14.3 Neighborhood Predictor

  1. 除了矩阵分解之外,邻域模型也是协同过滤常用的方法。尽管邻域方法的准确性通常不如矩阵分解方法,但是邻域方法具有可解释性、对新输入的评分无需重新训练模型等优点而受到欢迎。

    邻域模型通常分为Userbased CFItembased CF,这里我们主要基于Itembased CF

    我们考虑邻域模型:

    $ \hat r_{u,i} = b_{u,i} + |\mathbb I_u|^{-1/2} \sum_{j\in \mathbb I_u}(r_{u,j}-\tilde b_{u,j})w_{i,j} + |\mathbb N_u|^{-1/2} \sum_{j\in \mathbb N_u} c_{i,j} $

    其中:

    • $ b_{u,i} $ 为 baseline predictor ,它给出了 user-item 交互以外的预估部分。

    • $ w_{i,j} $ 为基于显式反馈得到的 item-item 相似度。

    • $ \tilde b_{u,j} $ 为根据经验公式得到的基准预估:

      $ \tilde b_i = \frac{\sum_{u\in \mathbb U_i}(r_{u,i} - \mu)}{\lambda_1 + |\mathbb U_i|}\quad \tilde b_u = \frac{\sum_{i\in \mathbb I_u}(r_{u,i} - \mu - \tilde b_i)}{\lambda_2 + |\mathbb I_u|}\\ \tilde b_{u,i} = \mu +\tilde b_u + \tilde b_i $
    • $ c_{i,j} $ 为基于隐式反馈得到的 item-item 相似度。这里它和 $ w_{i,j} $ 的主要区别在于:在计算隐式反馈时仅考虑是否产生评分,而不考虑评分的具体数值。

      事实证明使用两组相似度是有益的:一组 $ w_{i,j} $ 与评分值相关;另一组 $ c_{i,j} $ 与是否评分相关。

    注意:这里的相似度 $ w_{i,j},c_{i,j} $ 以及baseline predictor $ b_{u,i} $ 中的 biase 都是从数据中学到。

  2. 当考虑时间效应时,需要考虑两个部分:

    • 一个是 baseline predictor ,它解释了大多数观测到的信号。这部分和因子模型没有什么区别,可以根据下面两种方式来考虑时间效应。

      $ b_{u,i} = \mu +b_u + \alpha_u\times \text{dev}_u(t_{u,i}) + b_{u,t_{u,i}} +\left( b_i + b_{i,\text{Bin}(t_{u,i})}\right)\times c_u(t_{u,i})\\ b_{u,i} = \mu +b_u + \alpha_u\times \text{dev}_u(t_{u,i}) + b_{u,t_{u,i}} +\left( b_i + b_{i,\text{Bin}(t_{u,i})}\right)\times c_u(t_{u,i}) + b_{i,f_{u,i}} $
    • 另一个是捕获user-item 交互的部分,这部分需要采用不同的时间效应处理策略。

      item-item 相似度 $ w_{i,j},c_{i,j} $ 反映了item 的固有属性,因此不会随着时间变化。因此学习过程应该确保它们能够捕获无偏的长期价值,而不会受到漂移drifting 的影响。

      实际上如果处理不当,数据的时变性质 time-changing nature 会掩盖很多长时间的 item-item 关系:

      • 一方面, 如果用户在短时间内将 item $ i,j $ 都给予很高的评分,这使得它们的相似度很高从而具有较高的 $ w_{i,j} $ 。
      • 另一方面,如果用户在很长时间(如3 年)内将 item 都给予很高的评分,则由于用户的口味很可能发生变化,因此这两个item 之间可能没有任何关系。这时它们应该具有较低的相似度从而具有较低的 $ w_{i,j} $ 。

      因此我们考虑同一个用户 $ u $ 评价的两个item 之间的相似性进行时间衰减加权:时间间隔越大权重越小,时间间隔越小权重越大。这里我们考虑指数时间衰减:

      $ \exp(-\beta_u\times \Delta t) $

      其中 $ \beta_u $ 控制了用户 $ u $ 的衰减系数,并且从数据中学习。

    最终我们考虑时间效应的ItemBased CF 模型为:

    $ \hat r_{u,i} = b_{u,i}(t_{u,i})+ |\mathbb I_u|^{-1/2}\sum_{j\in \mathbb I_u}\exp(-\beta_u|t_{u,i} - t_{u,j}|)\times\left((r_{u,j} - \tilde b_{u,j})w_{i,j}\right) \\+ |\mathbb N_u|^{-1/2} \sum_{j\in \mathbb N_u} \exp(-\beta_u|t_{u,i} - t_{u,j}|)\times c_{i,j} $

    我们采用随机梯度下降法来最优化带正则化的平方误差代价函数,与bias 相关参数的学习率、正则化系数如前所述。这里 $ w_{i,j},c_{i,j} $ 的学习率都为 0.005,正则化系数为 0.002。 $ \beta_u $ 使用了一个非常小的学习率 1e-7,正则化系数为 0.01

  3. 我们还尝试了其它的时间衰减模式,如对计算更友好的 $ (1+\beta_u\Delta t)^{-1} $ ,这导致了相同的准确率并大大降低了训练时间。

  4. 引入时间效应之后,邻域模型的准确率得到提高。相比静态领域模型,考虑时间的邻域模型在 Quiz 数据集上的 RMSE0.9002 降低到了 0.8870

    从某种角度来看,通过使用混合方法,其结果甚至比报告的结果要更好。如:在其它算法的残差上应用邻域方法,比如在 baseline predictor 的残差上。

  5. 我们从中得到的一个经验教训是:与设计更复杂的模型相比,解决数据中的时间动态性可能对结果准确性产生更大的影响。

  6. 我们在最终混合模型中包含了邻域分解的多个变种。

    • 第一个 Neighborhood Predictor 为:

      $ b_{u,i} = \mu +b_u + \alpha_u\times \text{dev}_u(t_{u,i}) + b_{u,t_{u,i}} +\left( b_i + b_{i,\text{Bin}(t_{u,i})}\right)\times c_u(t_{u,i})\\ \hat r_{u,i} = b_{u,i}(t_{u,i})+ |\mathbb I_u|^{-1/2}\sum_{j\in \mathbb I_u}\exp(-\beta_u|t_{u,i} - t_{u,j}|)\times\left((r_{u,j} - \tilde b_{u,j})w_{i,j}\right) \\+ |\mathbb N_u|^{-1/2} \sum_{j\in \mathbb N_u} \exp(-\beta_u|t_{u,i} - t_{u,j}|)\times c_{i,j} $

      predictor 的三个变种,以及各自在 Quiz 数据集上的 RMSE 为:

      
      
      xxxxxxxxxx
      31 迭代 step = 20, RMSE = 0.88872 迭代 step = 25, RMSE = 0.88853 迭代 step = 30, RMSE = 0.8887

      最终迭代2030 次的变种进入到最终混合模型中。

    • 第二个 Neighborhood Predictor 为:

      $ b_{u,i} = \mu +b_u + \alpha_u\times \text{dev}_u(t_{u,i}) + b_{u,t_{u,i}} +\left( b_i + b_{i,\text{Bin}(t_{u,i})}\right)\times c_u(t_{u,i}) + b_{i,f_{u,i}}\\ \hat r_{u,i} = b_{u,i}(t_{u,i})+ |\mathbb I_u|^{-1/2}\sum_{j\in \mathbb I_u}\exp(-\beta_u|t_{u,i} - t_{u,j}|)\times\left((r_{u,j} - \tilde b_{u,j})w_{i,j}\right) \\+ |\mathbb N_u|^{-1/2} \sum_{j\in \mathbb N_u} \exp(-\beta_u|t_{u,i} - t_{u,j}|)\times c_{i,j} $

      我们使用随机梯度下降法迭代 20 步,在 Quiz 数据集上的 RMSE0.8870 。该predictor 被记作 [PQ3]

  7. 我们还尝试扩展了邻域模型:添加一个没有归一化的item-item 相似性 $ d_{i,j} $ :

    $ \hat r_{u,i} = b_{u,i}+ |\mathbb I_u|^{-1/2}\sum_{j\in \mathbb I_u}\exp(-\beta_u|t_{u,i} - t_{u,j}|)\times \left((r_{u,j} - \tilde b_{u,j})w_{i,j}\right) \\ + |\mathbb N_u|^{-1/2} \sum_{j\in \mathbb N_u} \exp(-\beta_u|t_{u,i} - t_{u,j}|)\times c_{i,j} \\ + \sum_{j\in \mathbb I_u} \exp(-\gamma_u|t_{u,i} - t_{u,j}|)\times((r_{u,j} - \tilde b_{u,j})d_{i,j}) $

    我们认为同一个用户给出的评分都比较相似,因此 $ \gamma_u $ 使用较高的初始值0.5 来初始化(相比而言 $ \beta_u $ 采用 0.0 来初始化)。对于 $ d_{i,j} $ 我们使用较慢的学习率 1e-5

    我们采用随机梯度下降法迭代 25 步,最终在 Quiz 数据集上的 RMSE0.8881 。我们认为:如此微不足道的RMSE 收益并不能证明第三个 item-item 相似度 $ d_{i,j} $ 的引入是合理的。

    predictor 也包含在最终的 blend 中。

14.4 RBM 扩展

  1. 我们扩展了受限玻尔兹曼机 Restricted Boltzmann Machines:RBM 模型。原始模型通过使隐单元成为当前用户对电影评分的条件,从而显著提升性能。但我们发现,通过调节可见单元也可以达到类似的显著性能提升。

    直观的讲,每个RMB 可见单元都对应于一个特定电影,因此它们的 bias 代表了电影bias 。但是我们知道其它类型的 bias 在数据中更为重要,即 user biassingle-day user bias 、以及 frequency-based movie bias 。因此我们根据当前用户和日期,把这些bias 添加到可见单元。

    首先,我们使用条件多项式分布对观察到的二元评分矩阵 $ \mathbf V $ 的每一列进行建模:

    $ p(v_i^k = 1 \mid \mathbf{\vec h}) = \frac{\exp(b_i^k + \sum_{j=1}^F h_j W_{i,j}^k)}{\sum_{l=1}^5 \exp(b_i^l + \sum_{j=1}^F h_j W_{i,j}^l)} $

    其中:

    • $ \mathbf{\vec h} = (h_1,\cdots,h_F)^T $ 为隐向量, $ F $ 为隐单元数量。

    • $ v_i^k $ 表示对item $ i $ 评分为 $ k, k\in \{1,2,\cdots,5\} $ , $ \mathbf V $ 为:

      $ \mathbf V = \begin{array} {c|ccccc} n & \text{score=1} & \text{score=2}& \text{score=3} &\text{score=4}&\text{score=5} \\ \text{item 1} & \hline 1 & 0 &0 & 0&0\\ \text{item 2} & 0 &1 & 0&0&0\\ \vdots&\vdots&\vdots&\vdots&\vdots&\vdots\\ \text{item n} &0 & 0 & 0&1&0 \end{array} $
    • $ b_i^k $ 和 $ W_{i,j}^k $ 对应于模型的 bias 和权重。

    我们扩展了原始的条件分布。令当前的用户为 $ u $ ,当前的日期为 $ t $ ,则我们添加了user-date bias

    $ p(v_i^k = 1 \mid \mathbf{\vec h},u,t) = \frac{\exp(b_{u,t}^k + b_u^k + b_i^k + \sum_{j=1}^F h_j W_{i,j}^k)}{\sum_{l=1}^5 \exp(b_{u,t}^l + b_u^l + b_i^l + \sum_{j=1}^F h_j W_{i,j}^l)} $

    其中 $ b_u^k $ 为 user-specific 参数, $ b_{u,t}^k $ 为 user-date-specific 参数。

    我们通过随机梯度下降来训练模型,其中 $ b_u^k $ 的学习率为 0.0025, $ b_{u,t}^k $ 的学习率为 0.008 。另外我们这里采用online 学习,即每次仅对一个训练样本进行更新。

    注意:除非另有说明,否则我们将使用原始论文中建议的相同学习率权重衰减 weight decay ,即 0.001

  2. 考虑到频次的显著影响,我们这里进一步考虑频次。假设用户 $ u $ 在日期 $ t $ 关联了一个评分频次 $ f $ ,则调整后的 RBM 为:

    $ p(v_i^k = 1 \mid \mathbf{\vec h},u,t,f) = \frac{\exp(b_{i,f}^k+ b_{u,t}^k + b_u^k + b_i^k + \sum_{j=1}^F h_j W_{i,j}^k)}{\sum_{l=1}^5 \exp(\exp(b_{i,f}^l+b_{u,t}^l + b_u^l + b_i^l + \sum_{j=1}^F h_j W_{i,j}^l)} $

    其中 $ b_{i,f}^k $ 是一个 movie-frequency-specific 变量,其学习率为 0.0002 。这里也采用 online learning

  3. 受到 Pragmatic Theory 团队的启发,我们在使用频次时,也对visible - hidden 权重进行修改。我们使用 frequency-dependent 权重 $ W_{i,j,f}^k $ 来代替原始权重 $ W_{i,j}^k $ :

    $ W_{i,j,f}^k = W_{i,j}^k(c+C_{f,j}) $

    我们通过online-learning 来学习新的参数 $ C_{f,j} $ ,其学习率为 1e-5

    但是事实证明:当存在 frequency-bias 时,权重的这种扩展几乎不会提高性能,并且还提高了训练时间,因此我们不太推荐。但是这仍然是我们frequency-aware RBM 实现的一部分。

  4. 受到 day-specific 用户因子(即 $ p_{u,k}(t) = p_{u,k} + \alpha_{u,k}\times \text{dev}_u(t) + p_{u,k,t} $ )的影响,我们尝试创建 day-specific RBM 隐单元:在 $ F $ 个隐单元的基础上,我们还添加 $ G $ 个 day-specific 隐单元。如果一个用户在 $ r $ 个不同日期进行评分,则我们创建这 $ G $ 个 day-specific 隐单元的 $ r $ 个并行的拷贝,所有这些拷贝共享相同的 hidden-visible 权重、hidden biasconditional connection 。同样地,每个并行的拷贝仅连接到与其对应日期给出评分相应的可见单元。

    即:设当前日期为 $ t $ ,对应的 day-specific 隐单元为 $ j $ 。定义指示向量 $ \mathbf{\vec r}^t\in \{0,1\}^n $ 表示当前用户在日期 $ t $ 对哪些电影产生评分。

    因此建模用户特征的隐单元为:

    $ p(h_j=1\mid \mathbf V, \mathbf{\vec r}^t) = \sigma\left(b_j + \sum_{i=1}^n\sum_{k=1}^5 r_i^t v_i^kW_{i,j}^k + \sum_{i=1}^nr_{i}^t D_{i,j}\right) $

    在我们的实现中,我们将该模型和frequency-biased RBM 一起使用。所有该day-specfic 单元相关的参数都是通过mini-batch 随机梯度下降来学习,学习率为 0.005,权重衰减为 0.01

    事实表明,这种方法的效果不大理想,并且需要进一步完善。

  5. 我们在最终混合模型中包含了RBM的多个变种。

    • 第一个 RBM Predictor 为:

      $ p(v_i^k = 1 \mid \mathbf{\vec h},u,t) = \frac{\exp(b_{u,t}^k + b_u^k + b_i^k + \sum_{j=1}^F h_j W_{i,j}^k)}{\sum_{l=1}^5 \exp(b_{u,t}^l + b_u^l + b_i^l + \sum_{j=1}^F h_j W_{i,j}^l)} $

      根据我们的参数配置,RBM 通常在 Quiz 数据集上大约迭代 60~90 轮就可以收敛。但是为了最终的模型混合我们继续对训练集训练从而过拟合。

      predictor 的四个变种,以及各自在 Quiz 数据集上的 RMSE 为:

      
      
      xxxxxxxxxx
      41 F=200, 迭代 step = 52, RMSE = 0.89512 F=200, 迭代 step = 62, RMSE = 0.89423 F=400, 迭代 step = 82, RMSE = 0.89444 F=400, 迭代 step = 100, RMSE = 0.8952

      最终迭代2030 次的变种进入到最终混合模型中。

    • 第一个 RBM Predictor 为:

      $ p(v_i^k = 1 \mid \mathbf{\vec h},u,t,f) = \frac{\exp(b_{i,f}^k+ b_{u,t}^k + b_u^k + b_i^k + \sum_{j=1}^F h_j W_{i,j}^k)}{\sum_{l=1}^5 \exp(\exp(b_{i,f}^l+b_{u,t}^l + b_u^l + b_i^l + \sum_{j=1}^F h_j W_{i,j}^l)} $

      predictor 的两个变种,以及各自在 Quiz 数据集上的 RMSE 为:

      
      
      xxxxxxxxxx
      21 F = 200, 迭代 step =90, RMSE=0.89282 F = 200, 迭代 step =140, RMSE=0.8949

      这两个变种分别称作 [PQ4]PQ[5]

  6. 有意思的是:仅仅通过RBM 最好的结果是 RMSE=0.8928 ,但是通过利用 kNN 来进一步拟合 RBM 的残差,则可以进一步显著降低 RMSE。但是,我们并未针对这个现象进行专门的试验。

  7. 最后,一个具有 50 个隐单元,以及 50day-specific 隐单元的 RBM 迭代 70 轮,产生的 RMSE = 0.9060 。该模型被称作 [PQ6]

14.5 GBDT 混合

  1. Netflix 数据集上获得有竞争力的结果,其关键在于使用精细sophisticated 的混合方案blending scheme 。这些混合方案将很多单独的 predictor 合并为最终的解决方案solution

  2. 我们的混合技术应用于三组不同的 predictor

    • 第一组由 454predictor 组成,代表了 BellKorPagmatic Chaos 小组的所有 predictor。 它们匹配了 ProbeQualifying 的结果。
    • 第二组由75predictor 组成,它们从前面 454predictor 中选择而来。
    • 第三组由 24predictor 组成,它们匹配了 ProbeQualifying 结果。
  3. 尽管通过挖掘数据的新特征可以在竞赛中取得重大突破,但是这些新特征越来越稀少(绝大多数好用的特征都已经被人们发现)并难以获取。当进入比赛尾声时我们意识到:即使是一些新颖和准确的 predictor(采用新特征、新模型),它也难以对混合结果产生重大影响。因为在上百个predictor 之间,单个 predictor 的影响太小。

    我们推断:通过探索新的混合技术,或改进现有的混合技术,可以获得更好的效果。混合技术提供了在很短的时间内以较低的代价来改善预测性能:

    • 首先,与单个predictor 不同,更好的混合技术与最终结果直接相关。
    • 其次,混合技术同时涉及多个predictor,而不是一次影响一个 predictor,影响范围更大。
  4. 我们利用 GBDT 来混合我们的众多 predictor ,我们将每个 predictor 的输出作为一路特征,并额外增加了四路特征:user support (用户所有评分的电影总数)、movie support (电影所有被评分的总数)、频次frequency (用户当天评分的电影总数)、评分日期(数据集中最早一个评分到当前的天数)。

    我们将 GBDT 应用于上述 454predictor75predictor。我们将 Probe 数据集用于训练 GBDT,并将其应用于 Qualifying 数据集。GBDT 的参数配置为 num_tree = 200tree_size=20、学习率 0.18、采样率 0.9 。最终得到 Quiz 数据集上的 RMSE 为:454predictorRMSE=0.860375predictorRMSE=75

    GBDT 应用在更小的 24predictor 上时,GBDT 的参数配置为 num_tree = 150tree_size=20、学习率 0.2、采样率 1.0 。最终得到 Quiz 数据集上的 RMSE0.8664

    注意:我们的实验并未对GBDT 的四个参数(num_tree 子树的数量、tree_size 子树大小、学习率、样本采样率)进行敏感性分析。

  5. 引入用户和电影的聚类也是有益的,这可以在 GBDT 中引入用户或电影的 “类别” 特征(即用户/电影是属于哪个类簇)。

    我们可以根据用户的 user support 将用户分为多个桶,然后同一个桶内的用户视为同一个粗。由于我们在 GBDT 中已经增加了用户支持度特征,因此这一能力已经被 GBDT 实现:GBDT 本身就有分桶并划分样本到各个桶的能力。

    但是,我们也可以引入其它类型的聚类,如:根据矩阵分解模型计算用户因子向量,然后根据用户因子向量来聚类。item 因子向量也可以类似地进行聚类。

    我们在24predictorGBDT 中实验了以下三种聚类形式:

    • timeSVD ++ 模型中得到因子向量: $ \hat r_{u,i} = b_{u,i} +\left(\mathbf{\vec q}_i + \mathbf{\vec q}_{i,f_{u,i}}\right)\cdot \left(\mathbf{\vec p}_u(t_{u,i}) + |\mathbb N_u|^{-1/2}\sum_{j\in \mathbb N_u} \mathbf{\vec y}_j\right) $ ,其中维度 $ d=20 $ 。

      另外所有的单个bias 项都作为GBDT 的特征。

      另外,每个user-item 组合 $ (u,i) $ ,我们增加了20 维的电影因子 $ \left(\mathbf{\vec q}_i + \mathbf{\vec q}_{i,f_{u,i}}\right) $ 、以及 20 维的用户因子 $ \left(\mathbf{\vec p}_u(t_{u,i}) + |\mathbb N_u|^{-1/2}\sum_{j\in \mathbb N_u} \mathbf{\vec y}_j\right) $ 作为 GBDT 的特征。

      最终导致模型的 RMSE = 0.8661

    • 然后我们采用具有 20 个隐单元的 RBM,隐向量作为用户的 embedding 来代替 timeSVD ++ 中的用户因子向量。电影的representation 仍然使用 timeSVD ++ 模型。最终导致模型的 RMSE 也是 0.8661

    • 最后,我们在 timeSVD++ 特征的基础上增加了 kNN 特征,即:对每对 $ (u,i) $ ,我们找到与 $ i $ 最相似的top 20 部电影,并由 $ u $ 对其进行评分。我们添加了这些电影的评分乘以对应的相似度作为额外的特征,这些相似度是通过归一化的 Pearson 相关性计算而来。最终模型的 RMSE 略微降低到 0.8860

  6. 上述的 GBDT 用于用户对电影评分的类别:1~5 一共五类。这是作为分类任务来处理。另一种用法是视为回归问题来处理。

    对每个用户,我们计算了由相应RBM50 个隐单元的值组成的 50 维特征向量。对每部电影,我们使用 GBDT 来将 50 维用户向量来拟合真实的用户评级,从而解决回归问题,最终 RMSE = 0.9248 。该模型记作 [PQ7]

14.6 总结

  1. 广泛的参与、广泛的新闻报道、许多出版物都反映了 Netflix 大奖赛的巨大成功。处理 “电影” 这个贴近老百姓身边的话题,绝对是一个好的开端。然而,由于以下几个因素,大赛最终取得了成功:

    • 第一个成功因素是在 Netflix 的组织方面。他们发布了一个珍贵的数据集,从而为推荐领域做出了巨大的贡献。

      除此之外,比赛的设计和进行都是完美的。例如,数据集规模正好符合目标:比同类型数据集大得多、更具代表性,但是又小到足以让任何拥有商业 PC 的人都能参与比赛。再举个例子,前面提到将数据集分为三个部分:Probe, Quiz, Test,这对于确保比赛的公平性至关重要。

    • 第二个成功因素是众多选手的广泛参与。该比赛引起了巨大的轰动,导致更多的人进一步参与。选手之间广泛有着的合作精神,他们在网络论坛和学术期刊上公开发表和讨论了他们的创新成果。这是一个大社区的共同进步,使得所有参与者的体验更加愉悦和高效。事实上,这提升了比赛的性质,比赛就像一场长距离马拉松,而不是一系列短距离冲刺。

    另一个有帮助的因素是运气。最突出的一个是 10% 提升目标的设定。这个数字的任何微小偏差都会使得比赛过于简单或者过于复杂从而难以进行。

    推荐系统科学是这场比赛的主要受益者。许多新人开始涉足该领域并做出了贡献,相关出版物数量明显激增,Netflix 数据集是该领域开发更好算法的直接催化剂。

    在众多新算法的贡献中,我想强调一个:那些不起眼的 baseline 预测器(或者 bias),它们捕获数据中的主要影响。当大多数文献集中于更复杂的算法方面,但是我们知道:对主要效应的精确处理,至少与提出突破性的模型同样重要。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文