# Multi-Interest Network with Dynamic Routing forRecommendation at Tmall
目的
推荐系统中,现有深度学习模型大多是将用户的兴趣表示为一个向量,并不能很准确的反应用户的真实兴趣,如果将其应用到召回阶段,会影响召回的效果,因此考虑将用户的兴趣表示为多个向量,每个向量代表一个兴趣;
整体思路
1. 为了表示用户的多个兴趣,提出了多兴趣抽取层,该层应用到了胶囊网络结构,通过动态路由聚合用户的历史行为序列,并结合用户属性特征,得到兴趣胶囊,每个胶囊表示一个用户兴趣;
2. 得到用户多个兴趣后,使用attention机制得到用户的最终表示,在attention中,query是候选item,key、value是用户的多个兴趣表示;
3. 计算用户表示向量和候选item向量之间的内积,取top N;
实现细节
符号定义:
I u I_u Iu:用户行为序列;
e i e_i ei:用户行为序列中第 i i i个item的embedding表示;
P u P_u Pu:用户属性信息;
V u = f u s e r ( I u , P u ) = ( v u 1 , . . . v u k ) V_u=f_{user}(I_u,P_u)=(v_u^1,...v_u^k) Vu=fuser(Iu,Pu)=(vu1,...vuk),表示用户的多个兴趣向量, k k k表示兴趣的个数;
e t e_t et:候选item的embedding表示(文中也用 e i e_i ei表示,感觉看的有点乱,本文中,我们使用 e t e_t et来表示);
Embedding & Pooling Layer
这块主要是为了强调对用户类别特征和item类别特征的处理方式:
用户类别特征:如性别,职业等,将其对应的embedding向量concat起来;
item类别特征:如品牌id,店铺id等,将其映射到相同维度的embedding向量,然后使用average pooling进行处理;
Multi-Interest Extractor Layer
1.动态路由:
胶囊网络是一种基于向量的神经元,替代了之前的基于标量的神经元,旨在通过向量表示一个实体的不同特征(感觉有点像多头机制的概念),胶囊的方向表示一个特性,长度表示该特性的概率,对应的,在每个特性表示一个用户兴趣,长度表示该兴趣的重要度。假设有两层胶囊,动态路由的目的是给定低层胶囊网络 c i l ∈ R N l × 1 , i ∈ 1 , . . . , m c_i^l\in\mathbb R^{N_l\times 1}, i\in{1, ...,m} cil∈RN