数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 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
- 并发
一、MIND [2019](用于召回)
天猫是中国最大的
Business-To-Customer: B2C
电商平台,它在线提供十亿规模的商品,服务于十亿规模的用户。2018
年11
月11
日,著名的天猫全球购物节,商品交易总额Gross Merchandise Volume: GMV
大约为2130
亿元,较2017
年同期增长26.9%
。随着用户和商品的不断增长,帮助每个用户找到他 / 她可能感兴趣的商品变得越来越重要。近年来,天猫在开发个性化推荐系统方面付出了巨大的努力,极大地促进了用户体验的优化以及商业价值的提升。例如,占天猫总流量一半左右的移动天猫App
首页(如下图左图所示),就部署了推荐系统来展示个性化商品,从而满足客户的个性化需求。由于拥有十亿规模的用户和
item
,天猫的推荐流程分为matching
阶段和ranking
阶段两个阶段。matching
阶段负责检索与用户兴趣相关的数千个候选item
,然后ranking
阶段负责预测用户与这些候选item
交互的精确概率。对于这两个阶段,为了支持对满足用户兴趣的item
的高效检索,建模用户兴趣并得到捕获用户兴趣的用户representation
至关重要。然而,由于用户兴趣的多样性diversity
,在天猫上建模用户兴趣并非易事。平均而言,十亿级用户访问天猫,每个用户每天与数百种商品进行交互。交互的商品往往隶属不同的类目,暗示了用户兴趣的多样性。例如,如下图右图所示,不同用户的兴趣是不同的,同一用户也可能对不同的item
感兴趣。因此,捕获用户多样化兴趣diverse interests
的能力对天猫的推荐系统而言至关重要。注:下图中,左图的虚线矩形区域是天猫的十亿规模用户的个性化区域;右图是两个用户和不同类目商品的交互。
现有的推荐算法以不同的方式建模和表示用户兴趣:
基于协同过滤的方法通过历史交互
item
或潜在因子来表示用户兴趣,这些方法存在数据稀疏问题、或者计算复杂度太高的问题。基于深度学习的方法通常用低维
embedding
向量表示用户兴趣。例如,为YouTube
视频推荐提出的深度神经网络(YouTubeDNN
)通过一个固定长度的向量来表示每个用户,该向量是由用户历史行为转换而来。这可能是建模多样化兴趣的瓶颈,因为它的维度必须很高,从而表达天猫上的、大量的兴趣画像。深度兴趣网络
Deep Interest Network: DIN
通过注意力机制来捕获用户兴趣的多样性,使得用户在不同目标item
上的用户representation
不同。然而,注意力机制的采纳也使得具有十亿级item
的大规模应用在计算上受到限制,因为它需要重新计算每个目标item
的用户representation
,使得DIN
仅适用于ranking
阶段。
论文
《Multi-Interest Network with Dynamic Routing for Recommendation at Tmall》
关注于在matching
阶段对用户的多样化兴趣进行建模的问题。为了克服现有方法的局限性,论文提出了具有动态路由的多兴趣网络Multi-Interest Network with Dynamic routing: MIND
。MIND
用于工业级推荐系统在matching
阶段学习反映用户的多样化兴趣的representation
。为了推断用户
representation
向量,论文设计了一个称为多兴趣提取器层multi-interest extractor layer
,它利用动态路由将用户的历史行为自适应地聚合到用户representation
中。动态路由的过程可以视为软聚类soft-clustering
,它将用户的历史行为分为几个簇。每个历史行为簇进一步用于推断对应于一个特定兴趣的用户representation
向量。这样,对于特定的用户,MIND
输出多个represenation
向量,它们共同代表了用户的多样化兴趣。用户representation
向量只需要计算一次,就可以用于matching
阶段从而在十亿级item
中检索相关item
。总而言之,这项工作的主要贡献:- 为了从用户行为中捕获用户的不同兴趣,论文设计了多兴趣提取器层,该层利用动态路由自适应地将用户的历史行为聚合为用户
representation
向量。
通过使用多兴趣提取器层、以及新提出的标签感知注意力层
label-aware attention layer
所产出的用户representation
向量,论文为个性化推荐任务构建了一个深度神经网络。与现有的方法相比,MIND
在多个公共数据集和一个来自天猫的工业数据集上表现出优越的性能。- 为了在天猫部署
MIND
从而服务于十亿级用户,论文构建了一个系统来实现数据集采集、模型训练、以及在线serving
的整个pipeline
。部署的系统显著提高了移动天猫App
首页的点击率click-through rate: CTR
。目前MIND
已经在Mobile Tmall App
首页上部署从而处理主要的在线流量。
- 为了在天猫部署
相关工作:
深度学习推荐:受深度学习在计算机视觉和自然语言处理中成功应用的启发,人们投入了大量努力来开发基于深度学习的推荐算法。除了
《Deep neural networks for youtube recommendations》
和《Deep interest network for click-through rate prediction》
之外,各种类型的深度模型也得到了极大的关注。- 神经协同过滤
Neural Collaborative Filtering: NCF
、DeepFM
、和深度矩阵分解Deep Matrix Factorization Model: DMF
构建了一个由若干MLP
组成的神经网络,从而对用户和item
之间的交互进行建模。 《Personalized top-n sequential recommendation via convolutional sequence embedding》
通过提供一个统一且灵活的网络来捕获更多特征,为top-N
序列推荐提供了一个新颖的解决方案。
- 神经协同过滤
用户
Representation
:将用户表示为向量是推荐系统中常见的做法。传统方法将用户感兴趣的
item
、用户感兴趣的关键词、用户感兴趣的主题拼接起来,从而构成用户偏好向量。随着distributed representation learning
的出现,通过神经网络获取user embedding
得到了广泛的应用。《Learning user and product distributed representations using a sequence model for sentiment analysis》
使用RNN-GRU
从时间有序的review documents
中学习user embedding
。《User embedding for scholarly microblog recommendation》
从word embedding
向量中学习user embedding
向量,并将其应用于推荐学术微博scholarly microblog
。《Modelling Context with User Embeddings for Sarcasm Detection in Social Media》
提出了一种新的、基于卷积神经网络的模型,该模型显式地学习和利用user embedding
以及从话语utterances
中获得的特征。
胶囊网络
Capsule Network
:”胶囊” 的概念表示一组神经元组装而成的向量,它由Hinton
在2011
年首次提出。动态路由dynamic routing
用于学习胶囊之间连接的权重,该学习方法不是基于反向传播,而是基于Expectation-Maximization: EM
算法,从而克服几个缺陷并获得更好的准确性。与传统神经网络的这两个主要区别(由一组神经元组成、通过EM
算法学习)使得胶囊网络能够对部分和整体之间的关系进行编码,这在计算机视觉和自然语言处理方面是先进的。SegCaps
证明,胶囊可以比传统的CNN
更好地建模对象的空间关系。《Investigating Capsule Networks with Dynamic Routing for Text Classification》
研究了用于文本分类的胶囊网络,并提出了三种提高性能的策略。
1.1 模型
工业推荐系统
matching
阶段的目标是为每个用户 $ u\in \mathcal U $ 从十亿规模的item
库 $ \mathcal I $ 中检索仅包含数千个item
的item
子集,其中该子集中每个item
都和用户的兴趣相关。为了实现该目标,我们收集用户历史行为数据从而构建
matching
模型。具体而言,每个样本都可以用一个元组 $ (\mathcal I_u,\mathcal P_u,\mathcal F_i) $ ,其中:$ \mathcal I_u $ 表示用户 $ u $ 交互的
item
集合,也称作用户行为。$ \mathcal P_u $ 为用户 $ u $ 的基础画像,如性别、年龄。
$ \mathcal F_i $ 为
target item
$ i $ 的特征,如item id
、category id
。注意:
target item
$ i $ 不一定隶属于 $ \mathcal I_u $ ,即用户 $ u $ 不一定在target item
$ i $ 上有过互动行为。
$ \mathcal V_u=f_{\text{user}}(\mathcal I_u,\mathcal P_u) $MIND
的核心任务是学习将原始特征映射到用户representation
的函数,即:其中 $ \mathcal V_u=\left\{\mathbf{\vec v}_u^{(1)},\cdots,\mathbf{\vec v}_u^{(K)}\right\} $ 为用户 $ u $ 的 $ K $ 个
representation
向量,向量维度为 $ d $ 。当 $ K=1 $ 时,每个用户仅使用单个representation
向量,就像YouTube DNN
一样。此外,通过
$ \mathbf{\vec e}_i = f_{\text{item}}(\mathcal F_i) $embedding
函数获得target item
$ i $ 的representation
向量为:其中 $ \mathbf{\vec e}_i\in \mathbb R^{d } $ 表示
item
$ i $ 的representation
向量。 $ f_{\text{user}},f_{\text{item}} $ 的详细信息在后文说明。当学习了用户
$ f_{\text{score}}\left(\mathcal V_u,\mathbf{\vec e}_i\right)=\max_{1\le k\le K}\mathbf{\vec e}_i^\top\mathbf{\vec v}_u^{(k)} $representation
向量、item representation
向量之后,在线serving
时根据评分函数检索top N
候选item
:其中 $ N $ 时在
matching
阶段要检索的、预定义的item
数。注意: $ f_{\text{score}} $ 仅用于serving
阶段,而不用于训练阶段。如下图所示,
MIND
将用户行为序列、用户画像、label item
等特征作为输入,然后输出用户representation
从而用于推荐系统的matching
阶段来检索item
。MIND
主要由以下部分组成:Embedding&Pooling Layer
:来自输入层的id
特征通过embedding
层转换为embedding
,然后每个item
的各种id embedding
由池化层进一步取平均。Multi-Interest Extractor Layer
:用户行为embedding
被馈入多兴趣提取器层从而产生兴趣胶囊。通过将兴趣胶囊和用户画像embedding
拼接,然后经过几个ReLU
的全连接层进行转换,可以得到用户representation
向量。Label-aware Attention Layer
:在训练过程中引入一个额外的标签感知注意力层,从而指导训练过程。
最后在
serving
过程中,用户的多个representation
向量用于通过最近邻检索来检索item
。Embedding&Pooling Layer
:MIND
的输入包含三组:用户画像 $ \mathcal P_u $ 、用户行为 $ \mathcal I_u $ 、label item
$ \mathcal F_i $ ,每组输入包含几个具有极高维数的categorical id
特征。例如,item id
的数量约为数十亿个,因此我们采用了广泛使用的embedding
技术将这些ID
特征嵌入到低维稠密向量(也称作embedding
向量)中,从而显著减少了参数数量并简化了学习过程。- 对于来自用户画像 $ \mathcal P_u $ 的
id
特征(性别、年龄等),对相应的embedding
进行拼接从而构成用户画像embedding
$ \mathbf{\vec p}_u $ 。 - 对于
item
的item id
以及其它categorical id
(如品牌id
、店铺id
等),这些id
被证明有助于label item
$ \mathcal F_i $ 的冷启动,相应的embedding
会进一步通过均值池化层从而形成label item embedding
$ \mathbf{\vec e}_i $ ,即 $ f_{\text{item}} $ 函数。 - 对于来自用户行为 $ \mathcal I_u $ 的
item
,收集相应的item embedding
从而形成用户行为embedding
$ \mathcal E_u=\left\{\mathbf{\vec e}_i\mid i\in \mathcal I_u\right\} $ ,这些embedding
构成了用户行为embedding
矩阵 $ \mathbf E_u $ 。
- 对于来自用户画像 $ \mathcal P_u $ 的
1.1.1 Multi-Interest Extractor Layer
我们认为,用一个
representation
向量表示用户兴趣可能是捕获用户的多样化兴趣的瓶颈,因为我们必须将与用户的多样化兴趣相关的所有信息压缩到一个representation
向量中。因此,关于用户的不同兴趣的所有信息都被混合在一起,从而导致在matching
阶段的item
检索不准确。相反,我们采用多个
representation
向量分别表达用户的不同兴趣。通过这种方式,我们可以在matching
阶段分别考虑用户的多样化兴趣,从而可以更准确地检索各个方面的兴趣。为了学习多个
representation
向量,我们利用聚类过程将用户的历史行为分组为几个簇cluster
。我们预期来自同一个簇的item
将密切相关,并且共同代表了用户在某个特定方面的兴趣。这里,我们设计了多兴趣提取器层multi-interest extractor layer
,从而用于聚类历史行为,并得到结果聚类的representation
向量。由于多兴趣提取器层的设计受到最近提出的、用于胶囊网络
capsule network
中表示学习representation learning
的动态路由dynamic routing
的启发,因此我们首先回顾基础知识。动态路由
Dynamic Routing
:我们简单介绍用于胶囊网络表示学习的动态路由,这是一种以向量表示的、新型的神经元。假设我们有两层胶囊,分别将第一层胶囊和第二层胶囊称作低层胶囊
low-level capsule
、高层胶囊high-level capsule
。动态路由的目标是以迭代的方式在给定低层胶囊值的情况下计算高层胶囊值。在每次迭代中,给定低层胶囊 $ i\in \{1,2,\cdots,m\} $ 对应的值 $ \left\{\mathbf{\vec c}_1^{(l)},\cdots,\mathbf{\vec c}_m^{(l)}\right\} $ 、以及高层胶囊 $ j\in \{1,2,\cdots,n\} $ 对应的值 $ \left\{\mathbf{\vec c}_1^{(h)},\cdots,\mathbf{\vec c}_n^{(h)}\right\} $ ,其中 $ \mathbf{\vec c}_i^{(l)}\in \mathbb R^{N_l },\mathbf{\vec c}_j^{(h)}\in \mathbb R^{N_h } $ , $ N_l, N_h $ 分别为低层
value vector
和高层value vector
的维度。则低层胶囊 $ i $ 和高层胶囊 $ j $ 之间的
$ b_{i,j} =\left(\mathbf{\vec c}_j^{(h)}\right)^\top \mathbf S_{i,j} \mathbf{\vec c}_i^{(l)} $routing logit
$ b_{i,j} $ 为:其中 $ \mathbf S_{i,j}\in \mathbb R^{N_h\times N_l} $ 为待学习的双线性映射矩阵。
当计算好
$ \mathbf{\vec z}_j^{(h)}=\sum_{i=1}^m w_{i,j}\mathbf S_{i,j} \mathbf{\vec c}_i^{(l)},\quad w_{i,j} = \frac{\exp (b_{i,j})}{\sum_{k=1}^m \text{exp}(b_{i,k})}\\ \mathbf{\vec c}_j^{(h)} = \text{squash}\left(\mathbf{\vec z}_j^{(h)}\right)=\frac{\left\|\mathbf{\vec z}_j^{(h)}\right\|^2}{1+\left\|\mathbf{\vec z}_j^{(h)}\right\|^2}\times \frac{\mathbf{\vec z}_j^{(h)}}{\left\|\mathbf{\vec z}_j^{(h)}\right\|} $routing logit
之后,高层胶囊 $ j $ 的value vector
更新为:其中:
- $ \mathbf{\vec z}_j^{(h)} $ 为所有低层胶囊值向量的加权和。加权和的权重 $ w_{i,j} $ 表示低层胶囊 $ i $ 和高层胶囊 $ j $ 的权重,是通过对
routing logit
进行softmax
来计算的。 - 非线性的
squash
函数用于获得高层胶囊的值向量。
另外, $ b_{i,j} $ 的值将被初始化为零。
整个路由过程通常需要
3
轮迭代才会收敛。路由结束后,高层胶囊的值向量 $ \mathbf{\vec c}_j^{(h)} $ 通常会固定不变,并且可以用于下一层layer
的输入。- $ \mathbf{\vec z}_j^{(h)} $ 为所有低层胶囊值向量的加权和。加权和的权重 $ w_{i,j} $ 表示低层胶囊 $ i $ 和高层胶囊 $ j $ 的权重,是通过对
B2I
动态路由:简而言之胶囊是一种由向量表示的神经元,而不是普通神经网络中标量表示的神经元。我们期待基于向量的胶囊能够代表实体的不同属性,其中向量的方向代表一种属性、向量的长度代表该属性存在的概率。相应地,多兴趣提取器层的目标是学习用于表达用户兴趣、以及是否存在相应兴趣的
representation
。胶囊和兴趣representation
之间的语义联系促使我们将行为/兴趣representation
视为行为/兴趣胶囊,并采用动态路由从行为胶囊behavior capsule
中学习兴趣胶囊interest capsule
。然而,针对图像数据提出的原始路由算法并不能用于直接处理用户行为数据。因此,我们提出了
Behavior-to-Interest:B2I
动态路由,用于将用户的行为自适应地聚合到兴趣representation
向量中,这和原始路由算法在三个方面有所不同:共享双线性映射矩阵:基于两方面的考虑,我们将每对低层胶囊和高层胶囊
pair
对之间使用固定的双线性映射矩阵 $ \mathbf S $ ,而不是在原始动态路由中独立的双线性映射矩阵:- 一方面,用户行为序列的长度是可变的,天猫用户的行为序列长度从几十到几百,因此使用共享的双线性映射矩阵更为泛化
generalizable
。 - 另一方面,我们希望兴趣胶囊位于相同的向量空间中,而不同的双线性映射矩阵会将兴趣胶囊映射到不同的向量空间中。
因此,
$ b_{i,j} = \mathbf{\vec u}_j ^\top \mathbf S \mathbf{\vec e}_i ,\quad i\in \mathcal I_u,\;j\in \{1,2,\cdots,K\} $routing logit
计算为:其中:
- $ \mathbf{\vec e}_i \in \mathbb R^d $ 为
behavior item
$ i $ 的embedding
。 - $ \mathbf{\vec u}_j \in \mathbb R^d $ 为
interest capsule
$ j $ 的向量,一共有 $ K $ 个兴趣。 - 双线性映射矩阵 $ \mathbf S\in \mathbb R^{d\times d} $ 在每对行为胶囊和兴趣胶囊
pair
对之间共享。
- 一方面,用户行为序列的长度是可变的,天猫用户的行为序列长度从几十到几百,因此使用共享的双线性映射矩阵更为泛化
随机初始化
routing logit
:由于使用了共享的双线性映射矩阵 $ \mathbf S $ ,将routing logit
初始化为零导致所有用户具有相同的初始兴趣胶囊。然后在随后的每一轮迭代中,不同用户之间在当前轮次具有相同的兴趣胶囊。(注:不同迭代步之间的取值不同,但是同一迭代步之内的取值都相同)。为了缓解这种现象,我们从高斯分布 $ \mathcal N(0,\sigma^2) $ 中抽样一个随机矩阵作为初始
routing logit
,使得初始兴趣胶囊彼此不同。这和著名的K-Means
聚类算法的随机初始化类似。动态兴趣数量:由于不同用户的兴趣数量可能不同,因此我们引入了一种启发式规则,用于针对不同用户自适应地调整 $ K $ 的值。
具体而言,用户 $ u $ 的 $ K $ 值通过以下公式计算:
$ K_u^\prime = \max\left(1,\min\left(K,\log_2\left(|\mathcal I_u|\right)\right)\right) $这种调整兴趣数量的策略可以为那些兴趣较少的用户节省一些资源,包括计算资源、内存资源。
B2I Dynamic Routing
算法:输入:
- 用户 $ u $ 的行为
embedding
集合 $ \left\{\mathbf{\vec e}_i\mid i\in \mathcal I_u\right\} $ - 迭代轮次 $ r $
- 兴趣胶囊数量 $ K $
- 用户 $ u $ 的行为
输出:用户 $ u $ 的兴趣胶囊集合 $ \left\{\mathbf{\vec u}_j\mid j=1,\cdots,K_u^\prime \right\} $
算法步骤:
计算自适应的兴趣胶囊数量:
$ K_u^\prime = \max\left(1,\min\left(K,\log_2\left(|\mathcal I_u|\right)\right)\right) $对于所有的行为胶囊 $ i $ 和兴趣胶囊 $ j $ ,随机初始化 $ b_{i,j}\sim \mathcal N(0,\sigma^2) $
迭代 $ k=1,2,\cdots,r $ ,迭代步骤为:
- 对于所有行为胶囊 $ i $ : $ w_{i,j} = \text{softmax}(b_{i,j}) $
- 对于所有兴趣胶囊 $ j $ : $ \mathbf{\vec z}_j =\sum_{i\in \mathcal I_u} w_{i,j}\mathbf S \mathbf{\vec e}_i $
- 对于所有兴趣胶囊 $ j $ : $ \mathbf{\vec u}_j = \text{squash}\left(\mathbf{\vec z}_j \right)=\frac{\left\|\mathbf{\vec z}_j \right\|^2}{1+\left\|\mathbf{\vec z}_j \right\|^2}\times \frac{\mathbf{\vec z}_j }{\left\|\mathbf{\vec z}_j \right\|} $
- 对于所有的行为胶囊 $ i $ 和兴趣胶囊 $ j $ : $ b_{i,j} = b_{i,j} + \mathbf{\vec u}_j ^\top \mathbf S \mathbf{\vec e}_i $
返回 $ \left\{\mathbf{\vec u}_j\mid j=1,\cdots,K_u^\prime \right\} $
注:本质上它是在给定 $ m $ 行为胶囊的前提下找到 $ K $ 个兴趣胶囊,使得:
a. 兴趣胶囊 $ j $ 是所有行为胶囊的加权和。
b. 行为胶囊 $ i $ 对所有兴趣胶囊的权重是由兴趣胶囊进行
softmax
得到。这类似于二部图上的消息传递机制,因此迭代若干轮之后就会收敛。
这里 $ K $ 的选择是个难点:太小则不足以捕获用户多样化兴趣,太大则计算复杂度太高并引入噪音的兴趣胶囊。
注二:这里使用胶囊网络来进行聚类,本质是一个聚类过程。
1.1.2 Label-aware Attention Layer
通过多兴趣抽取层,我们从用户的行为
embedding
中生成了多个兴趣胶囊。不同的兴趣胶囊代表了用户兴趣的不同方面,而且相关的兴趣胶囊用于评估用户对特定item
的偏好。因此,在训练过程中我们基于scaled dot-product attention
设计了标签感知注意力层label-aware attention layer
。具体而言,对于一个目标
item
:- 首先,我们计算每个兴趣胶囊和目标
item embedding
之间的相似性。 - 然后,我们计算兴趣胶囊的加权和作为针对目标
item
的用户representation
向量,其中每个兴趣胶囊的权重由相应的相似性来确定。
- 首先,我们计算每个兴趣胶囊和目标
在标签感知注意力层中,
$ \mathbf{\vec v}_u(i) = \text{attention}\left(\mathbf{\vec e}_i,\mathbf V_u,\mathbf V_u\right)=\mathbf V_u\text{softmax}\left(\text{pow}\left(\mathbf V_u^\top\mathbf{\vec e}_i,p\right)\right) $label item
是query
,兴趣胶囊同时作为key
和value
。用户 $ u $ 关于item
$ i $ 的representation
为:其中:
pow()
函数表示逐元素的指数函数。p
是一个超参数作为指数函数的指数项,它用于调整注意力分布:当 $ p $ 接近于零时,每个兴趣胶囊倾向于收到均匀分布的注意力。
当 $ p $ 大于
1
时,随着 $ p $ 的增加,具有较大dot-product
的兴趣胶囊将获得越来越大的权重。考虑极端情况下当 $ p $ 为正无穷时,注意力机制将成为一种硬注意力
hard attention
:选择注意力最大的兴趣胶囊并忽略其它兴趣胶囊。这意味着挑选和目标
item
最相似的兴趣来作为标签感知的兴趣representation
。此时无需进行复杂的attention
计算,直接利用最近邻检索来获取。
在我们的实验中,我们发现
hard attention
可以加快收敛速度。
1.1.3 其它
$ \text{Pr}(i\mid u) = \text{Pr}\left(\mathbf{\vec e}_i\mid \mathbf{\vec v}_u(i)\right) = \frac{\exp\left(\mathbf{\vec v}_u(i)^\top\mathbf{\vec e}_i\right)}{\sum_{j\in \mathcal I }\exp\left(\mathbf{\vec v}_u(i)^\top\mathbf{\vec e}_j\right)} $Training
:得到用户representation
向量 $ \mathbf{\vec v}_u(i) $ 以及label item embedding
$ \mathbf{\vec e}_i $ 之后,我们计算用户 $ u $ 和label item
$ i $ 交互的概率为:训练
$ \mathcal L = \sum_{(u,i)\in \mathcal D} \log \text{Pr}(i\mid u) $MIND
的目标函数为:其中 $ \mathcal D $ 是包含所有
user-item
交互的训练数据的集合。注意,这里通过
softmax
函数变为一个多分类问题,因此没有负样本的概率。在多分类问题中,不存在负样本,只有二分类问题存在负样本。由于
item
规模在数十亿级,因此 $ \text{Pr}(i\mid u) $ 的分母计算量太大导致无法实现,因此我们采用采样的softmax
技术sampled softmax technique
。我们使用
Adam
优化器来训练MIND
。Serving
:除了标签感知注意力层之外的MIND
网络即为用户representation
映射函数 $ f_{\text{user}} $ 。在serving
期间:- 用户的行为序列和用户画像馈入 $ f_{\text{user}} $ 函数,从而为每个用户生成多个
representation
向量。 - 然后,我们使用这些
representation
向量通过最近邻方法检索top N
个item
,从而构成推荐系统matching
阶段的最终候选item
集。
注意:
- 当用户有新的行为时,这将改变用户的行为序列以及相应的用户
representation
向量,因此MIND
对于mathcing
阶段拥有实时个性化的能力。 - 每个用户有 $ K_u^\prime $ 个兴趣胶囊, $ \left\{\mathbf{\vec u}_j\mid j=1,\cdots,K_u^\prime \right\} $ ,这里会针对每个兴趣胶囊进行检索然后合并。
- 用户的行为序列和用户画像馈入 $ f_{\text{user}} $ 函数,从而为每个用户生成多个
部署:天猫上
MIND
的实现和部署如下所示:当用户启动天猫
APP
时,推荐请求发送到天猫个性化平台Tmall Personality Platform
,该服务器集群集成了很多插件模块并提供天猫在线推荐服务。天猫个性化平台检索用户的近期行为,并将其发送到用户兴趣提取器
User Interest Extractor
,后者是实现MIND
的主要模块,用于将用户行为转换为多用户兴趣multiple user interest
。随后,召回引擎
Recall Engine
将搜索和用户兴趣的embedding
向量最邻近的item
。由不同兴趣触发的item
将融合为候选item
,并根据它们与用户兴趣的相似性进行排序。由于基于
MIND
服务的有效性,通过用户兴趣提取器和召回引擎从数十亿个item
库中选择数千个候选item
的整个过程可以在不到15ms
的时间内完成。Ranking Service
对这些候选item
中的top 1000
个item
进行打分(在item
数量和延迟时间之间进行权衡),该服务通过一系列特征来预测CTR
。最后天猫个性化平台完成推荐列表,并向用户展示推荐结果。
用户兴趣提取器和
Ranking Service
都是在Model Training Platform
上使用100
个GPU
进行训练,训练可以在8
个小时内完成。得益于Model Training Platform
的出色性能,深度模型天级更新。这里我们对
MIND
和两种现有方法之间的关系做一些说明,说明它们的相似之处和不同之处。YouTube DNN
:MIND
和YouTube DNN
都利用深度神经网络对行为数据进行建模从而生成用户representation
。这些representation
用于工业推荐系统matching
阶段的大规模item
检索。但是,
YouTube DNN
使用一个向量来代表用户,而MIND
使用多个向量。当用户兴趣数量K=1
时,MIND
会退化为YouTube DNN
,因此MIND
可以视为YouTube DNN
的推广。DIN
:在捕获用户的多样化兴趣方面,MIND
和DIN
具有相同的目标。但是,这两种方法在实现目标的方式和适用性方面有所不同。- 为了处理多样化兴趣,
DIN
在item-level
应用了注意力机制;而MIND
使用动态路由生成兴趣胶囊,并在interest-level
考虑了多样性。(interest
比item
更高一个level
)。 - 此外,
DIN
重点聚焦于ranking
阶段,因为它处理上千个item
;而MIND
作用于matching
阶段,处理数十亿个item
。
- 为了处理多样化兴趣,
未来方向:
- 第一个方向是融合有关用户行为序列的更多信息,如行为时间等。
- 第二个方向是优化动态路由的初始化方案,参考
K-means++
初始化方案,从而实现更好的用户representation
。
1.2 实验
1.2.1 离线评估
这里我们在多个数据集上离线评估了
MIND
和现有方法的推荐准确率。数据集:
Amazon Books
数据集:它是电商推荐领域中使用最广的公共数据集之一。我们仅保留至少评论10
次的item
、以及至少评论10
个item
的用户。Tmall Data
数据集:它是从Mobile Tmall App
中随机采样的200
万天猫用户,并获得这些用户在10
天内的历史行为。我们保留至少600
个用户点击的item
。
这些数据集的统计信息如下表所示:
评估指标:我们选择
next item prediction
问题(即预测用户的下一个交互)来评估方法的性能,因为这是推荐系统mathcing
阶段的核心任务。我们将每个数据集的
user-item
交互数据按照19:1
的比例随机划分为训练集、测试集。然后对于每个用户,我们将用户交互的、测试集中的item
作为目标item
,该item
之前所有交互的item
作为用户历史行为。我们根据用户历史行为来预测目标item
。我们采用命中率
$ \text{HitRate@N} = \frac{\sum_{(u,i)\in \mathcal D_{\text{test}}}I(\text{target item occurs in top N})}{|\mathcal D_{\text{test}}|} $hit rate
作为衡量推荐效果的主要指标,定义为:其中:
- $ \mathcal D_{\text{test}} $ 表示由用户和
target item
$ (u,i) $ 组成的测试集。 - $ I(\cdot) $ 为示性函数, $ I(\text{true})=1, I(\text{false}) = 0 $ 。
target item occurs in top N
表示目标item
是否在预估多分类概率中的top N
。由于模型采用softmax
输出层,因此可以考虑目标item
的输出概率在所有item
输出概率中的位置。
我们在每个数据集上对
embedding
向量维度 $ d $ 、用户兴趣数 $ K $ 进行超参数调优,并使用最佳超参数对每种方法进行测试以便进行公平的比较。- $ \mathcal D_{\text{test}} $ 表示由用户和
baseline
方法:WALS
:即加权最小二乘法Weighted Alternating Least Square
。它是一种经典的矩阵分解算法,用于将user-item
交互矩阵分解为用户的隐藏因子hidden factor
和item
的隐藏因子 。然后基于用户的隐藏因子和target item
的隐藏因子之间的相似性进行推荐。YouTube DNN
:它是用于工业推荐系统的最成功的深度学习方法之一。MaxMF
:它引入了一种高度可扩展的方法来学习非线性潜在因子分解,从而对用户的多个兴趣进行建模。
实验结果如下表所示,我们给出了不同方法在两个数据集上
N=10,50,100
的命中率结果。其中:黑体表示最佳性能;HP
表示性能最佳的超参数,K
表示兴趣数量,d
表示embedding
维度;括号中的百分比表示相对于YouTube DNN
的相对提升。可以看到:
矩阵分解方法
WALS
被其它方法击败,这表明深度学习方法对于改进推荐系统mathcing
阶段的强大作用。但是,即使没有使用深度学习方法,
MaxMF
的性能也要比WALS
好得多。这可以用以下事实来解释:MaxMF
将标准MF
泛化为非线性模型,并对于每个用户采用了多个representation
向量。可以观察到:采用用户的多个
representation
向量的方法(MaxMF-K-interest
、MIND-K-interest
) 通常要比其它方法(WALS
、YouTube DNN
、MIND-1-interest
)表现更好。因此,事实证明:使用用户的多个
representation
向量是一种对用户的不同兴趣进行建模、并提高推荐准确性的有效方法。此外,我们可以观察到,由于天猫的用户倾向于表现出更多的兴趣,因此由于用户的多个
representation
向量引入的改善对于TmallData
更为显著。多样性的增加也可以通过每个数据集的最佳
K
值来反映,其中TmallData
的最佳K
大于Amazon Books
的最佳K
值。
和
YouTube DNN
相比,MIND-1-interest
的提高表明:动态路由是一种比均值池化更好的池化策略。对比
MaxMF
和MIND-K-interest
的结果,这验证了通过动态路由从用户行为中提取多个兴趣优于在MaxMF
中使用非线性建模策略。这可以归结于两点:- 多兴趣提取器层利用聚类过程生成兴趣的
representation
,从而实现用户的更精确的representation
。 - 标签感知注意力层使
target item
在用户的多个representation
向量上分配注意力,从而使得用户兴趣和target item
之间的匹配更加准确。
- 多兴趣提取器层利用聚类过程生成兴趣的
这里我们在
Amazon Books
上进行两个实验,从而研究多兴趣提取器层和标签感知注意力层中超参数的影响。routing logit
的初始化:多兴趣提取器层采用的routing logit
的随机初始化和K-means
质心的初始化相似,其中初始聚类中心的分布对于最终聚类结果的影响很大。由于routing logit
是根据高斯分布 $ \mathcal N(0,\sigma^2) $ 初始化的,因此我们担心 $ \sigma $ 的不同取值可能导致不同的收敛性从而影响性能。为了研究 $ \sigma $ 的影响,我们使用了三个不同的 $ \sigma $ (0.1, 1, 5
)来初始化routing logit
$ b_{i,j} $ 。实验结果如下图所示。可以看到:不同 $ \sigma $ 的每条曲线几乎都重叠。该结果表明:
MIND
对于 $ \sigma $ 的取值具有鲁棒性。因此我们在实际应用中选择 $ \sigma=1 $ 是合理的。标签感知注意力层的幂次:如前所示,标签感知注意力中的幂次 $ p $ 控制每个兴趣在组合的标签感知兴趣表示
label-aware interest representation
中所占的比例。为了研究 $ p $ 的影响,我们比较了 当 $ p $ 从 $ 0\rightarrow \infty $ 时MIND
的性能变化。实验结果如下图所示。可以看到:
p=0
时的性能相对而言要差很多。原因是当 $ p=0 $ 时每个兴趣都具有相同的注意力,因此组合的兴趣表示combined interest representation
等于没有参考label
时的兴趣representation
均值。- 当 $ p\ge 1 $ 时,注意力得分与兴趣
representation
向量和目标item
的embedding
之间相似度成比例,这使得组合的兴趣representation
为所有兴趣representation
的加权和。 - 另外,随着 $ p $ 的增加性能会变得更好,因为和目标
item
相似度更高的兴趣representation
获得了更大的注意力。 - 最后,当 $ p=\infty $ 时变成了
hard attention scheme
。此时和目标item
最相似的兴趣representation
将主导组合的兴趣representation
,从而使得MIND
收敛得更快并且表现最好。
1.2.2 在线评估
我们在线部署
MIND
来处理天猫首页上的实际流量从而进行在线实验,为期一周。为了公平地进行比较,在matching
阶段部署的所有方法后续都使用相同的ranking
过程。我们评估指标是最终的CTR
效果指标。baseline
方法:item-based CF
:它是服务于在线主流量的基本matching
方法。YouTube DNN
:它是著名的基于深度学习的matching
方法。
我们将所有对比方法部署在
A/B test
框架中,每种方法检索一千个候选item
,然后将候选item
送入ranking
阶段以进行最终推荐。实验结果如下图所示,我们得出以下结论:
MIND
优于item-based CF
和YouTube DNN
,这表明MIND
产生了更好的用户representation
。通过长期的实践优化,
item-based CF
的效果要比YouTube DNN
更好,而MIND-1-interest
也超越了YouTube DNN
。一个非常明显的趋势是:随着兴趣数量从
1
增加到5
,MIND
的性能会变好。当兴趣数量达到5
时,MIND
性能达到峰值,随后继续增加K
值则CTR
保持不变。例如,K=7
相对于K=5
带来的提升几乎可以忽略。因此对于天猫用户来讲,最佳的用户兴趣数量是
5~7
,这表明了用户兴趣的平均多样化程度。具有动态兴趣数的
MIND
与K=7
的MIND
性能相当。因此动态兴趣数机制不会带来CTR
收益,但是在实验过程中我们发现该方案可以降低serving
的成本,这有利于大规模的service
(如天猫),并且在实践中更易于采用。
总而言之,在线实验证明了
MIND
可以实现更好的解决方案,从而为具有不同兴趣的用户建模,并且可以显著提高整个推荐系统的效果。
1.2.3 Case Study
耦合系数
coupling coefficient
:行为胶囊和兴趣胶囊之间的耦合系数可以衡量行为对于兴趣的隶属程度。这里我们将这些耦合系数可视化,从而表明兴趣提取过程是可解释的。下图给出了从天猫每日活跃用户中随机选择的两个用户相关的耦合系数,每一行对应一个兴趣胶囊、每一列对应一个行为。每一类行为在相应的兴趣上具有最大的耦合系数。注意:这两个用户具有不同粒度的兴趣。
可以看到:
- 用户
C
(上部)已经和4
类商品(耳机、小吃、手提包、衣服)进行了交互,每类商品在一个兴趣胶囊上具有最大的耦合系数,并形成了相应的兴趣。 - 用户
D
(下部)仅对衣服感兴趣,但是可以从行为中解析到3
个细粒度的兴趣(毛衣、大衣、羽绒服)。
从这些结果中我们可以看到:用户行为的每个类别被聚类在一起,并形成了相应的兴趣
representation
向量。- 用户
item
分布:在serving
阶段,和用户兴趣相似的item
将通过最近邻搜索来被检索到。我们根据兴趣检索的item
和对应兴趣的相似度,从而可视化相似度的分布。下图给出了用户
C
检索的item
的结果。其中:上面的四个轴显示了基于MIND
的四个兴趣召回的item
;最下面的轴显示了基于YouTube DNN
召回的item
。item
根据它们和兴趣的相似性在轴的相应位置上。我们已经通过min-max
归一化将相似性缩放到0.0 ~1.0
之间,并四舍五入到最近的0.05
。图中每个点都是由该区域内
item
组成,因此每个点的大小表示具有相应相似度的item
数。 我们还给出了从所有候选item
中随机选择的一些item
。不出所料:
MIND
召回的item
和相应的兴趣密切相关;而YouTube DNN
召回的item
类别相差很大,并且与用户行为的相似性较低。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论