数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
- 线性模型
- 支持向量机
- 朴素贝叶斯
- 决策树
- knn
- 集成学习
- 梯度提升树
- 数据预处理
- 模型评估
- 降维
- 聚类
- 半监督学习
- EM 算法
- 最大熵算法
- 隐马尔可夫模型
- 概率图与条件随机场
- 边际概率推断
- 主题模型
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- CRF ++
- lightgbm
- xgboost
- xgboost 使用指南
- scikit-learn
- spark
- numpy
- matplotlib
- matplotlib 使用指南
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
三、FM 模型 [2011]
-
推荐系统中的评级预测
rating prediction
主要依赖于以下信息:谁who
(哪个用户)对什么what
(哪个item
,如电影、新闻、商品)如何how
评级。有很多方法可以考虑关于who
(关于用户的人口统计信息,如年龄、性别、职业)、what
(关于item
属性的信息,如电影类型、产品描述文本的关键词)的附加数据。除了有关评级事件
rating event
中涉及的实体的此类数据之外,还可能存在有关评级事件发生当前情况的信息,例如当前位置location
、时间、周边的人、用户当前心情等等。这些场景信息通常称作上下文context
。因为从决策心理学知道一个人的环境和情绪确实会影响他们的行为,所以在推荐系统中利用上下文信息是可取的。上下文感知评级预测context-aware rating prediction
依赖于谁who
在何种上下文context
下如何how
评价什么what
的信息。经典的推荐系统方法不考虑上下文信息。一些方法执行数据的预处理
pre-processing
或后处理post-processing
,使得标准方法具有上下文感知能力。虽然这种临时解决方案可能在实践中起作用,但是它们的缺点是过程中的所有步骤都需要监督和微调。将各种输入数据统一到一个模型中的方法在这方面更为实用,理论上也更为优雅。目前,在预测准确性方面最灵活和最强的方法是
Multiverse Recommendation
,它依赖于Tucker
分解并允许使用任何离散型上下文categorical context
。然而,对于现实世界的场景,它的计算复杂度 $ O(d^K) $ 太高了,其中 $ d $ 是因子分解的维度, $ K $ 是所涉及变量的数量。在论文
《Fast Context-aware Recommendations with Factorization Machines》
中,作者提出了一种基于分解机Factorization Machine: FM
的上下文感知评级预测器。FM
包括并可以模拟推荐系统中最成功的方法,包括句子分解matrix factorizion: MF
、SVD++
、PITF
。-
作者展示了
FM
如何应用于各种上下文字段,包括离散型categorical
字段、离散集合set categorical
字段、实值real-valued
字段。相比之下,Multiverse Recommendation
模型只适合于离散型categorical
上下文变量。 -
除了建模的灵活性之外,
FM
的复杂度在 $ d $ 和 $ K $ 上都是线性的(即 $ O(dK) $ ),这允许使用上下文感知数据进行快速预测和学习。相比之下,Multiverse Recommendation
模型的复杂度是 $ P(d^K) $ ,在 $ d $ 上是多项式的。 -
为了学习
FM
模型的参数,论文提出了一种基于交替最小二乘法alternating least squares: ALS
的新算法。新算法在给定其它参数的情况下找到一个参数的最优解,并且在几次迭代之后找到所有参数联合最优解。和随机梯度下降
stochastic gradient descent: SGD
一样,新算法单次迭代的复杂度为 $ O(|\mathbb S|dK) $ ,其中 $ |\mathbb S| $ 为训练样本的数量。和
SGD
相比,新算法的主要优点是无需确定学习率。这在实践中非常重要,因为SGD
学习的质量在很大程度上取决于良好的学习率,因此必须进行代价昂贵的搜索。这对于ALS
来讲不是必需的。 -
最后,论文的实验表明:上下文感知
FM
可以捕获上下文信息并提高预测准确性。此外FM
在预测质量和运行时间方面都优于state-of-the-art
的方法Multiverse Recommendation
。
-
3.1 相关工作
-
推荐系统的大多数研究都集中在仅分析
user-item
交互的上下文无关方法上。在这里,矩阵分解matrix factorization: MF
方法非常流行,因为它们通常优于传统的knn
方法。也有研究将用户属性或
item
属性等元数据结合到预测中,从而扩展了矩阵分解模型。然而,如果存在足够的反馈数据,元数据对评分预测的强baseline
方法通常只有很少或者没有改善。这种用户属性/item
属性和上下文之间的区别在于:属性仅仅被附加到item
或者用户(例如,给电影附加一个流派的属性),而上下文被附加到整个评级事件(如,当评级发生时用户当时的心情)。和关于标准推荐系统的大量文献相比,上下文感知推荐系统的研究很少。最基本的方法是上下文预过滤
pre-filtering
和后过滤post-filtering
,其中应用标准的上下文无关推荐系统,并在应用推荐器recommender
之前基于感兴趣的上下文对数据进行预处理、或者对结果进行后处理。更复杂的方法是同时使用所有上下文和user-item
信息来进行预测。也有人建议将上下文视为动态的用户特征,即可以动态变化。另外有一些关于
item
预测的上下文感知推荐系统的研究,将推荐视为一个排序任务,而本文将推荐视为回归任务。 -
$ \hat y =f(u,i,c_3,\cdots,c_K) = \sum_{l_1=1}^{d_1}\cdots\sum_{l_K=1}^{d_K}b_{l_1,\cdots,l_K} \times\left[ v_{u,l_1}^{(U)}\times v_{i,l_2}^{(I)}\times \prod_{k=3}^Kv_{c_k,l_k}^{(C_k)}\right] $Multiverse Recommendation
基于Tucker
分解技术来直接分解用户张量、item
张量、所有离散上下文变量的张量,从而求解该问题。它将原始的评分矩阵分解为一个小的矩阵 $ \mathbf B $ 和 $ K $ 个因子矩阵 $ \mathbf V^{(k)} $ :其中:
$ \mathbf B\in \mathbb R^{d_1\times d_2\times\cdots\times d_K}\\ \mathbf V^{(U)} \in \mathbb R^{M \times d_1},\mathbf V^{(I)} \in \mathbb R^{N \times d_2},\mathbf V^{(C_k)} \in \mathbb R^{|\mathbb C_k| \times d_k} $这种方式存在三个问题:
- 计算复杂度太高:假设每个特征的维度都是 $ d $ ,则计算复杂度为 $ O(d^K) $ 。一旦上下文特征数量 $ K $ 增加,则计算复杂度指数型增长。
- 仅能对离散型
categorical
上下文特征建模:无法处理数值型特征、离散集合型categorical set
特征。 - 交叉特征高度稀疏:这里执行的是
K
路特征交叉(前面的POLY2
模型是两路特征交叉),由于真实应用场景中单个特征本身就已经很稀疏,K
路特征交叉使得数据更加稀疏,难以准确的预估模型参数。
-
Attribute-aware Recommendation
:与通用上下文感知方法的工作对比,对属性感知或专用推荐系统的研究要多得多。有一些工作可以处理用户属性和item
属性的矩阵分解模型的扩展,还有一些关于考虑时间效应的工作。然而,所有这些方法都是为特定问题设计的,无法处理我们在本工作中研究的上下文感知推荐的通用设置。当然,对于特定的和重要的问题(如时间感知推荐或属性感知推荐),专用模型的研究是有益的。但是另一方面,研究上下文感知的通用方法也很重要,因为它们提供了最大的灵活性,并且可以作为专用模型的强
baseline
。 -
Alternating Least Square Optimization
:对于矩阵分解模型,Bell
和Koren
提出了一种交替优化所有user factor
和所有item factor
的ALS
方法。由于所有user/item
的整个factor matrix
是联合优化的,因此计算复杂度为 $ O(d^3) $ 。标准ALS
的这种复杂度问题是SGD
方法在推荐系统文献中比ALS
更受欢迎的原因。Pilaszy
等人提出一个接一个地优化每个user/item
中的factor
,这导致ALS
算法复杂度为 $ O(d) $ ,因为避免了矩阵求逆。一次优化一个factor
的思路与我们将ALS
算法应用于FM
的思路相同。这两种方法仅适用于矩阵分解,因此无法处理任何上下文,例如我们提出的对所有交互进行建模的
FM
中的上下文。此外,我们的ALS
算法还学习了全局bias
和基本的1-way
效应。
3.2 模型
FM
模型是一个通用模型,它包含并可以模拟几个最成功的推荐系统,其中包括矩阵分解matrix factorization: MF
、SVD++
、PITF
。我们首先简要概述了FM
模型,然后详细展示了如何将其应用于上下文感知数据,以及在FM
中使用这种上下文感知数据会发生什么。最后我们提出了一种新的快速alternating least square: ALS
算法,和SGD
算法相比它更容易应用,因为它不需要学习率。
3.2.1 FM 模型
-
推荐系统面临的问题是评分预测问题。给定用户集合 $ \mathbb U=\{u_1,u_2,\cdots,u_M\} $ 、物品集合 $ \mathbb I = \{i_1,i_2,\cdots,i_N\} $ ,模型是一个评分函数:
$ f:\mathbb U\times \mathbb I\rightarrow \mathbb R $$ y=f(u,i) $ 表示用户 $ u $ 对物品 $ i $ 的评分。
其中已知部分用户在部分物品上的评分: $ \mathbb S \in \mathbb U\times \mathbb I, \forall (u,i)\in \mathbb S,\tilde y=f(u,i) $ 。目标是求解剩余用户在剩余物品上的评分:
$ \hat y = f(u,i) ,\;\forall(u,i) \in \complement_\mathbb S $其中 $ \complement_\mathbb S $ 为 $ \mathbb S $ 的补集。
-
通常评分问题是一个回归问题,模型预测结果是评分的大小。此时损失函数采用
MAE/MSE
等等。也可以将其作为一个分类问题,模型预测结果是各评级的概率。此时损失函数是交叉熵。
-
当评分只有
0
和1
时,这表示用户对商品 “喜欢/不喜欢”,或者 “点击/不点击”。这就是典型的点击率预估问题。
-
-
事实上除了已知部分用户在部分物品上的评分之外,通常还能够知道一些有助于影响评分的额外信息。如:用户画像、用户行为序列等等。这些信息称作上下文
context
。对每一种上下文,我们用变量 $ c \in \mathbb C $ 来表示, $ \mathbb C $ 为该上下文的取值集合。假设所有的上下文为 $ \mathbb C_3,\cdots,\mathbb C_K $ ,则模型为:
$ f:\mathbb U\times \mathbb I \times \mathbb C_3\times\cdots\times\mathbb C_K\rightarrow \mathbb R $上下文的下标从
3
开始,因为可以任务用户 $ u $ 和商品 $ i $ 也是上下文的一种。如下图所示为评分矩阵,其中:
$ \mathbb U = \{\text{A},\text{B},\text{C}\},\quad \mathbb I = \{\text{TI},\text{NH},\text{SW},\text{ST}\}\\ \mathbb C_3 = \{\text{S},\text{N},\text{H}\},\quad \mathbb C_4 = \{\text{A},\text{B},\text{C}\}\\ y\in \{1,2,3,4,5\} $所有离散特征都经过
one-hot
特征转换。 -
上下文特征
context
类似属性property
特征,它和属性特征的区别在于:-
属性特征是作用到整个用户(用户属性)或者整个物品(物品属性),其粒度是用户级别或者物品级别。
如:无论用户 “张三” 在在评分矩阵中出现多少次,其性别属性不会发生改变。
-
上下文特征是作用到用户的单个评分事件上,粒度是事件级别,包含的评分信息更充足。
如:用户 ”张三“ 在评价某个电影之前已经看过的电影,该属性会动态改变。
事实上属性特征也称作静态画像,上下文特征也称作动态画像。业界主流的做法是:融合静态画像和动态画像。
另外,业界的经验表明:动态画像对于效果的提升远远超出静态画像。
-
-
和
POLY2
相同FM
也是对二路特征交叉进行建模,但是FM
的参数要比POLY2
少得多。将样本重写为:
$ \mathbf{\vec x} =(x_1,x_2,x_3,\cdots,x_K)^T =(u,i,c_3,\cdots,c_K)^T $则
$ \hat y(\mathbf{\vec x}) = w_0 + \sum_{i=1}^K w_i\times x_i + \sum_{i=1}^K\sum_{j=i+1}^K \hat w_{i,j}\times x_i\times x_j $FM
模型为:其中 $ \hat w_{i,j} $ 是交叉特征的参数,它由一组参数定义:
$ \hat w_{i,j} = <\mathbf{\vec v}_i,\mathbf{\vec v}_j> = \sum_{l=1}^d v_{i,l}\times v_{j,l} $即:
$ \hat{\mathbf W} = \begin{bmatrix} \hat w_{1,1}& \hat w_{1,2}&\cdots&\hat w_{1,K}\\ \hat w_{2,1}& \hat w_{2,2}&\cdots&\hat w_{2,K}\\ \vdots & \vdots&\ddots&\vdots\\ \hat w_{K,1}& \hat w_{K,2}&\cdots&\hat w_{K,K}\\ \end{bmatrix} = \mathbf V^T\mathbf V = \begin{bmatrix} \mathbf{\vec v}_1^T\\ \mathbf{\vec v}_2^T\\ \vdots\\ \mathbf{\vec v}_K^T \end{bmatrix} \begin{bmatrix}\mathbf{\vec v}_1&\mathbf{\vec v}_2&\cdots& \mathbf{\vec v}_K \end{bmatrix} $模型待求解的参数为:
$ w_0\in \mathbb R,\mathbf{\vec w}\in \mathbb R^K\\ \mathbf V = (\mathbf{\vec v}_1,\cdots,\mathbf{\vec v}_K) \in \mathbb R^{d\times K} $其中:
- $ w_0 $ 表示全局偏差。
- $ w_i $ 用于捕捉第 $ i $ 个特征和目标之间的关系。
- $ \hat w_{i,j} $ 用于捕捉 $ (i,j) $ 二路交叉特征和目标之间的关系。
- $ \mathbf{\vec v}_i $ 代表特征 $ i $ 的
representation vector
,它是 $ \mathbf V $ 的第 $ i $ 列。
-
$ \sum_{i=1}^K\sum_{j=i+1}^K \hat w_{i,j}\times x_i\times x_j = \sum_{i=1}^K\sum_{j=i+1}^K\sum_{l=1}^d v_{i,l}\times v_{j,l}\times x_i\times x_j\\ = \sum_{l=1}^d \left(\sum_{i=1}^K\sum_{j=i+1}^K (v_{i,l}\times x_i) \times (v_{j,l}\times x_j)\right)\\ = \sum_{l=1}^d \frac 12\left(\left(\sum_{i=1}^Kv_{i,l}\times x_i\right)^2 - \sum_{i=1}^K v_{i,l}^2\times x_{i}^2\right) $FM
模型的计算复杂度为 $ O(K\times K\times d) = O(K^2d) $ ,但是经过数学转换之后其计算复杂度可以降低到 $ O(Kd) $ :因此有:
$ \hat y(\mathbf{\vec x}) = w_0 + \sum_{i=1}^K w_i\times x_i +\frac 12 \sum_{l=1}^d\left(\left(\sum_{i=1}^Kv_{i,l}\times x_i\right)^2 - \sum_{i=1}^K v_{i,l}^2\times x_{i}^2\right) $其计算复杂度为 $ O(Kd) $ 。
-
将
FM
模型和标准的矩阵分解模型进行比较,可以看到:FM
也恰好包含这种分解 $ <\mathbf{\vec v}_i,\mathbf{\vec v}_u> $ 。此外,FM
模型还包含了所有上下文变量的所有pair
对的交互。这表明FM
自动包含了矩阵分解模型。 -
FM
模型可以用于求解分类问题(预测各评级的概率),也可以用于求解回归问题(预测各评分大小)。-
对于回归问题,其损失函数为
$ \mathcal L = \sum_{(\mathbf{\vec x},y)\in \mathbb S} \left(\hat y(\mathbf{\vec x}) - y\right)^2 + \sum_{\theta\in \mathbf \Theta} \lambda_{\theta} \times \theta^2 $MSE
均方误差: -
对于二分类问题,其损失函数为交叉熵:
$ \phi (\mathbf{\vec x}) = w_0 + \sum_{i=1}^K w_i\times x_i +\frac 12 \sum_{l=1}^d\left(\left(\sum_{i=1}^Kv_{i,l}\times x_i\right)^2 - \sum_{i=1}^K v_{i,l}^2\times x_{i}^2\right)\\ p(\hat y = y\mid \mathbf{\vec x}) = \frac{1}{1+\exp({-y\phi(\mathbf{\vec x})})} \\ \mathcal L = \left(- \sum_{(\mathbf{\vec x},y)\in \mathbb S} \log p(\hat y = y\mid \mathbf{\vec x})\right) + \sum_{\theta\in \mathbf \Theta} \lambda_{\theta} \times \theta^2 $其中:
- 评级集合为 $ y\in \{-1,1 \} $ 一共两个等级。
- $ p(\hat y=y\mid \mathbf{\vec x}) $ 为样本 $ \mathbf{\vec x} $ 预测为评级 $ y $ 的概率,满足:
损失函数最后一项是正则化项,为了防止过拟合, $ \mathbf \Theta = \{w_0,\mathbf{\vec w}, \mathbf V\} $ 。其中 $ \lambda_\theta $ 为参数 $ \theta $ 的正则化系数,它是模型的超参数。
可以针对每个参数配置一个正则化系数,但是选择合适的值需要进行大量的超参数选择。论文推荐进行统一配置:
- 对于 $ w_0 $ ,正则化系数为 $ \lambda_{w_0} = 0 $ ,这表示不需要对全局偏差进行正则化。
- 对于 $ w_i $ ,统一配置正则化系数为 $ \lambda_w $ 。
- 对于 $ v_{i,l} $ ,统一配置正则化系数为 $ \lambda_v $ 。
-
-
FM
模型可以处理不同类型的特征:-
离散型特征
categorical
:FM
对离散型特征执行one-hot
编码。如,性别特征:“男” 编码为
(0,1)
,“女” 编码为(1,0)
。 -
离散集合特征
categorical set
:FM
对离散集合特征执行类似one-hot
的形式,但是执行样本级别的归一化。如,看过的历史电影。假设电影集合为:“速度激情9,战狼,泰囧,流浪地球”。如果一个人看过 “战狼,泰囧,流浪地球”, 则编码为
(0,0.33333,0.33333,0.33333)
。 -
数值型特征
real valued
:FM
直接使用数值型特征,不做任何编码转换。
-
-
FM
的优势:-
给定特征
representation
向量的维度时,预测期间计算复杂度是线性的。 -
在交叉特征高度稀疏的情况下,参数仍然能够估计。
因为交叉特征的参数不仅仅依赖于这个交叉特征,还依赖于所有相关的交叉特征。这相当于增强了有效的学习数据。
-
能够泛化到未被观察到的交叉特征。
设交叉特征 “看过电影
A
且 年龄等于20
” 从未在训练集中出现,但出现了 “看过电影A
” 相关的交叉特征、以及 “年龄等于20
” 相关的交叉特征。于是可以从这些交叉特征中分别学习 “看过电影
A
” 的representation
、 “年龄等于20
”的representation
,最终泛化到这个未被观察到的交叉特征。
-
3.2.2 ALS 优化算法
a. 最优化解
-
FM
的目标函数最优化可以直接采用随机梯度下降SGD
算法求解,但是采用SGD
有个严重的问题:需要选择一个合适的学习率。-
学习率必须足够大,从而使得
SGD
能够尽快的收敛。学习率太小则收敛速度太慢。 -
学习率必须足够小,从而使得梯度下降的方向尽可能朝着极小值的方向。
由于
SGD
计算的梯度是真实梯度的估计值,引入了噪音。较大的学习率会放大噪音的影响,使得前进的方向不再是极小值的方向。
我们提出了一种新的交替最小二乘
alternating least square:ALS
算法来求解FM
目标函数的最优化问题。与SGD
相比ALS
优点在于无需设定学习率,因此调参过程更简单。 -
-
根据定义:
$ \hat y(\mathbf{\vec x};\mathbf \Theta) = w_0 + \sum_{i=1}^K w_i\times x_i +\frac 12 \sum_{l=1}^d\left(\left(\sum_{i=1}^Kv_{i,l}\times x_i\right)^2 - \sum_{i=1}^K v_{i,l}^2\times x_{i}^2\right) $对每个 $ \theta \in \mathbf \Theta = \{w_0,\mathbf{\vec w}, \mathbf V\} $ ,可以将 $ \hat y $ 分解为 $ \theta $ 的线性部分和偏置部分:
$ \hat y(\mathbf{\vec x};\mathbf \Theta) = h_{\theta}(\mathbf{\vec x}) \times \theta +g_\theta(\mathbf{\vec x}) $其中 $ g_\theta(\mathbf{\vec x}), h_\theta(\mathbf{\vec x}) $ 与 $ \theta $ 无关。如:
-
对于 $ w_0 $ 有:
$ h_{w_0} = 1\\ g_{w_0} = \sum_{i=1}^K w_i\times x_i +\frac 12 \sum_{l=1}^d\left(\left(\sum_{i=1}^Kv_{i,l}\times x_i\right)^2 - \sum_{i=1}^K v_{i,l}^2\times x_{i}^2\right) $ -
对于 $ w_i,i=1,2\cdots,K $ 有:
$ h_{w_i} = x_i\\ g_{w_i} = w_0 + \sum_{j=1,j\ne i}^K w_j\times x_j +\frac 12 \sum_{l=1}^d\left(\left(\sum_{j=1}^Kv_{j,l}\times x_j\right)^2 - \sum_{j=1}^K v_{j,l}^2\times x_{j}^2\right) $ -
对于 $ v_{i,l}, i=1,2,\cdots,K,l=1,2,\cdots,d $ 有:
$ h_{v_{i,l}} = \sum_{j=1,j\ne i}^K v_{j,l} \times x_j\times x_i\\ g_{v_{i,l}} = w_0 + \sum_{j=1}^K w_j\times x_j +\sum_{i^\prime=1}^K\sum_{j^\prime=i^\prime+1}^K\sum_{\substack{l^\prime=1,\\ l^\prime\ne l \;\&\; i^\prime \ne i \;\&\; j^\prime \ne i }}^d v_{i^\prime,l^\prime}\times v_{j^\prime,l^\prime}\times x_{i^\prime}\times x_{j^\prime} $
因此有:
$ \frac{\partial \hat y(\mathbf{\vec x};\mathbf \Theta)}{\partial \theta} = h_\theta(\mathbf{\vec x}) $考虑均方误差损失函数:
$ \mathcal L = \sum_{(\mathbf{\vec x},y)\in \mathbb S} \left(\hat y(\mathbf{\vec x};\mathbf \Theta) - y\right)^2 + \sum_{\theta\in \mathbf \Theta} \lambda_{\theta} \times \theta^2 $最小值点的偏导数为
$ \frac{\partial L}{\partial \theta} = 2\sum_{(\mathbf{\vec x},y)\in \mathbb S} \left(\hat y(\mathbf{\vec x};\mathbf \Theta) - y\right)\times \frac{\partial \hat y(\mathbf{\vec x};\mathbf \Theta)}{\partial \theta} + 2\times \lambda_{\theta} \times \theta = 0 $0
,有:则有:
$ \theta = - \frac{\sum_{(\mathbf{\vec x},y)\in \mathbb S}(g_\theta(\mathbf{\vec x})-y)\times h_\theta(\mathbf{\vec x}) }{\left(\sum_{(\mathbf{\vec x},y)\in \mathbb S} h^2_\theta(\mathbf{\vec x})\right)+\lambda_\theta } $ -
-
ALS
通过多轮次、轮流迭代求解 $ \theta \in \mathbf \Theta = \{w_0,\mathbf{\vec w}, \mathbf V\} $ 即可得到模型的最优解。-
在迭代之前初始化参数,其中: $ w_0,\mathbf{\vec w} $ 通过零初始化, $ \mathbf V $ 的每个元素通过均值为
0
、方差为 $ \sigma $ 的正太分布随机初始化。 -
每一轮迭代时:
-
首先求解 $ w_0,\mathbf{\vec w} $ ,因为相对于二阶交叉的高阶特征,低阶特征有更多的数据来估计其参数,因此参数估计更可靠。
-
然后求解 $ \mathbf V $ 。这里按照维度优先的准确来估计:先估计所有
representation
向量的第1
维度,然后是第2
维,... 最后是第d
维。这是为了计算优化的考量。
-
-
b. 计算优化
-
直接求解
ALS
的解时复杂度较高:在每个迭代步中计算每个训练样本的 $ g_\theta(\mathbf{\vec x}) $ 和 $ h_\theta(\mathbf{\vec x}) $ 。对于每个样本,求解 $ g_\theta(\mathbf{\vec x}) $ 和 $ h_\theta(\mathbf{\vec x}) $ 的计算复杂度为:
- 计算 $ h_{w_0}(\mathbf{\vec x}) $ 的复杂度为 $ O(1) $ ,计算 $ g_{w_0}(\mathbf{\vec x}) $ 的复杂度为 $ O(Kd) $ 。
- 计算 $ h_{w_i}(\mathbf{\vec x}) $ 的复杂度为 $ O(1) $ ,计算 $ g_{w_i}(\mathbf{\vec x}) $ 的复杂度为 $ O(Kd) $ 。
- 计算 $ h_{v_{i,l}}(\mathbf{\vec x}) $ 的复杂度为 $ O(K) $ ,计算 $ g_{v_{i,l}}(\mathbf{\vec x}) $ 的复杂度为 $ O(K^2d) $ 。
因此求解 $ \theta $ 的计算复杂度为 $ O(|\mathbb S|\times K^2\times d) $ 。
-
有三种策略来降低求解 $ \theta $ 的计算复杂度,从 $ O(|\mathbb S|\times K^2\times d) $ 降低到 $ O(|\mathbb S|\times \bar K\times d) $ ,其中 $ \bar K $ 表示平均非零特征的数量:
- 利用预计算的误差项 $ e $ 降低 $ (g_\theta(\mathbf{\vec x})-y) $ 的计算代价 。
- 利用预计算的 $ q $ 项降低交叉特征的 $ h_\theta $ 的计算代价。
- 利用数据集 $ \mathbb S $ 的稀疏性降低整体计算代价。
-
预计算误差项 $ e $ :
定义误差项:
$ e(\mathbf{\vec x},y;\mathbf \Theta) := \hat y(\mathbf{\vec x}; \mathbf \Theta) - y $考虑到 $ \hat y(\mathbf{\vec x};\mathbf \Theta) = h_{\theta}(\mathbf{\vec x}) \times \theta +g_\theta(\mathbf{\vec x}) $ ,则有:
$ g_\theta(\mathbf{\vec x})-y = e(\mathbf{\vec x},y;\mathbf \Theta) - \theta\times h_\theta(\mathbf{\vec x}) $因此如果计算 $ e(\mathbf{\vec x},y;\mathbf \Theta) $ 的计算代价较低,则计算 $ (g_\theta(\mathbf{\vec x})-y) $ 的计算复杂度也会降低。
-
首先对每个样本,计算其初始误差:
$ \mathbf{\vec e} = \left(e(\mathbf{\vec x}_1,y_1;\mathbf \Theta ),\cdots,e(\mathbf{\vec x}_{|\mathbb S|},y_{|\mathbb S|};\mathbf \Theta )\right)^T \in \mathbb R^{|\mathbb S|} $考虑到 $ \hat y $ 的计算复杂度为 $ O(K\times d) $ ,因此 $ \mathbf{\vec e} $ 的计算复杂度为 $ O(|\mathbb S|\times K\times d) $ 。
-
当参数 $ \theta $ 更新到 $ \theta^* $ 时,重新计算误差:
$ e(\mathbf{\vec x},y;\mathbf \Theta^*) = \hat y(\mathbf{\vec x}; \mathbf \Theta^*) - y = h_{\theta}(\mathbf{\vec x}) \times \theta^* +g_\theta(\mathbf{\vec x}) - y\\ = h_{\theta}(\mathbf{\vec x}) \times \theta+g_\theta(\mathbf{\vec x}) - y + h_{\theta}(\mathbf{\vec x})(\theta^*-\theta)\\ = e(\mathbf{\vec x},y;\mathbf \Theta) + h_{\theta}(\mathbf{\vec x})(\theta^*-\theta) $计算代价由 $ h_\theta(\mathbf{\vec x}) $ 决定 (根据下面的讨论,其计算复杂度为 $ O(1) $ )。
-
-
预计算 $ q $ 值:
如果能够降低计算 $ h_\theta(\mathbf{\vec x}) $ 的代价,则整体计算复杂度可以进一步降低。由于 $ h_{w_0}(\mathbf{\vec x}),h_{w_i}(\mathbf{\vec x}) $ 的复杂度为 $ O(1) $ ,因此重点考虑 $ h_{v_{i,l}}(\mathbf{\vec x}) $ 的计算复杂度。
重写 $ h_{v_{i,l}} (\mathbf{\vec x}) $ ,有:
$ h_{v_{i,l}}(\mathbf{\vec x}) = \sum_{j=1,j\ne i}^K v_{j,l} \times x_j\times x_i = x_i\times \left[\sum_{j=1 }^K v_{j,l} \times x_j\right] - v_{i,l}\times x_i^2 $定义:
$ q(\mathbf{\vec x},l;\mathbf\Theta) := \sum_{j=1}^Kv_{j,l}\times x_j $因此如果计算 $ q(\mathbf{\vec x},l;\mathbf\Theta) $ 的计算代价较低,则 $ h_{v_{i,l}}(\mathbf{\vec x}) $ 的计算复杂度也会降低。
-
对每个样本、每个
$ \mathbf Q= \begin{bmatrix} q(\mathbf{\vec x}_1,1;\mathbf\Theta)&q(\mathbf{\vec x}_1,2;\mathbf\Theta)&\cdots& q(\mathbf{\vec x}_1,d;\mathbf\Theta)\\ q(\mathbf{\vec x}_2,1;\mathbf\Theta)&q(\mathbf{\vec x}_2,2;\mathbf\Theta)&\cdots& q(\mathbf{\vec x}_2,d;\mathbf\Theta)\\ \vdots&\vdots&\ddots&\vdots\\ q(\mathbf{\vec x}_{|\mathbb S|},1;\mathbf\Theta)&q(\mathbf{\vec x}_{|\mathbb S|},2;\mathbf\Theta)&\cdots& q(\mathbf{\vec x}_{|\mathbb S|},d;\mathbf\Theta) \end{bmatrix}\in \mathbb R^{|\mathbb S|\times d} $representation
向量维度计算初始 $ q $ 值:计算复杂度为 $ O(|\mathbb S|\times K\times d) $ 。
-
当参数 $ v_{j,l} $ 更新到 $ v_{j,l}^* $ 时,重新 $ q $ 值:
$ q(\mathbf{\vec x},l;\mathbf\Theta ^*)= q(\mathbf{\vec x},l;\mathbf\Theta) +(v_{j,l}^* - v_{j,l})\times x_l $计算代价为 $ O(1) $ 。
-
一旦得到 $ q(\mathbf{\vec x},l;\mathbf\Theta) $ ,则有:
$ h_{v_{i,l}}(\mathbf{\vec x}) = q(\mathbf{\vec x},l;\mathbf\Theta) - v_{i,l}\times x_i^2 $计算代价为 $ O(1) $ 。
-
-
数据集 $ \mathbb S $ 的稀疏性:
根据:
$ \theta = - \frac{\sum_{(\mathbf{\vec x},y)\in \mathbb S}(g_\theta(\mathbf{\vec x})-y)\times h_\theta(\mathbf{\vec x}) }{\left(\sum_{(\mathbf{\vec x},y)\in \mathbb S} h^2_\theta(\mathbf{\vec x})\right)+\lambda_\theta } $-
对于 $ w_0 $ ,其计算复杂度为 $ O(|\mathbb S|\times K) $
$ w_0\leftarrow \frac{\sum_{(\mathbf{\vec x},y)\in \mathbb S}\left[e(\mathbf{\vec x},y;\mathbf \Theta)-w_0\right] }{|\mathbb S|+\lambda_{w_0} } $ -
对于 $ w_i,v_{i,l} $ , 我们只需要迭代 $ \mathbb S $ 中 $ h_\theta(\mathbf{\vec x}) \ne 0 $ 的样本,即 $ x_i \ne 0 $ 的样本。
因此每次更新只需要使用部分样本。总体而言,整体复杂度为 $ O(|\mathbb S|\times \bar K\times d) $ ,其中 $ \bar K $ 表示平均非零特征的数量。
-
-
ALS
优化算法:-
输入:
- 训练样本 $ \mathbb S $
- $ \mathbf V $ 随机初始化的方差 $ \sigma $
-
输出:模型参数 $ w_0,\mathbf{\vec w},\mathbf V $
-
算法步骤:
-
参数初始化:
$ w_0 \leftarrow 0\\ w_i \leftarrow 0,i=1,2,\cdots,K\\ v_{i,l} \leftarrow \mathcal N(0,\sigma),i=1,\cdots,K;l=1,\cdots,d\\ $ -
初始化 $ \mathbf{\vec e},\mathbf Q $ :
$ e(\mathbf{\vec x},y;\mathbf \Theta) \leftarrow \hat y(\mathbf{\vec x},y)-y,\quad (\mathbf{\vec x},y)\in \mathbb S\\ q(\mathbf{\vec x},l;\mathbf\Theta) \leftarrow \sum_{i=1}^K v_{i,l}\times x_i,\quad (\mathbf{\vec x},y)\in \mathbb S,l=1,2,\cdots,d $ -
迭代直至目标函数收敛或者达到指定步数,每一轮迭代过程为:
-
更新 $ w_0 $ :
$ w_0^* \leftarrow - \frac{\sum_{(\mathbf{\vec x},y)\in \mathbb S}\left[e(\mathbf{\vec x},y;\mathbf \Theta)-w_0\right] }{|\mathbb S|+\lambda_{w_0} }\\ e(\mathbf{\vec x},y;\mathbf \Theta^*) \leftarrow e(\mathbf{\vec x},y;\mathbf \Theta ) +(w_0^* -w_0)\\ w_0\leftarrow w_0^* $ -
更新 $ w_i,i=1,2\cdots,K $ :
$ w_i^* = - \frac{\sum_{(\mathbf{\vec x},y)\in \mathbb S}(e(\mathbf{\vec x},y;\mathbf \Theta) - w_i\times x_i)\times x_i}{\left(\sum_{(\mathbf{\vec x},y)\in \mathbb S} x_i^2\right)+\lambda_{w_i} }\\ e(\mathbf{\vec x},y;\mathbf \Theta^*) \leftarrow e(\mathbf{\vec x},y;\mathbf \Theta ) +(w_i^* -w_i)\times x_i\\ w_i\leftarrow w_i^* $ -
更新 $ v_{i,l},i=1,\cdots,K;l=1,\cdots,d $ :
外层循环为 $ l $ ,内层循环为 $ i $ 。这是为了充分利用 $ q(\mathbf{\vec x},l;\mathbf \Theta) $ 。
$ h_{v_{i,l}}(\mathbf{\vec x}) = q(\mathbf{\vec x},l;\mathbf\Theta) - v_{i,l}\times x_i^2\\ v_{i,l}^* = - \frac{\sum_{(\mathbf{\vec x},y)\in \mathbb S}[e(\mathbf{\vec x},y;\mathbf \Theta) -v_{i,l}\times h_{v_{i,l}}(\mathbf{\vec x})]\times h_{v_{i,l}}(\mathbf{\vec x}) }{\left(\sum_{(\mathbf{\vec x},y)\in \mathbb S} h^2_{v_{i,l}}(\mathbf{\vec x})\right)+\lambda_{v_{i,l}} }\\ e(\mathbf{\vec x},y;\mathbf \Theta^*) \leftarrow e(\mathbf{\vec x},y;\mathbf \Theta ) +(v_{i,l}^* -v_{i,l})\times x_i\\ q(\mathbf{\vec x},l;\mathbf \Theta^*) \leftarrow q(\mathbf{\vec x},l;\mathbf \Theta ) +(v_{i,l}^* -v_{i,l})\times x_i\\ v_{i,l} \leftarrow v_{i,l}^* $
-
-
.
-
3.3 实验
-
在本节中,我们根据实验研究了和
state-of-the-art
的上下文感知方法Multiverse Recommendation
的对比。此外,我们检查了SGD
对学习率选择的敏感性,以及我们的ALS
优化是否可以在没有学习率这个超参数的情况下成功工作。 -
数据集:
Food
数据集:包含212
个用户对20
个菜单item
的6360
个评分(从1
分到5
分),其中包含两个上下文变量:第一个上下文变量捕获用户评分的场景是虚拟的virtual
还是真实的real
(即用户想象自己饿了、还是用户真的饿了);第二个上下文变量刻画用户的饥饿程度。Adom
数据集:包含1524
个电影评分(从1
分到15
分),其中包含五个上下文变量,这些上下文变量关于同伴、工作日、以及其它时间信息。Yahoo! Webscope
数据集:包含221367
个评分。我们遵循《Multiverse recommendation: n-dimensional tensor factorization for context-aware collaborative filtering》
并应用他们的方法来处理数据集。我们生成 $ \alpha=\beta\in \{0.1,\cdots,0.9\} $ 一共九个数据集。
-
baseline
方法:我们将context-aware FM
和Multiverse Recommendation
进行比较。注意:Multiverse Recommendation
已经在上述三个数据集上超越了其它上下文感知推荐算法。我们使用
FM no-context
作为上下文无感context-unaware
的baseline
,其中仅使用用户变量和item
变量生成特征向量,这相当于具有bias
项的矩阵分解。这是最强的上下文无关推荐算法之一。FM
使用我们提出的ALS
算法进行优化,Multiverse Recommendation
使用原始论文中提出的SGD
算法来学习。 -
评估方式:我们从每个数据集中删除了
5%
的样本,用作调优超参数以获得最佳MAE
的验证集。在超参数搜索之后,我们对剩下的95%
数据集进行5-fold
交叉验证,即不再使用验证集。我们报告了5
次实验的平均RMSE
和MAE
。所有方法都是
C++
实现的,并在相同的硬件上运行。我们使用ALS
优化的FM
实现、Multiverse Recommendation
实现和数据集生成脚本可以从我们的网站上下载。 -
ALS vs SGD
:我们在Webscope
数据集上将SGD
实现的测试误差和我们的ASL
方法进行了比较,实验结果如下图所示。左图绘制了三种学习率选择的测试误差曲线,右侧的两个图分别显示了在10
次和100
次迭代后不同学习率得到的测试误差曲线(由于ALS
没有学习率超参数,因此表现为一条水平直线)。可以看到:SGD
的优化效果很大程度上取决于学习率和迭代次数。当精心挑选合适的学习率、足够大的迭代次数(根据验证集执行早停策略从而防止过拟合),SGD
可以达到ALS
的效果。ALS
不需要精心的、耗时的搜索合适的学习率,就可以达到很好的效果。
该实验表明:
SGD
需要仔细且耗时地搜索学习率,而ALS
不需要这样的搜索因为它没有这个超参数。在预测质量方面SGD
的性能与ALS
一样好,但是前提是选择了正确的学习率。这使得ALS
在应用中明显有利。 -
运行时间:
Multiverse Recommendation
在实际使用中的主要缺点之一是模型的计算复杂度为 $ O(d^K) $ ,这对于学习和预测都是一个问题。这意味着即使对于标准的非上下文感知推荐系统,运行时间对于分解维度 $ d $ 上也是二次的,对于上下文感知问题至少是三次的。这使得很难应用于较大的因子维度 $ d $ 和较多的变量数量 $ K $ 。相反,FM
的计算复杂度对于 $ d $ 和 $ K $ 都是线性的,即 $ O(dK) $ 。在本实验中,我们考察所有训练样本的一次完整迭代的运行时间。我们使用
webscope
数据集, $ K=4 $ , $ d\in \{1,2,4,8,16,32,64,128\} $ 。对于Multiverse Recommendation
,我们选择的最大 $ d=32 $ 。实验结果如下图所示(单位为妙),其中左图为对数尺度。可以看到,实验结果和理论复杂度分析相匹配:FM
的运行时间是线性的,例如可以在大约11s
内完成所有训练样本的完整迭代(对于 $ d=128 $ )。Multiverse Recommendation
的复杂度随着 $ d^4 $ 的增加而增加,使得 $ d=16 $ 的运行时间已经是30
分钟,而 $ d=32 $ 的运行时间大约是8
小时。
-
预测质量:最后我们想知道,上下文感知
FM
的灵活性和快速运行时间是否会以较差的预测质量为代价。为此我们比较了Food
、Adom
、Webscope
数据集上的预测质量,如下图所示。可以看到:- 上下文感知
FM
和Multiverse Recommendation
对Food
和Adom
数据集的预测质量相当。 - 上下文感知
FM
和Multiverse Recommendation
都优于上下文无感方法(相当于矩阵分解模型)。
在第三个实验中,我们考察了人工特征丰富的
Webscope
数据集,其中上下文变量(由context influence
刻画)对于评分的影响越来越大。结果如下图所示,可以看到:- 上下文感知的
FM
和Multiverse Recommendation
都受益于对上下文有更强依赖性的评分。 - 当评分更依赖于上下文时,上下文无关
FM
的预测质量会变差,因为对于上下文无关FM
,上下文是未观测到的,因此它们无法解释这种依赖性。 - 将两种上下文感知方法相互比较,可以看到
FM
始终生成比Multiverse Recommendation
更好的预测。例如,RMSE
下降0.10 ~ 0.15
,而MAE
下降0.08 ~ 0.10
。
- 上下文感知
-
结论:实验结果表明:
-
上下文感知
FM
能够考虑上下文信息来增强预测。 -
在运行时间方面
FM
是线性的,这使得它们可以应用于大维度的因子、更多上下文变量。相比之下,Multiverse Recommendation
无法处理大维度的因子、也无法处理很多上下文变量。 -
FM
在运行时间方面的优势并没有以预测质量为代价,相反:- 在稠密数据集(
Food
和Adom
)上,上下文感知FM
和Multiverse Recommendation
的预测质量相当。 - 而在稀疏数据集上,上下文感知
FM
的性能优于Multiverse Recommendation
。
- 在稠密数据集(
-
最后,
ALS
优化的FM
很容易应用,因为它不像SGD
那样对学习率进行昂贵的搜索。
-
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论