首先,用来学习 item embedding 的方法大部分是可以迁移到学习 user embedding 中去的,因为 user 和 item 在推荐系统中处在大致对称的两个位置(在矩阵分解中显得尤为明显),但是 user 和 item 还是有区别的。
从建模的角度来说,item 的属性一般是不太随时间变化而变化的,而 user 则不同,user 的属性和兴趣会动态变化。
从目标的角度来说,推荐系统的最终目标是为 user 推荐 item,所以 user 始终是模型的中心。
想理清楚如何做 user embedding 其实并不困难。我们对 user 的所有认知其实只包括两部分的信息:
user 的内在属性
user 的外部联系
而user的外部联系,又分为:
user 对 user 的联系
user 对 item 的联系
因此,我们对 user 的刻画也就分成了三部分:
这些信息也叫做 demographic information(人口统计学信息,因为这些就是做人口普查时需要统计的量)。
一般而言,推荐系统模型是将这些属性离散化并拼接起来,作为神经网络的原始输入,参考YoutubeNet[1]。值得一提的是,某些模型设计了比拼接更复杂的方法,比如在Wide&Deep [2]中,wide component就设计了一种组合特征(combinatorial feature)。组合特征是指考虑多个单维特征的组合结果。例如,如果我们有关于用户的 gender 和 language 的特征,那么我们可以设计一维新的特征叫 gender=F&language=en,它只有在这个 user 的 gender=F 且 language=en 时才为1。
组合特征可以显式地刻画特征之间的关联,但是需要一些手工设计,并且会增加模型的复杂度。关于组合特征,可以参考 Factorization Machines(分解机)系列工作,如LibFM [3]、DeepFM [4]、xDeepFM [5]等。
这一块也是推荐系统中的一个大分类,叫 social recommendation。
这种方法假设 user 之间存在一个 social network,这其实在实际应用中也是非常常见的,几乎所有主流的互联网应用都会允许用户之间存在好友或关注的关系。
social network 中有一个同质性假设(homophily assumption),也就是相似的人之间会更可能有边连接。基于这个假设,social recommendation 的核心就是使用一个 user 的邻居信息来推断该 user 的信息。
一种简单的做法就是让一个 user 的 embedding 和他的邻居的 embedding 相似,这可以通过在矩阵分解的基础上对一条边两端的 user 的 embedding 之间的差值设计一个损失项来实现[6]。
从前端的角度来看,用 social network 去提高推荐效果也是一个比较好的思路,比如“你的朋友也购买了xx”,“你的朋友对该电影的打分的平均值为xx”等。这是因为一般而言 user 对于他的 social friends 的信任度是比较高的。
这已经延伸到了可解释推荐系统(explainable recommender systems)的领域,就此打住。
因为推荐系统中 user-item 之间的关系是核心,所以这也是做 user embedding 要考虑的核心问题。
只要不是一个完全新的 user,他就会有自己的点击/观看/收藏/购买历史记录,因此,这里的问题就变成了如何用 user 的历史记录来刻画这个 user。
一种简单的做法当然是将 user 的历史记录平均起来,作为这个 user 的embedding。但是实际上,我们有一些更好的考量:
(1) 考虑时间因素,刻画用户在时间轴上的变化,这也是推荐系统中的一大类,叫sequential/session-based recommendation [7, 8],主要依赖于RNN模型去进行用户建模。
(2)考虑用户兴趣因素,刻画用户对不同 topic、style 的兴趣差异。这也是最近很多研究的出发点,按照技术角度来说也叫 attention-based recommendation [9]。
另外值得提的两点:
(1) 在某些工作里是没有 user embedding 的,user 完全由 item embedding 刻画 [10]。
(2) user 和 item 的联系不仅仅只有0/1的交互信息,还有评论等 UGC(user generated content),想用上这些评论,就和 sentiment analysis,aspect mining,natural language processing 等领域相关,也就此打住。
至于推荐系统的上限是否取决于矩阵分解的效果,你可以把矩阵分解当成是一种 pre-training,可以在后续模型中对 user embedding 再进行 fine-tuning 即可。
[1] Deep Neural Networks for YouTube Recommendations.
[2] Wide & Deep Learning for Recommender Systems.
[3] Factorization Machines with LibFM.
[4] DeepFM: A Factorization-Machine based Neural Network for CTR Prediction.
[5] xDeepFM: Combining Explicit and Implicit Feature Interactions for Recommender Systems.
[6] A Matrix Factorization Technique with Trust Propagation for Recommendation in Social Networks.
[7] A Dynamic Recurrent Model for Next Basket Recommendation.
[8] Session-based Recommendations with Recurrent Neural Networks.
[9] Deep Interest Network for Click-Through Rate Prediction.
[10] RippleNet: Propagating User Preferences on the Knowledge Graph for Recommender Systems.
[11] https://www.zhihu.com/question/336110178/answer/823523924