数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- 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
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
十三、RUM [2018]
在许多现实世界的
application
中,用户当前的兴趣受到他们历史行为的影响。例如,人们在购买智能手机之后可能会购买手机壳或耳机等配件,人们可能会继续购买他们以前有过良好体验的同一品牌的衣服。为了建模这种现象,人们已经提出了一些方法来使用用户历史记录
user historical record
进行序列推荐。例如,《Factorizing personalized markov chains for next-basket recommendation》
采用马尔科夫链对用户行为序列进行建模,《Context-aware sequential recommendation》
和《dynamic recurrent model for next basket recommendation》
利用RNN
来嵌入先前购买的商品从而进行当前兴趣预测current interest prediction
。现有方法取得了令人振奋的结果,但是它们倾向于将用户以前的所有记录
record
压缩为一个固定的hidden representation
。如下图所示,用户购买手机壳(item E
)的关键原因可能是他之前购买了一部手机(item B
),而之前其它购买的商品不一定与这个new purchase
(即,手机壳)有关。然而,RNN
(和其它的latent representation
方法)会强制将所有先前的item
(即item A
到item D
)summarize
到一个向量(即, $ \mathbf{\vec h}_4 $ ),用于预测用户的next interest
。不同历史记录(它们用于
next interest prediction
)的这种区分性的缺乏导致了两个不利的后果:- 在序列推荐中弱化了高相关
item
的信号。 - 忽略这样的高相关性信号使我们难以理解和解释序列推荐。
为了缓解这些问题,论文
《Sequential Recommendation with User Memory Networks》
将用户行为视为描述神经图灵机neural turing machine: NTM
的决策程序,并提出使用external memory
来建模用户历史记录。凭借显式地、动态地、和有效地表达、存储和操作记录的能力,external memory network: EMN
已经在许多序列预测任务中展示出良好的性能,例如知识问答question answering: QA
、natural language transduction: NLT
、knowledge tracking: KT
。EMN
架构不是合并先前的状态state
来进行预测,而是引入了一个memory matrix
来将状态分别存储在memory slot
中。然后通过在这个矩阵上设计适当的操作,EMN
与传统的RNN/LSTM
模型相比在许多任务中实现了显著的提升。受到
EMN
的启发,论文《Sequential Recommendation with User Memory Networks》
提出了一种将Recommender system
和external User Memory network
相结合的新颖框架,简称RUM
。然后论文进一步研究RUM
在top-N
推荐任务上的直觉和性能。下图(b)
和(c)
说明了论文提出的框架的基本思想:- 对于每个用户,引入一个
external user memory matrix
来维护该用户的历史信息。与传统的RNN hidden vector
相比,这丰富了representation capacity
。 - 在进行预测时,
memory matrix
被注意力地attentively
读出read out
从而生成一个embedding
来作为user representation
,其中注意力机制学习先前记录对于当前推荐的不同重要性。 - 在处理完序列中的每个
item
后,将重写memory
从而更新用户历史user history
。
为了更好地探索论文的想法,作者提供了框架的两个规范
specification
,即item-level RUM
和feature-level RUM
,它们分别建模item-level
的用户记录和feature-level
的用户记录。与现有方法相比,论文的方法基于memory network
对用户历史记录进行了更细粒度的使用,提高了推荐性能,同时基于注意力分析抽取了消费者行为的直观的因果关系intuitive causality
。总之,这项工作的主要贡献包括:
- 论文提出将协同过滤的洞察
insight
与memory-augmented neural network: MANN
相结合从而进行推荐。这种结合以更有效的方式利用了用户历史记录。据作者所知,这是将MANN
引入推荐系统领域的首次尝试。 - 论文研究了两个具有不同
representation
和operation
设计的潜在memory network
(item-level
和feature-level
)。论文进一步研究并比较了它们在序列推荐和top-N
推荐任务中的表现。 - 论文还将所提出的模型与
state-of-the-art
的方法进行了比较,并通过对现实世界数据集的定量分析来验证所提出模型的优越性。分析结果表明论文的方法能够更有效地利用用户历史记录。 - 论文进一步提供实证分析
empirical analyse
来解释所提出的模型如何、以及为什么推荐一个item
。分析结果表明通过memory network
中的注意力机制,所提出的模型能够直观地解释用户历史记录如何影响该用户当前的和未来的决策。
- 在序列推荐中弱化了高相关
相关工作:我们的工作本质上是序列推荐和
memory-augmented neural network
的集成。接下来我们回顾一下这两个研究方向的相关工作。序列推荐:在文献中,人们已经提出了许多模型以序列方式利用用户历史记录来进行
future behavior
的预测和推荐。通过集成矩阵分解和马尔科夫链,
factorized personalized Markov chain: FPMC
将相邻行为之间的转移信息transition information
嵌入到item latent factor
从而进行推荐。而
hierarchical representation model: HRM
通过利用representation learning
作为latent factor
从而进一步扩展了这个想法。这些方法主要对每两个相邻记录之间的局部序列模式
local sequential pattern
进行建模。为了建模
multiple-step
序列行为,《Fusing Similarity Models with Markov Chains for Sparse Sequential Recommendation》
采用马尔科夫链来提供稀疏序列的推荐。《A dynamic recurrent model for next basket recommendation》
提出了dynamic recurrent basket model: DREAM
来捕获全局序列模式global sequential pattern
并学习基于recurrent neural network: RNN
的dynamic user interest representation
。在DREAM
中,用户的所有历史记录都被嵌入到RNN
的final hidden state
中,从而代表该用户的当前偏好。DREAM
这种方法取得了相对于HRM
和FPMC
的显著改进。类似地,
《Session-based recommendations with recurrent neural networks》
、《Improved recurrent neural networks for session-based recommendations》
利用用户之前的点击和购买行为,使用RNN
对短期偏好进行建模,从而用于session-based
推荐。《Translation-based recommendation》
采用度量空间学习metric space learning
方法来学习用于序列推荐的、加性additive
的user-item
关系。除了电商之外,序列推荐也被应用于
POI
推荐、音乐推荐、浏览browsing
推荐等各种application
场景。
现有模型通常将用户先前的记录隐式编码为一个
latent factor
或hidden state
,而不区分每条记录在预测当前兴趣时可能扮演的不同角色。然而,在这项工作中,我们利用user memory network
来存储和操作每个用户先前的记录,这有助于增强用户历史的表达能力。Memory-Augmented Neural Network
:近年来出现了能够有效处理序列数据的external memory network: EMN
。简而言之,EMN
利用一个memory matrix
来存储历史的hidden state
。通过正确读取和更新这个memory matrix
,EMN
可以在许多面向序列的任务上获得更好的性能。遵循这个思想,《End-to-end memory networks》
设计了一个端到端的memory-augmented model
,它在训练期间需要的监督信息显著减少从而使其更好地适用于real-world setting
。最近,研究人员已经成功地将EMN
的概念应用于多个领域,如question answering: QA
、natural language transduction: NLT
、knowledge tracking: KT
。通常,
EMN
由两个主要组件构成:一个memory matrix
用于维护state
、一个controller
用于操作(包括读取和写入)。更具体而言:对于读取过程,大多数方法采用注意力机制来读取
memory matrix
。即,对于输入 $ \mathbf{\vec q} $ ,他们首先计算输入和memory matrix
中每个memory slot
$ \mathbf{\vec m}_i $ 的相似度similarity
$ s\left(\mathbf{\vec q},\mathbf{\vec m}_i\right)\in \mathbb R $ ,然后第 $ i $ 个slot
的注意力权重为:其中
$ \text{softmax}(x_i) = \frac{\exp(x_i)}{\sum_j\exp(x_j)} $ 。在注意力权重的基础上,memory
被注意力attentively
地读出read out
。对于写入过程,
《Neural turing machines》
通过考虑内容和slot location
来更新user memory
,从而促进facilitate
memory
的所有location
。然而,
《Meta-learning with memory-augmented neural networks》
提出了一种单纯地content-based
的写入策略,称之为least recently used access: LRUA
,从而将memory
写入到最少使用的memory location
、或者最近使用的memory location
。
在本文中,我们旨在将
EMN
的思想应用于推荐系统,从而更有效地利用用户历史行为。这种应用方式还有待学术界探索。
13.1 模型
- 在本节中,我们首先介绍我们的通用框架,详细说明如何将
user memory network
与协同过滤相结合。然后,我们通过描述通用框架的两个具体实现(即,item-level user memory network
和feature-level user memory network
)来聚焦于设计memory component
,从而从不同的角度审视我们的框架。
13.1.1 通用框架
为了更好地理解,我们首先将广泛使用的矩阵分解
matrix factorization: MF
模型重新描述为神经网络。假设有 $ N $ 个用户(用户集合为 $ \mathcal U $ )和 $ M $ 个item
(item
集合为 $ \mathcal I $ )。在神经网络的上下文中,采用one-hot
格式的user ID/ item ID
可以作为输入并馈送到架构中,然后look-up layer
将这些sparse representation
投影到稠密向量中(即user embedding/ item embedding
)。假设用户
$ u $ 的user embedding
为 $ \mathbf{\vec p}_u $ 、item
$ i $ 的embedding
为 $ \mathbf{\vec q}_i $ ,那么MF
模型中 $ u $ 和 $ i $ 的相似分likeness score
$ \hat y_{u,i} $ 可以被计算为 $ \mathbf{\vec p}_u $ 和 $ \mathbf{\vec q}_i $ 之间的向量内积:memory enhanced user embedding
:为了在我们的框架中利用用户历史记录,我们从两部分生成一个用户的embedding
:- 一个部分与用户的
memory component
有关,该组件对用户以前的记录进行编码(称作memory embedding
,记做 $ \mathbf{\vec p}_u^m $ )。 - 另一个部分是一个
free vector
,用于编码不受用户先前行为影响的内在偏好intrinsic preference
(称作intrinsic embedding
,记做 $ \mathbf{\vec p}_u^* $ )。
memory embedding
类似于传统的RNN-based
方法中的hidden vector
。然而,hidden vector
盲目地将用户的所有历史记录压缩成一个固定的向量,而在我们的框架中,用户记录通过更具表达能力的结构(个性化的memory matrix
$ \mathbf M^u $ )来进行编码、存储、更新。这种方式内存消耗大(每个用户分配一个
memory matrix
,内存需求为 $ O(NDK) $ ,其中 $ K $ 为memory slot
个数, $ D $ 为memory embedding
维度)。此外,模型的mini-batch
训练也是一个难点。具体而言:
对于用户
$ u $ ,该用户的memory embedding
$ \mathbf{\vec p}_u^m $ 是根据当前item embedding
$ \mathbf{\vec q}_i $ 从 $ \mathbf M^u $ 读取而来:其中
$ \text{read}(\cdot) $ 为读取函数。然后,通过将
memory embedding
$ \mathbf{\vec p}_u^m $ 与用户的intrinsic embedding
$ \mathbf{\vec p}_u^* $ 合并,我们得到用户 $ u $ 的final user embedding
为:其中
$ \text{merge}(\cdot) $ 是将两个向量合并为一个向量的函数。在我们的模型中,我们选择简单的加权加法,即:其中
$ \alpha $ 为一个加权超参数。我们还测试了逐元素乘法合并、以及向量拼接合并,但是它们的效果都不如加权加法合并。加权加法合并的另一个优点是:我们可以调整权重超参数
$ \alpha $ 来研究融合了memory
机制进行推荐的效果,这将在实验部分展示。
- 一个部分与用户的
预测函数:在进行预测时,我们将
final user embedding
$ \mathbf{\vec p}_u $ 和item embedding
$ \mathbf{\vec q}_i $ 输入到一个函数中:其中
$ \text{predict}(\cdot) $ 是任意预测函数,甚至可以是《Neural collaborative filtering》
中的prediction neural network
。在这里,我们选择sigmoid
内积 $ \hat y_{u,i} = \sigma\left(\mathbf{\vec p}_u\cdot \mathbf{\vec q}_i\right) $ 作为具体实现,因为它为我们的数据提供了更好的训练效率。然而,没必要严格限定该函数的实现,根据具体的应用领域,可以在实践中使用许多其它方式的实现。训练:我们采用二元交叉熵作为模型优化的损失函数,要最大化的目标函数为:
其中:
$ \Theta $ 为模型的参数集合。 $ y_{u,i} $ 为ground truth
,如果用户 $ u $ 购买了item
$ i $ 则取值为1
,否则取值为0
。 $ \mathcal I $ 为所有item
的集合, $ \mathcal I_u^+ $ 为用户 $ u $ 所有购买的item
的集合。我们从unobserved
的item
集合 $ \mathcal I_u^- = \mathcal I\backslash \mathcal I_u^+ $ 中均匀采样negative item
。应该注意的是,非均匀采样策略可能会进一步提高性能,我们将非均匀采样策略留待未来的工作。
在这个等式中,我们通过前两项来最大化我们预测结果的可能性,最后一项对所有模型参数正则化从而避免过拟合。在训练阶段,我们通过随机梯度下降
stochastic gradient descent: SGD
来学习模型参数。memory updating
:在每次购买行为之后,我们通过以下方式更新user memory matrix
$ \mathbf M^u $ 从而维持其动态特性dynamic nature
:在接下来的内容中,我们将描述个性化的
memory matrix
$ \mathbf M^u $ 如何编码用户行为,以及如何在item-level
和feature-level
设计 $ \text{read}(\cdot) $ 和 $ \text{write}(\cdot) $ 操作。
13.1.2 Item-level RUM
在本节中,我们首先通过简单的方式扩展以前的方法来实现我们的思想(如下图
(a)
)。与现有模型类似,我们将每个item
视为一个单元unit
,并建模先前购买的item
对下一个item
的影响。许多工作表明(《Factorizing personalized markov chains for next-basket recommendation》
、《Learning hierarchical representation model for nextbasket recommendation》
),用户最近的行为可能对当前决策更重要。因此,对于每个用户 $ u $ ,我们让memory matrix
$ \mathbf M^u $ 存储 $ u $ 最近购买的item
的embedding
,如下图(a)
中的紫色虚线框所示。假设用户
$ u $ 购买的item
集合定义为: $ \mathcal I_u^+=\left\{v_1^u,v_2^u,\cdots,v^u_{|\mathcal I_u^+|}\right\} $ ,其中按照购买顺序(时间戳的升序)来排列, $ v^u_i $ 为用户 $ u $ 购买的第 $ i $ 个item
。令
$ \mathbf{\vec q}_{v_i^u}\in \mathbb R^D $ 为item
$ v_i^u $ 的embedding
。假设memory matrix
有 $ K $ 列(即 $ K $ 个memory slot
),即 $ \mathbf M^u =\left\{\mathbf{\vec m}_1^u,\mathbf{\vec m}_2^u,\cdots,\mathbf{\vec m}_K^u\right\} \in \mathbb R^{D\times K} $ ,其中 $ \mathbf{\vec m}_k^u\in \mathbb R^D $ 为 $ \mathbf M^u $ 的第 $ k $ 个列向量column vector
。我们设计reading
操作和writing
操作如下:reading
操作:直观上看,之前的item
可能对当前的item
有不同的影响,影响越大的item
在final memory embedding
中应该越重视。形式上,在我们的模型中,当对user-item pair
$ \left(u,v_i^u\right) $ 进行预测时,我们首先采用与FPMC
类似的方式来计算user memory
$ \mathbf M^u $ 中的item
与当前item
$ v_i^u $ 的影响:其中
$ \beta $ 为强度strength
超参数。然后我们使用
$ z_{i,k} $ 作为注意力权重来推导出用户 $ u $ 的memory embedding
,这为我们提供了一个能力:根据用户历史行为对当前item
的影响来访问用户历史行为。即:与之前的模型不同,我们不会在
reading
过程中强行合并所有item embedding
。相反,我们现将这些item embedding
单独存储在 $ \mathbf M^u $ 中,然后对其中的某些item
给予更多的关注。这为我们提供了一种更细粒度的方法来利用用户历史记录。writing
操作:如前所述,用户最近的行为通常对当前的预测起着更重要的作用。因此,我们采用简单的first-in-first-out: FIFO
机制来维护user memory matrix
$ \mathbf M^u $ 中最近交互的item
。具体而言,用户
$ u $ 的memory matrix
$ \mathbf M^u $ 总是存储最近的 $ K $ 个item
。假设当前item
是 $ \mathbf{\vec q}_{v_i^u} $ ,那么memory matrix
为: $ \mathbf M^u = \left\{\mathbf{\vec q}_{v_{i-1}^u},\mathbf{\vec q}_{v_{i-2}^u},\cdots,\mathbf{\vec q}_{v_{i-K}^u}\right\}\in \mathbb R^{D\times K} $ 。当写入memory
时,最早的item
将被替换, $ \mathbf M^u $ 被更新为: $ \left\{\mathbf{\vec q}_{v_{i}^u},\mathbf{\vec q}_{v_{i-1}^u},\cdots,\mathbf{\vec q}_{v_{i-K+1}^u}\right\} $ 。注意,当memory
未满时,直接添加item
而不必替换memory
内的任何其它item
。
这种做法的思想类似于
DIN
。由于 $ \mathbf M^u $ 的更新是简单的规则,因此可以在样本生成阶段就把 $ \mathbf M^u $ 拼接到样本中作为特征,这就是DIN
。但是,与
DIN
相比,这里的 $ \mathbf M^u $ 是固定size
的,因此需要进行序列padding
或截断,因此会一定程度上损害性能。
13.1.3 Feature-level RUM
受到经典潜在因子模型
latent factor model: LFM
推荐的启发,我们进一步探索在feature-level
上实现RUM
框架。在LFM
中,我们假设用户在作出购买决策时可能会考虑一组产品特征product feature
,并且LFM
中的每个embedding
维度代表了产品域product domain
中的一个潜在特征,其中所有的潜在特征张成了一个latent representation space
。然后,LFM
将用户对这些特征的偏好估计为该空间中的向量。在这项工作中,我们使用
memory network
的能力来显式地建模这些潜在特征。直观而言,用户对这些特征的偏好应该动态地反映在该用户的购买行为中。例如,如果用户在新购买的iPhone
上体验非常好,那么该用户未来可能会继续在品牌brand
特征上选择苹果的产品。受这些直觉的启发,我们维持用户对
memory matrix
中不同特征的偏好。这些特征将被读取从而生成user memory embedding
, 并由该用户购买的每个item
来写入。更具体而言,我们将我们的方法形式化为一个key-value memory neural network
,如下图(b)
所示。我们首先设计了一个
global latent feature table: GLFT
来存储每个feature
的embedding
,并且在进行预测时,item
将与这个table
交互从而识别其相关的特征。对于每个用户,我们利用
user memory matrix
$ \mathbf M^u $ 来编码该用户在GLFT
上特征的偏好。基于上述识别的特征,该用户会注意力attentively
地合并 $ \mathbf M^u $ 中的列,从而获得该用户的memory embedding
。与
LFM
中的全局特征空间一样,这里的global latent feature table
在所有用户之间共享,而memory matrix
以个性化的方式进行per-user level
的维护。最后,我们使用
item embedding
更新user memory matrix
$ \mathbf M^u $ 。
形式上,令用户
$ u $ 的embedding
为 $ \mathbf{\vec p}_u\in \mathbb R^D $ ,令item
$ i $ 的embedding
为 $ \mathbf{\vec q}_i\in \mathbb R^D $ 。假设我们的系统中有 $ K $ 个潜在特征,global latent feature table
为 $ \mathbf F = \left\{\mathbf{\vec f}_1,\mathbf{\vec f}_2,\cdots,\mathbf{\vec f}_K\right\}\in \mathbb R^{D\times K} $ ,其中 $ \mathbf{\vec f}_k\in \mathbb R^D $ 为特征 $ k $ 的embedding
。对于用户 $ u $ ,我们将该用户的memory matrix
定义为 $ \mathbf M^u = \left\{\mathbf{\vec m}_1^u,\mathbf{\vec m}_2^u,\cdots,\mathbf{\vec m}_K^u\right\}\in \mathbb R^{D\times K} $ ,其中 $ \mathbf{\vec m}_k^u\in \mathbb R^D $ 为用户 $ u $ 对特征 $ k $ 的偏好的embedding
。reading
操作:为了使得读取过程可微,我们采用soft-attention
机制来读取user memory matrix
。具体而言,在对user-item pair
$ (u,i) $ 进行预测时,我们首先通过以下方式计算item
$ i $ 与global latent feature table
中每个特征的相关性:其中
$ \beta $ 也是强度strength
超参数。我们也使用
$ z_{i,k} $ 以线性加权的方式合并用户 $ u $ 的memory matrix
中的slot
,从而计算该用户的memory embedding
:这里的
reading
操作和Item-level RUM
的reading
操作的区别在于注意力权重的生成:Item-level RUM
中, $ z_{i,k} $ 是基于 $ \mathbf{\vec q}_i $ 和 $ \mathbf M^u $ 得到的;而Feature-level RUM
中, $ z_{i,k} $ 是基于 $ \mathbf{\vec q}_i $ 和 $ \mathbf F $ 得到的。因此,Feature-level RUM
的参数更多、模型容量更高。writing
操作:受神经图灵机neural turing machine: NTM
的启发,在写入user memory matrix
$ \mathbf M^u $ 时,我们在添加新的信息之前先擦除 $ \mathbf M^u $ 。擦除:我们首先从
$ \mathbf{\vec q}_i $ 派生出一个 $ D $ 维的擦除向量erase vector
$ \mathbf{\vec e}_i = \sigma\left(\mathbf E^\top\mathbf{\vec q}_i + \mathbf{\vec b}_e\right) $ 。其中: $ \sigma(\cdot) $ 为逐元素的sigmoid
函数, $ \mathbf E $ 和 $ \mathbf{\vec b}_e $ 为待学习的擦除参数erase parameter
。给定注意力权重和擦除向量,feature preference memory
更新为:其中:
$ \odot $ 为逐元素乘积, $ \vec 1 $ 为全一的向量。因此:仅当该
location
的注意力权重和erase element
均为1
时,这个memory location
才会被重置为零;当该location
的注意力权重为零或者erase element
为零,那么memory vector
保持不变。添加:当擦除操作之后,我们使用一个
add vector
$ \mathbf{\vec a}_i\in \mathbb R^D $ 来更新feature preference memory
:其中:
$ \mathbf A $ 和 $ \mathbf{\vec b}_a $ 为待学习的add parameter
。
这种
erase-add
更新策略允许在学习过程中遗忘和加强user feature preference embedding
,并且模型可以通过学习erase parameter
和add parameter
来自动地决定哪些信号需要减弱、哪些信号需要加强。这种更新方式类似于
RNN
,按顺序地馈入 $ \mathbf{\vec q}_i $ 并更新状态 $ \mathbf M^u $ 。但是,RNN
之后一个状态而feature-level RUM
有 $ K $ 个状态。如果feature-level RUM
每次更新的是不同的slot
,那么一定程度上丢失序列信息。甚至feature-level RUM
不知道哪个item
是最近购买的,而根据现有的研究表明,最近购买的item
是相当重要的。
13.1.4 讨论和分析
为了提供对我们的方法的更多洞察,我们分析了
item-level RUM
和feature-level RUM
之间的关系。然后通过将其与matrix factorization: MF
和factorized personalized Markov chain: FPMC
进行比较,我们进一步将我们的方法与以前的方法联系起来。Item-level RUM
和Feature-level RUM
:一般而言,item-level RUM
和feature-level RUM
都是下图(c)
所示同一框架的特定实现。但是,它们从不同的角度管理用户历史信息。item-level RUM
将每个item
视为一个单元unit
,并将item embedding
直接存储在memory matrix
中,其中memory matrix
旨在捕获item-to-item
的转移模式transition pattern
。- 然而在
feature-level RUM
中,历史信息以feature-centered
的方式被利用。memory matrix
用于存储用户偏好在不同潜在维度上的embedding
,并且每个item
都被间接用于改变这些embedding
。
在实际应用中使用这些模型时,实际上存在
explanation-effectiveness
的trade-off
:item-level RUM
可以明确地告诉我们过去哪些item
对于当前决策更重要,这为系统提供了一定的可解释能力。- 然而,
feature-level RUM
在black box
中通过更细粒度的建模可以获得更好的性能。
我们将在后的内容讨论更多细节和实验结果。
RUM
和MF
的关系:当user memory network
设置为不可用时(即,user memory embedding
设置为全零的向量),RUM
将简化为传统的MF
。然而,通过启用user memory network
,RUM
可以从历史行为中收集有价值的信息,这可以提高Top-N
推荐任务的性能,如后面的实验所示。RUM
和FPMC
的关系:RUM
和FPMC
都利用用户的历史行为来预测当前行为。为了对每个用户建模item-to-item
转移模式,FPMC
构建张量分解模型,并在Bayesian personalized ranking: BPR
准则下进行优化。目标函数如下:其中:
$ \mathcal T_t^u $ 为用户 $ u $ 的第 $ t $ 个basket
, $ \Theta $ 为模型的参数集合。 $ \hat x_{u,t,i} $ 为模型预测用户 $ u $ 在第 $ t $ 个basket
中购买item
$ i $ 的可能性(非归一化的)为:
当应用于序列推荐时,
FPMC
中的每个basket
仅包含一个item
,因此有:其中:
$ \mathbf{\vec q}_{l} $ 为最近一次购买的item
(即时刻 $ t-1 $ 购买的item
) 的embedding
。为展示我们模型与
FPMC
的区别,我们考虑item-level RUM
并且仅使用一个memory slot
(即, $ K=1 $ ),然后设置 $ \text{merge}(\cdot) $ 中的权重超参数 $ \alpha = 1 $ 。然后我们有:通过将
RUM
的user intrinsic embedding
$ \mathbf{\vec p}_u^* $ 视为FPMC
中的user embedding
$ \mathbf{\vec p}_u $ ,则我们有 $ \hat y_{u,i} = \sigma\left(\hat x_{u,t,i}\right) $ ,则RUM
的损失函数可以重写为:对比
$ \mathcal L_\text{FPMC} $ 和 $ \mathcal L_\text{RUM} $ ,我们可以看到:FPMC
与一阶的item-level RUM
共享相同的预测函数(即, $ \hat x_{u,t,i} = \mathbf{\vec p}_u\cdot \mathbf{\vec q}_i + \mathbf{\vec q}_{l}\cdot \mathbf{\vec q}_i $ )。但是,它们的优化准则略有不同。对于三元组 $ (u,i,i^\prime) $ ,其中 $ (u,i) $ 是observed
的交互、 $ (u,i^\prime) $ 是unobserved
的交互:FPMC
通过最大化 $ u $ 在 $ i $ 和 $ i^\prime $ 上相似度的margin
来学习模型。RUM
分别尝试最大化 $ u $ 在 $ i $ 上的相似度、最小化 $ u $ 在 $ i^\prime $ 上的相似度来学习模型。
实际上,我们也可以使用
Bayesian personalized ranking: BPR
来优化RUM
,此时,FPMC
相当于一个一阶的item-level RUM
从而用于序列推荐。基于以上分析,我们可以看出
RUM
是一个非常通用的推荐框架。一方面,RUM
是许多现有推荐模型的推广。另一方面,RUM
可以通过将merge
函数、predict
函数、以及reading/writing
策略修改为其它的形式,从而为我们提供机会来探索其它有前景的模型。未来工作:
- 通过引入用户评论、产品图像等辅助信息,我们可以将
feature-level RUM
中的memory unit
与不同的语义对齐,因此我们可以构建一个更可解释的推荐系统。 - 此外,我们的
RUM
模型是一个具有灵活泛化能力的框架,因此我们可以研究其它类型的memory network
设计(而不仅限于这里的item-level RUM
和feature-level RUM
),从而使得我们的框架适应不同的应用场景。
- 通过引入用户评论、产品图像等辅助信息,我们可以将
13.2 实验
数据集:我们在
Amazon
数据集上进行了实验。该数据集包含1996
年5
月至2014
年7
月亚马逊的user-product
购买行为。我们在四个产品类别上评估我们的模型,包括即时视频Instant Video
、乐器Musical Instrument
、汽车Automotive
、婴儿护理Baby Care
。为了提供序列推荐,我们选择至少有
10
条购买记录的用户进行实验,最终数据集的统计数据如下表所示:评估指标:对于每个模型,我们定义为用户
$ u $ 生成的推荐列表为 $ \mathcal R_u = \left\{r_u^1,r_u^2,\cdots,r_u^{N}\right\} $ ,其中 $ N $ 为推荐列表的长度, $ r_u^i $ 为排名第 $ i $ 的item
的预测分数(根据预测分数进行降序排列,分数越高排则名越靠前)。假设测试集中用户
$ u $ 的交互item
集合为 $ \mathcal T_u $ ,用户集合为 $ \mathcal U $ ,那么我们采用以下评估指标:Precision (P), Recall (R), F1-score
:我们采用per-user
的均值而不是全局均值从而为了更好的可解释性:Hit-ratio(HR)
:命中率HR
给出了可以收到至少一个正确推荐的用户占比:其中:
$ \mathbb I(\cdot) $ 为一个示性函数,当 $ x \gt 0 $ 时 $ \mathbb I(x) = 1 $ 否则 $ \mathbb I(x) = 0 $ 。normalized discounted cumulative gain(NDCG)
:NDCG
通过考虑ground truth item
的排名来评估性能:其中:
$ Z $ 为归一化常数(它等于DCG@N
所有可能取值的最大值,此时每个grount-truth
都排在非ground-truth
之前)。DCG@N
是位于推荐列表中的ground-truth
收益的加权和,其中收益固定为1
,权重为 $ \frac{1}{\log_2(j+1)} $ , $ j $ 为ground-truth
的排名。最大的DCG@N
需要推荐列表满足两个条件:- 所有
ground-truth
都位于DCG@N
中,即累加的项足够多。 - 所有
ground-truth
的排名都最低,即 $ j $ 足够小。
- 所有
Baseline
方法:MostPopular: MP
:非个性化的、基于热门item
的推荐。其中item
的热门程度根据它在数据集中出现的频次来得到。BPR
:bayesian personalized ranking
,一种流行的top-N
推荐方法。我们采用矩阵分解作为BPR
的prediction component
。FPMC
:factorized personalized Markov chains
,它是基于马尔科夫链的、state-of-the-art
的序列推荐模型之一。在我们的数据集中,每个item
都被视为一个basket
。DREAM
:dynamic recurrent basket model
,它是RNN-based
的、state-of-the-art
的序列推荐方法。
配置:
- 在实现我们的方法时,模型参数首先根据均匀分布随机初始化,然后通过随机梯度下降
SGD
进行更新。SGD
的学习率是在{1, 0.1, 0.01, 0.001, 0.0001}
的范围内通过网格搜索来确定的。 memory slot
数量 $ K $ 根据经验设置为20
。merge
函数中设置权重超参数 $ \alpha = 0.2 $ ,并在实验中研究了使用不同 $ \alpha $ 值的效果。- 对于每个购买的
item
(即,positive instance
),我们从用户未交互的item
中均匀采样一个negative instance
。 embedding
维度 $ D $ 从{10, 20, 30, 40, 50}
范围内网格搜索来确定。- 正则化系数
$ \lambda $ 从{0.1, 0.01, 0.001, 0.0001}
范围内网格搜索来确定。 - 在我们的实验中,每个用户的购买记录按照购买时间排序,每个用户的前
70%
的item
用于训练、剩余的item
用于测试。 - 我们为每个用户推荐
5
个item
,即推荐列表长度 $ N=5 $ 。
- 在实现我们的方法时,模型参数首先根据均匀分布随机初始化,然后通过随机梯度下降
模型整体性能:我们首先研究默认设置(
$ \alpha=0.2 $ )下我们的item-level RUM
和feature-level RUM
的性能,如下表所示。可以看到:非个性化的
Most Popular
方法几乎在所有情况下都给出了最差的性能。由于它没有考虑用户的个性化信息,因此这一观察突出了个性化在推荐任务中的重要性。正如预期的那样,通过单独分析用户并直接优化
ranking-based
目标函数,在大多数情况下BPR
的性能优于Most Popular
。FPMC
和DREAM
在大多数指标上都可以达到比BPR
更好的性能,而这两种方法之间的差异不是很明显。考虑到BPR
和FPMC
之间的主要区别在于后者以序列方式对用户历史记录进行建模,这一观察结果验证了序列推荐有助于提高推荐性能。有趣的是,
DREAM
在instant video
上获得了比FPMC
更好的性能。DREAM
建模用户的multi-step behavior
而不是pair-wise behavior
,能够更好地捕获用户对视频偏好的长期兴趣。然而,在其它数据集上,
pair-wise
的短期影响可能更有助于预测next behavior
,但是DREAM
通过RNN
将之前的所有item
均等equally
地合并为单个hidden vector
,这可能会削弱序列推荐的pair-wise
信号。这突出了我们动机的重要性,即需要一个精心设计的机制来自动地确定哪些先前的
item
对当前兴趣预测很重要。在稠密数据集上,
multi-step behavior
可能更重要;在稀疏数据集上,pair-wise behavior
可能更重要。而instant video
数据集是这四个数据集中最稠密的。令人振奋的是,我们发现在大多数情况下,
item-level RUM
或feature-level RUM
的性能都优于最佳baseline
。这些结果表明了我们提出的序列推荐方法的有效性。这实际上并不惊讶,因为我们模型中的
memory
机制和reading/writing
设计为建模用户历史记录提供了更好的表达能力。通过在更细粒度的
level
上建模item
关系,feature-level RUM
在大多数指标上都优于item-level RUM
。这很直观,因为两个item
的功能可能不直接相关,但是它们可能具有一些共同的特征,这些特征可能会影响用户的决策,例如它们都属于同一个品牌。
权重超参数
$ \alpha $ 的影响:我们很好奇memory
是否有助于、以及如何帮助序列推荐。为此,我们分析权重超参数 $ \alpha $ 的影响,它决定了merge
函数中memory embedding
相对于intrinsic embedding
的重要性。具体而言,我们通过在
0 ~ 1
的范围内以0.1
的步长调整 $ \alpha $ 来研究我们的模型在F1@5
上的性能。结果如下图所示。可以看到:- 当
memory component
不可用(即 $ \alpha =0 $ ),feature-level RUM
和item-level RUM
都简化到相同的模型并共享相同的性能。在这种情况下,它们都在所有数据集中给出了不利的结果(但不一定是最差的)。 - 加入了
memory network
之后,模型性能大幅提升,并且在 $ \alpha = 0.2 $ 时效果最佳。 - 然而,当
memory embedding
的权重继续上升时,模型性能下降。这一观察在四个数据集上是一致的。
这些结果表明:考虑用户历史行为记录的序列影响
sequential influence
确实有助于提供更好的推荐,但是过分关注这个最近购买信号recent purchase signal
可能会削弱用户的内在偏好intrinsic preference
。这些结果进一步验证了学术界经常观察到的现象:短期用户偏好和长期用户偏好对于个性化推荐都很重要。- 当
Item-level RUM
中的AttentionWeights
的直觉:为了说明item-to-item
转移的直觉intuition
,我们在下图展示了一些示例用户(每个用户一个子图),这些用户是从Baby Care
数据集上带5
个memory slot
的item-level RUM
(即, $ K=5 $ ) 的结果中采样到的。这里只有
6
个case
,所以一些结论不具备说服力?最好给出一批case
的统计结果。当用户购买第
$ i $ 个item
时(对应于x
轴,用蓝色小网格表示),我们在该用户的子图中绘制一个长度为5
的列向量(如上面中间子图中,(15,14)
对应处的、高度为5
的细长条)。这个列向量对应于y
轴的位置 $ j $ 的向量元素对应于该用户在所购买的第 $ j $ 个item
上的注意力权重 $ \mathbf{\vec z} $ ( $ w_{i,k} = \mathbf{\vec q}_{v_i^u}\cdot \mathbf{\vec m}_k^u,z_{i,k} = \frac{\exp(\beta\times w_{i,k})}{\sum_j \exp(\beta\times w_{i,j})} $ ),颜色越深则表明对第 $ j $ 个item
的注意力越高。当用户继续购买item
时,最近购买的5
个item
被保留在memory
中,因此列向量填充的位置从左下角到右上角。基于这幅图,我们得到以下有趣的观察:通常,靠近对角线的网格的颜色较深。这意味着历史最有影响力的
item
通常是距离当前行为附近的item
。这进一步证实了item-level RUM
背后的假设,即:最近的行为对当前的决策更为重要。然而,最有影响力的
item
的具体位置并不总是最近的,这可以解释为什么FPMC
仅通过建模pair-wise
相邻行为并未取得良好的性能。此外,我们发现了两种有趣的用户行为模式:
某些行为序列是由最近行为连续触发的(用绿色实线框来表示),这符合
FPMC
的假设。我们称之为one-to-one
的行为模式。一个真实的例子是用户购买了一些婴儿配方奶粉,然后购买了奶瓶,这导致该用户接下来购买了奶嘴,而这些奶嘴导致该用户进一步购买了奶嘴清洁器。
某些行为序列中,多个行为主要受到相同的历史行为的影响(用棕色虚线框来表示),而这多个行为之间的关系并不那么重要。我们称之为
one-to-multiple
的行为模式。一个真实的例子是用户购买了婴儿床,然后该用户为婴儿床购买了防水床垫保护套、蚊帐,然后又购买了床铃来装饰婴儿床。在这种情况下,我们的带注意力机制的
RUM
模型可以根据大规模的用户购买记录自动学习先前item
的重要性。这优于假设相邻影响adjacent influence
的FPMC
,也优于合并所有先前行为的RNN
。
基于这些发现的模式,
item-level RUM
可以从序列行为的角度解释推荐系统,这与以前通常利用辅助信息(如用户文本评论)进行解释的方法不同。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论