这周又是居家办公,难得有时间可以好好儿梳理下之前的工作。今天想和大家聊聊我们在MIND多兴趣召回上面的一些实战经验。
背景
目前,深度学习U2I推荐召回模型已经在业内得到了广泛的应用与研究。大多数U2I召回模型都基于双塔结构,典型的就是DSSM。DSSM主要将user信息和item信息分别通过MLP生成user向量和item向量。然后线上通过user向量去检索topk 的item向量来做召回。然而,在很多场景,用户的兴趣往往是多样的,单一的用户向量无法充分描述用户。多兴趣召回通过用多个兴趣向量来表示用户,从而实现用户的多兴趣建模。
近些年,在用户多兴趣建模这里也有不少的研究。如阿里巴巴团队提出的MIND,首次引入胶囊网络来生成多个用户兴趣向量;ComiRec,提出self-attentive机制来提取用户多兴趣;Octopus,提出自适应学习用户多兴趣数量,并提出一种分配用户多兴趣重要度的方法。本文主要想和大家介绍一下MIND的原理以及我们在实战中的一些改进思路与调优经验。
MIND原理
MIND关注的是召回阶段的用户多兴趣建模,提出采用胶囊网络的动态路由算法来获取用户的多兴趣表示,将用户的行为聚合成多个兴趣向量表示,每个兴趣向量代表不同的用户兴趣,再分别用各个向量去候选池里检索top k的item。
(1) MIND模型的整体结构
MIND的输入是用户行为和用户画像特征,输出是用户的多兴趣向量。用户行为是N个与用户有交互(包括点击、购买等)的itemid序列,每个itemid有类目id(cateid)、店铺id(shopid)、品牌id(brandid)等特征,这些特征经过动态路由的方法得到多个兴趣向量,然后再与用户画像特征拼接经多层ReLU生成最后的用户多兴趣向量。Item侧的特征是商品的多个标签特征(类目id,店铺id,品牌id等),这些特征经过多层MLP生成item embedding。训练阶段MIND使用一个Label-aware Attention层辅助训练。线上召回的时候,使用用户的多个兴趣向量分别去离线计算好的ElasticFaiss库里检索top k的item。
(2) Embedding&&Pooling层
Embedding层的输入主要包括用户属性、用户行为、目标item标签。特征都是由一个或多个id构成,需要Embedding成低维稠密的向量。
a. 用户属性特征将其embedding进行拼接
b. 目标item标签,将所有特征的embedding进行Average Pooling,得到item 的embedding
c. 用户行为特征,则是一个item id 的list
…
后续内容详见:
MIND多兴趣召回实战(一)
本文主要给大家详细介绍了MIND的基本原理和我们的相关实战经验。另外还有一些对于MIND模型的改进优化会在下一篇文章中继续为大家介绍,希望大家能持续关注。
欢迎大家关注微信公众号:计算广告那些事儿,除了原创文章之外,也会不定期和大家分享业内大牛的文章哈!