百科问答小站 logo
百科问答小站 font logo



在推荐系统中,如何较好的采用深度学习方法获取用户长短期兴趣? 第1页

  

user avatar   si-ta-xi 网友的相关建议: 
      

前言

众所周知,用户的行为序列,即用户最近交互(e.g., 点击、观看、购买、......)过的N个物料,是建模用户兴趣的最有效的信息。

  • 一般来说,当N<200时,被称为用户的短期行为序列,从中提取出的是用户的短期兴趣。这个是目前被使用最多的。
    • 优点是由于相对较短,能够上一些较复杂的模型来提取兴趣,latency能够满足在线推理与在线训练的实时性要求;
    • 缺点是,同样由于较短,可能包含用户一些临时起意的作为,噪声相对较大。另外,在电商等环境下,用户周期性的消费作为,无法在短期序列中体现出来。
  • 如果N达到千或万这个量级,这个就算用户的长期行为序列了,提取出的就是用户的长期兴趣
    • 优点是,能够让我们更全面地审视用户,过滤一些临时起意的噪声,提取出来的用户兴趣是稳定的
    • 缺点就是,长期历史的存储和计算都要耗费大量资源,直接套用“提取短期兴趣”的复杂模型,可能无法满足在线推理和在线训练的实时性要求。

但是毕竟好处多多,建模用户的长期行为序列,挖掘用户长期兴趣,自然也就变成了推荐算法开卷的下一个重要方向。本文将对目前已经公开发表的几种“提取用户长期兴趣”的作法进行总结。 根据用户的长期兴趣是在线上提取,还是离线已经提取好,这些作法被我划分为“在线派”和“离线派”两大类。

在线提取长期兴趣

“在线派”几乎都是阿里发表的成果,阿里再次引领了推荐算法发展的潮流。

DIN:缘起“千物千面”

故事还要从阿里的经典模型Deep Interest Network (DIN)讲起:

  • DIN之前,对于用户历史,大家都是先对sequence中的每个item id进行embedding,再把所有item embedding pooling成一个向量。这种作法将用户所有历史一视同仁,胡子眉毛一把抓。
  • DIN的思路是,当给用户呈现不同的target item时,会唤醒用户历史中的不同部分,因此history item embedding在聚合成user interest embedding时应该有不同的权重。
  • DIN用target item和每个historical item做attention来确定这个权重
    • 和target item相似的historical item,权重高一些,在组成user interest embedding时发挥更大使用;
    • 反之,和target item不相似的historical item embedding,权重低,组成user interest时影响小;
    • 整个过程的时间复杂度是,L=user sequence length, B=batch_size, d=embedding dimension

SIM:先过滤,再注意

到目前so far so good。但是当要考虑用户长期历史,L由百变成了万,是在线serving和training都无法接受的。此时,阿里的解决思路是:

  • DIN用target item给所有historical item加权或降权,算是一种soft filtering
  • 既然在long sequence上再做soft filtering的代价太大,干脆就直接上hard filtering,在long sequence中筛选(搜索)出与target item相关的一个Sub Behavior Sequence(SBS)。
  • SBS的长度一般是百级,相较于原始万级的long sequence大大缩短,再在SBS上实施DIN,开销就小多了,足以支持在线推理和训练。

沿着这一思路,Search-based Interest Model(SIM)应运而生,这里的Search就是上文据说的hard filtering。根据search的方式,又分为hard search和soft search两种。

Hard-Search

  • 拿target item的某个attribute(e.g., category)在用户完整的长期历史中搜索,得到有相同attribute的historical item组成SBS。
  • 为了加速这一过程,阿里还特别设计了User Behavior Tree(UBT)这一数据结构。UBT其实就是一个双层的map,第一层map的key是userId,第二层map的key=category,真正的value就是某个用户在某个category下的SBS。
  • 虽然简单,但是据论文中所说,效果和soft-search差不多,反而性能优秀,维护方便。

Soft-Search

正如我在《无中生有:论推荐算法中的Embedding思想》中指出的,hard-search拿attribute进行精确匹配,不如用embedding进行“模糊查找”的扩展性好。于是,很自然想到用target item embedding在long sequence中查找与之距离最近的K个historical item embedding,组成SBS,这就是所谓的soft-search。

至于item embedding从何而来?SIM的原文里,是只用target item和user long history sequence组成一个ctr model。模型训练完的复产品就是item embedding。

除此之外,用双塔召回/粗排得到的item embedding行不行?用word2vec算法套用在user behavior sequence得到的item embedding,行不行?我觉得,理论上是没毛病的,都可以试一试,让GAUC和online A/B testing来告诉我们具体用哪种是最好的。

但是值得注意的是,SIM的论文里指出,用户长短期行为历史的数据分布差异较大,建模user short-term interest的item embedding不要复用于建模user long-term interest。也就是说,同一个item id在用于建模长期兴趣与短期兴趣时,对应完全不同的item embedding

基于同样的原因,如果你想用双塔模型的item embedding来进行soft-search,你的双塔模型最好也拿long user behavior sequence来训练。如果嫌long user behavior sequence拖慢训练速度,可以从中采样一部分。

另外在long user behavior sequence中搜索时,肯定不会拿target item embedding与每个historical item embedding逐一做dot product。如前所述,这么做的时间复杂度是,是无法上线的。肯定也是,先离线将所有historical item embedding建立好索引。在线推理或训练时,拿target item embedding在索引中搜索的复杂度能够降为。(SIM原文倒是没提拿item embedding建立索引的事,是在接下来要讲的ETA文章中提到,SIM [21] also tried to building an offline inverted index based on the pre-trained embedding.)

ETA:一套Embedding,既过滤,也注意

到目前为止,又是so far so good了,按SIM论文的说法,SIM(我猜应该是SIM hard-search)能够轻松建模长度=10000的用户行为序列,甚至长度=54000的行为序列也不在话下。

但是无奈如此强大的SIM,也有美中不足之处。SIM是两阶段法,第一阶段就用target item搜索用户长期行为序列,缩减成SBS;第二阶段,才将SBS和其他特征(比如用户短期序列)一起建模ctr model。问题就出在,这第一阶段“搜索”与第二阶段“ctr建模”之间存在gap

  • 第一个gap:两阶段的目标不一致
    • ctr model目标是将ctr预测准
    • 而SIM hard search所使用的“attribute相同”原则,和这个目标的关系不那么直接
  • 第二个gap:两阶段的更新频率不一致
    • ctr model需要以online learning的方式频繁更新,以捕捉用户实时的兴趣变化
    • 而无论SIM hard/soft-search中所使用的索引都是离线建立的

为了弥补以上两个gap,阿里希望拿第二阶段ctr model所使用的item embedding来进行第一阶段的Top-K retrieval(也就是search)

  • ctr model用到的item embedding为最终优化目标负责,拿它进行top-k retrieval,消除了两阶段在目标上的gap。
  • 训练的时候,ctr model优化了item embedding,也就优化了top-k retreival,消除了两阶段在更新频率上的gap。

但是如前所述,拿target item embedding(也是来自ctr model)与long sequence逐一做点积来search top-k similar items,时间复杂度=,无法上线。

  • SIM-soft的方法是用pre-trained embedding离线建立索引,时间复杂度降为
  • 而这一次,阿里想摆脱离线建立索引带来的两阶段gap,无法改变L那一项,因此只能优化d。

沿着这一思路,阿里在2021年发表《End-to-End User Behavior Retrieval in Click-Through Rate Prediction Model》,提出了End-to-End Target Attention(ETA)。其核心思想是:

  • 用dot product检验target item与historical item之间的相似性,太耗时间
  • ETA用SimHash算法,将原本d-dim的item embedding压缩成一个log(m)-bits的整数,称为embedding的hash fingerprint。
  • 然后,embedding之间的相似性可以fingerprint之间hamming distance来衡量,时间复杂度由dot-product的O(d)降为O(1)。
  • 某次online learning结束之后,导出item embedding的时候,各item embedding的fingerprint就提前计算好。这样online serving时,top-k retrieval的时间复杂度就降为了
  • 由于top-K retrieval的时间缩短了,就允许我们无须离线建立索引,而是在线上直接将ctr model中最新的item embedding用于top-K retrieval了。

看上去,很好很强大。但是毕竟ETA中top-k retrieval与L呈线性关系,对序列长度的限制还是很大的。所以,SIM论文中在industry dataset实验时,所取的用户行为序列的长度还过万,而在ETA中序列长度就下降到了千级。

离线提取长期兴趣

上一节介绍了阿里在建模用户长期行为序列上的一系列工作,由DIN-->SIM-->ETA,这一路下来,阿里独领风骚。

但是,阿里的这些方法,有多少能够拿来为我所用?这个就不好说了。SIM和ETA能够在阿里的环境下取得成功,依靠的是算法+工程架构的co-design。阿里的很多算法都是真正的“大杀器”,没有强大的工程架构团队的支持,把代码公开给你,你都未必能把耗时降到满足线上实时要求,而这些优化细节就全在论文以外了。这就好比乌克兰,曾几何时,人家也是世界第三核武器大国。最后还不是自己主动销毁所有核武器,自废武功。因为乌克兰也清楚,没那个实力,留着“大杀器”反而是个祸害,给自己找麻烦。

想要建模用户的长期行为序列,但又没有阿里那么强的工程架构能力,抄不了SIM/ETA的作业,怎么办?别急,除了阿里的“在线派”技术路线,我们可以离线将用户的长期兴趣挖掘好,缓存起来供线上模型调用。这种“离线派”技术路线,将费时的“挖掘用户长期兴趣”这一任务由线上转移到线下,省却了优化线上架构的麻烦,实现起来更加简单便捷

人工统计长期兴趣

在我的《刀功:谈推荐系统特征工程中的几个高级技巧》一文中,就提到手工挖掘用户长期兴趣,在某些场合下代替SIM这种“强但重”的模型。在那篇文章中,我提出可以从6个维度来构建用户画像,其中就包括“时间”维度。

比如,我们可以按天统计,用户对某个tag,被展示了多少次,点击了多少次,保存在HDFS上。然后再起一个Spark任务,我们就能统计出每个用户针对某一个tag,在过去1周、过去1个月的CTR。

我们甚至可以统计出,用户自首次使用app至今,在某个物料维度上的后验指标,只不过要考虑“时间衰减”。比如:

  • 某个用户自首次使用app到昨天,对某个tag,一共被展示次,点击了次
  • 今天对这个tag,向该用户展示了次,点击了次
  • 则新的统计数据,,, 是衰减系数
  • 该用户对这个tag的CTR=

预训练长期兴趣embedding

这个方法的一般流程是:

  • 在主模型之外,预训练一个模型,该模型输入user long behavior sequence,输出一个embedding代表用户长期兴趣。
  • 训练好这个辅助模型之后,将行为序列超过一定长度的用户,都过一遍这个模型。得到代表这些用户长期兴趣的embedding,存入redis之类的KV数据库。
  • predict server或train server需要用户长期兴趣时,就拿userId检索redis,得到代表长期兴趣的embedding,喂入模型。
  • 这个预训练模型的更新和各user interest embedding的更新只需要天级更新就可以了。因为用户刚刚发生的行为属于短期兴趣的建模范畴,留给DIN等方法去应付。

需要注意,这个用户兴趣的预训练模型,与SIM模型的区别:

  • SIM-soft也需要离线预训练,但是它训练的是item embedding,而非user interest embedding。目的只是为了筛选出SBS。
  • SIM中,long user interest embedding还是通过target item与SBS的attention得到的。因此SIM中的用户长期兴趣依然是针对不同target item“千物千面”的。
  • 但是这里的用户兴趣预训练模型,与target item完全无关,无法做到“千物千面”。

美团的超长序列预训练

美团建模超长用户行为序列,遵循的就是这种“离线派”技术路线。这方面没有找到公开的论文,只找到了美团博客上的一篇文章《广告深度预估技术在美团到店场景下的突破与畅想》。这篇文章没有文字版,只有图片,而且参考文献《Trilateral Spatiotemporal Attention Network for User Behavior Modeling in Location-based Search》根本不涉及超长序列建模的内容。看来,美团的超长序列建模算法真的很成功,所以被当成了公司机密保护了起来,怕别人知道,切~~~。

从以上有限的信息可以知道:

  • 美团将超长行为序列压缩成embedding的模型是离线预训练
  • 预训练好的user interest embedding放入缓存供线上调用,天级更新
  • 看样子,美团根据channel将用户行为序列拆分成若干子序列,每个子序列学出一个user interest embedding。
  • 这种离线预训练用户长期兴趣的方法,在美团场景下,取得了比SIM更好的效果。

但是可惜看不到美团是如何预训练出用户长期兴趣embedding的。这里,我贡献两个idea:

  • 孪生网络。
    • 将用户历史序列,随机划分为两个子序列,各自喂入双塔的一边。
    • 同一个用户的两个half history通过tower得到的embedding应该是相近的,而与另一个用户的某个half history得到的embedding相距较远。
    • 这样的双塔训练好之后,将用户完整的长期行为序列喂入一边的tower,得到的embedding就表示压缩后的用户长期兴趣。
  • 用同一个用户的长期行为序列预测短期行为序列
    • 还是双塔模型,用户的长期行为序列喂入left tower,短期行为序列喂入right tower
    • 一个用户的long-term interest embedding,应该与同一用户的short-term interest embedding相近,而与另一个用户的short-term interest embedding相距较远。
    • 双塔模型训练好之后,将用户的全部长期行为序列喂入left tower,得到表示用户长期兴趣的embedding。

阿里的MIMN

MIMN是阿里最早在长期行为序列建模的尝试,所以,阿里早期走的也是“离线派”路线,后来才随着工程架构的成熟,才在“在线派”的技术路线上越走越远。

MIMN与上边的讲过的“离线派”技术路线差不多,也是将负责建模user interest的模块从主模型剥离出来,单独部署成User Interest Center。

但是在“如何得到user interest embedding”这个问题上,MIMN设计了一个非常复杂的Memory Network。我觉得他们设计得如此复杂,

  • 是为了在这个memory network部署上线后,一旦用户有了新的动作,将新动作喂入memory network,user interest embedding就能获得实时更新。
  • 而不似离线预训练的方法,离线获得user interest embedding灌入redis之后,在下次更新前(e.g.,一天后),user interest embedding就固定不变了。 其实我不觉得long-term user interest embedding需要实时更新,因为随着用户新动作更新的是short-term user interest embedding,那是用户短期兴趣模块的工作。

总结

本文总结了建模用户长期行为序列的几种姿势。按照提取用户长期兴趣发生在“线上”还是“线下”,相关算法可以划分为“在线派”和“离线派”两大技术路线:

  • 在线派,以阿里的SIM/ETA为代表
    • SIM算是DIN“千物千面”思想在用户长期行为序列上的延伸。
      • 为了节省时间,DIN中target item给historical item加权或降权的soft-filtering,被替换成Search这种hard-filtering。
      • SIM采用两阶段法:第1阶段,先拿target item筛选user long behavior sequence,只保留其中与target item相关的item组成SBS;第2阶段,再拿target item在SBS上进行attention,实现用户长期兴趣表达的“千物千面”。
      • 为了加速Search,SIM需要根据attribute或pre-trained embedding在user long behavior sequence上建立索引。
    • ETA是为了解决SIM两个阶段之间的information gap而提出的
      • 通过SimHash,ETA用hamming distance取代dot-product检验两个向量相似度,将时间复杂度由O(d)降低为O(1)
      • 因为检验两向量的相似度被大大加速,我们可以用同一套item embedding,既用于第2阶段的ctr预估,也用于第1阶段的Top-K similar item retrieval,从而削除了两个阶段间的information gap
  • 离线派
    • “在线派”技术很好很强大,但是需要对工程架构做很多优化改造,才能满足上线要求。
    • “离线派”技术路线,将复杂耗时的“提取用户长期兴趣”这一工作由线上转移到线下,不必对线上架构做大幅改造,容易上线。
    • “离线派”技术路线,或手工挖掘用户在某一个长时间段上的各种指标,或离线将表达用户长期兴趣的embedding训练好,缓存起来,供线上模型调用。
    • 在某些场景中,“离线派”技术路线取得了比“在线派”技术路线更好的效果。

- END -




  

相关话题

  如何看待指出 神经网络的训练罪魁祸首是退化一文? 
  人工智能在生活中的应用都有哪些? 
  贝叶斯深度学习是什么,和传统神经网络有何不同? 
  多模态方面,有哪些牛组值得我们follow他们的工作? 
  基于对比学习(Contrastive Learning)的文本表示模型【为什么】能学到语义【相似】度? 
  CVPR 2018 有什么值得关注的亮点? 
  为什么多标签分类(不是多类分类)损失函数可以使用Binary Cross Entropy? 
  为什么softmax很少会出现[0.5,0.5]? 
  目前有哪些比较成功的人工智能应用? 
  有人说「真正的人工智能至少还要几百年才能实现」,真的是这样吗? 

前一个讨论
怎样理解富坚义博在《全职猎人》中对小杰的塑造,为什么那么多人不喜欢小杰?
下一个讨论
GBDT算法的细节问题?





© 2024-11-09 - tinynew.org. All Rights Reserved.
© 2024-11-09 - tinynew.org. 保留所有权利