@日久见人心:论建模用户长期兴趣的几种姿势

链接: 日久见人心:论建模用户长期兴趣的几种姿势 - 知乎

[[行为序列建模]] 分类在线提取和离线提取

[[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时影响小;
    • 整个过程的时间复杂度是 :-> O(LBd)O(L * B * d),L=user sequence length, B=batch_size, d=embedding dimension
      到目前so far so good。但是当要考虑用户长期历史,L由百变成了万,O(LBd)O(L * B * d) 是在线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,开销就小多了,足以支持在线推理和训练。
    [[SIM]] 特点是 :-> 先过滤,再注意

  • [[Hard Search]]

    • 拿target item的 某个attribute(e.g., category) 在用户完整的长期历史中搜索,得到 有相同attribute 的historical item组成SBS。

    • 为了加速搜索过程,阿里还特别设计了User Behavior Tree(UBT)这一数据结构。UBT其实就是一个双层的map,#card

      • 第一层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

    • 至于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。如前所述,这么做的时间复杂度是 :-> O(LBd)O(L * B * d) ,是无法上线的。
      • 先离线将所有historical item embedding建立好索引。在线推理或训练时,拿target item embedding在索引中搜索的复杂度能够降为 :-> O(log(L)Bd)O(\log (L) * B * d)
      • SIM原文倒是没提拿item embedding建立 索引 的事,是在接下来要讲的ETA文章中提到,SIM[21]also tried to building an offline inverted index based on the pre-trained embedding.
        到目前为止,又是so far so good了,按SIM论文的说法,SIM(我猜应该是SIM hard-search)能够轻松建模长度=10000的用户行为序列,甚至长度= 54000 的行为序列也不在话下。
        SIM是两阶段法,第一阶段就用target item搜索用户长期行为序列,缩减成SBS;第二阶段,才将SBS和其他特征(比如用户短期序列)一起建模ctr model。问题就出在,这第一阶段“搜索”与第二阶段“ctr建模”之间存在gap。
  • 第一个gap:两阶段的目标不一致 #card

    • ctr model目标是将ctr预测准

    • 而SIM hard search所使用的“attribute相同”原则,和这个目标的关系不那么直接

  • 第二个gap:两阶段的更新频率不一致 #card

    • ctr model需要以online learning的方式频繁更新,以捕捉用户实时的兴趣变化

    • 而无论SIM hard/soft-search中所使用的索引都是离线建立的

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

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

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

  • SIM-soft的方法是用pre-trained embedding离线建立索引,时间复杂度降为 :-> O(log(L)Bd)O(log(L) * B * d)

  • 而这一次,阿里想摆脱离线建立索引带来的两阶段gap,无法改变L那一项,因此只能优化d。

[[End-to-End Target Attention]] :一套Embedding,既过滤,也注意

  • ETA用 **SimHash ** 算法,避免用dot product检验target item与historical item之间的相似性,太耗时间

    • 将原本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的时间复杂度就降为了 O(LB1)O(L * B * 1) #card

    • 由于top-K retrieval的时间缩短了,就允许我们无须离线建立索引,而是在线上直接将ctr model中最新的item embedding用于top-K retrieval了。
  • 看上去,很好很强大。但是毕竟ETA中top-k retrieval与L呈线性关系,对序列长度的限制还是很大的。所以,SIM论文中在industry dataset实验时,所取的用户行为序列的长度还过万,而在ETA中序列长度就下降到了 千级
    [[离线提取长期兴趣]]

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

  • 在线派,以阿里的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而提出的
      • 如何将检验两个向量相似度的时间复杂度由O(d)降低为O(1) #card

        • 通过SimHash,ETA用[[hamming distance]]取代dot-product
      • 因为检验两向量的相似度被大大加速, 我们可以用同一套item embedding,既用于第2阶段的ctr预估,也用于第1阶段的Top-K similar item retrieval ,从而削除了两个阶段间的information gap

  • 离线派

    • “在线派”技术很好很强大,但是需要对 工程架构 做很多优化改造,才能满足上线要求。
    • “离线派”技术路线,将复杂耗时的“提取用户长期兴趣”这一工作由线上转移到线下,不必对线上架构做大幅改造,容易上线。#card
      • “离线派”技术路线,或手工挖掘用户在某一个长时间段上的各种指标,或离线将表达用户长期兴趣的embedding训练好,缓存起来,供线上模型调用。

      • 在某些场景中,“离线派”技术路线取得了比“在线派”技术路线更好的效果。

作者

Ryen Xiang

发布于

2025-01-12

更新于

2025-04-29

许可协议


网络回响

评论