@日久见人心:论建模用户长期兴趣的几种姿势
[[行为序列建模]] 分类在线提取和离线提取
[[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
到目前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,开销就小多了,足以支持在线推理和训练。
[[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。如前所述,这么做的时间复杂度是 :-> ,是无法上线的。
- 先离线将所有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.
到目前为止,又是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,时间复杂度= ,无法上线
-
SIM-soft的方法是用pre-trained embedding离线建立索引,时间复杂度降为 :->
-
而这一次,阿里想摆脱离线建立索引带来的两阶段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的时间复杂度就降为了 #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
-
- SIM算是DIN“千物千面”思想在用户长期行为序列上的延伸
-
离线派
- “在线派”技术很好很强大,但是需要对 工程架构 做很多优化改造,才能满足上线要求。
- “离线派”技术路线,将复杂耗时的“提取用户长期兴趣”这一工作由线上转移到线下,不必对线上架构做大幅改造,容易上线。#card
-
“离线派”技术路线,或手工挖掘用户在某一个长时间段上的各种指标,或离线将表达用户长期兴趣的embedding训练好,缓存起来,供线上模型调用。
-
在某些场景中,“离线派”技术路线取得了比“在线派”技术路线更好的效果。
-
@日久见人心:论建模用户长期兴趣的几种姿势
https://blog.xiang578.com/post/logseq/@日久见人心:论建模用户长期兴趣的几种姿势.html