问题

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

回答
在推荐系统中,如何从深度学习的角度去捕捉用户“长短不一”的兴趣点,这是一个非常有意思,也极具挑战性的课题。我们不只是想了解用户当下在看什么,更想知道他过去积累的那些“底蕴”——那些可能被遗忘,但一旦被触动,依然会产生强烈共鸣的偏好。这就像一个人,既有当下热门话题的热情,也有怀旧经典带来的深度喜爱。

要解决这个问题,我们不能简单地把用户最近的点击行为扔进模型就完事了。这就像只看到了水面上的浪花,却忽略了深层洋流的涌动。我们需要更精细的“时间感知”能力,以及对信息不同“生命周期”的理解。

核心思路:构建多层级、动态的时间序列表示

最直接的切入点是,将用户的行为历史看作一个时间序列。然后,我们希望通过深度学习模型,从这个序列中提取出既能反映近期热点,又能捕捉长期沉淀的特征。

具体来说,可以从以下几个层面入手:

1. 区分“即时兴趣”与“长期沉淀”的序列构建

即时兴趣序列 (Shortterm Interest Sequence): 这部分关注用户近期(比如最近一次会话,或者过去几个小时、一天内)的行为。这些行为往往能直接反映用户当前想要寻找什么。
如何构建: 可以直接抓取用户最近的N个物品点击、浏览、购买等行为,形成一个顺序。例如,用户最近看了A商品,然后是B商品,接着是C商品。
模型处理: 这部分序列非常适合用循环神经网络 (RNN) 的变种,如 LSTM 或 GRU 来处理。这些模型擅长捕捉序列中的依赖关系,比如从A到B的跳转,可能暗示了某种关联或替代偏好。GRU通常在效率上更优一些,并且在很多场景下表现不输LSTM。
还可以结合注意力机制 (Attention Mechanism): 即使是近期行为,也并非所有行为对当前决策都同等重要。引入自注意力(SelfAttention)机制,可以帮助模型学习“看”用户近期行为时,哪些行为更具指示性。比如,用户刚刚购买了一件运动鞋,那么他紧接着浏览运动服的可能性就很高,这里的运动鞋就是重要的“锚点”。

长期兴趣序列 (Longterm Interest Sequence): 这部分关注的是用户更久远的行为历史,可能跨越了几天、几周甚至几个月。这些行为反映了用户更稳定、更深层的一些偏好。
如何构建: 这就有点挑战了。如果直接把所有历史行为都放进去,序列会非常长,模型计算量爆炸,而且很多陈旧信息可能已经失效。
采样策略: 可以采用滑动窗口的方式,选取固定长度的历史行为。
聚类或主题提取: 我们可以尝试将用户长期的行为序列进行聚类,或者提取出其中的“主题”或“品类”偏好。比如,用户过去几个月一直频繁购买户外装备,即使最近几天在看电影,其“户外爱好者”的长期兴趣依然很重要。
“代表性”行为的选取: 我们可以设计一些机制来识别那些“有代表性”的长期行为。例如,对某个品类进行高频率、高满意度的购买(或者评分)。
模型处理:
Transformer Encoder: Transformer的自注意力机制在捕捉长距离依赖方面非常强大,非常适合处理较长的序列。它可以“跳跃”式地连接序列中的元素,找到那些可能相隔很远但意义重大的行为。
多头注意力 (Multihead Attention): 使用多头注意力可以从不同的“视角”去理解序列,捕捉到不同类型的长期关联。比如,一个头可能关注“相似品类”,另一个头可能关注“相关品牌”。
记忆网络 (Memory Networks): 可以考虑引入外部记忆模块,将一些关键的长期兴趣信息“存储”起来,供模型随时调用。

2. 融合与协同:让长短期兴趣“对话”

仅仅分开处理长短期兴趣还不够,我们需要让它们之间产生联动。

混合模型架构:
并行处理,然后融合: 最直接的方法是,分别用不同的模型(如GRU处理短期,Transformer处理长期)提取特征,然后将它们的输出向量进行拼接(Concatenation),或者通过一个简单的全连接层进行融合。
门控机制 (Gating Mechanism): 我们可以设计一个“门”,来控制短期兴趣和长期兴趣在最终推荐决策中所占的比重。这个门可以由一些上下文信息或用户整体状态来驱动。例如,当用户正在进行“探索性”浏览时,短期兴趣的比重可以增加;当用户在寻找“熟悉类型”的商品时,长期兴趣的重要性可以被放大。
交叉注意力 (CrossAttention): 让短期兴趣表示去“查询”长期兴趣表示,或者反之。比如,用户最近在浏览“科幻小说”,而他的长期兴趣是“历史传记”,那么我们可以通过交叉注意力,让模型关注“历史背景下的科幻故事”这类可能的交叉点。

基于行为的动态权重调整:
序列中的时间衰减: 在处理序列时,我们可以引入时间衰减因子,让越近的行为权重越高,越远的行为权重越低。但这个衰减不是线性的,而是可以通过模型学习得到的。
显式时间特征: 不仅是行为的顺序,还可以将行为发生的时间戳作为显式特征输入模型。比如,在一个行为序列中,除了物品ID,还包含其发生的时间。模型可以通过这些时间信息学习到“离上次购买该品类有多久了”这样的概念。

3. 特殊情况与优化

冷启动用户/物品: 对于新用户,我们没有足够的历史行为,这时候模型的长期兴趣捕捉能力会很弱。我们可以依靠平台的整体热门信息、用户注册时填写的少量信息,或者通过协同过滤等传统方法来弥补。对于新物品,也可以通过其属性特征,以及与已有物品的关联来获得初始的偏好。

兴趣漂移: 用户的兴趣不是一成不变的,可能会发生快速的“漂移”。模型需要有能力感知到这种变化。例如,如果用户连续几天都在关注某个全新的领域,那么模型应该能够快速地将这部分新兴趣纳入考量,并且可能“稀释”掉一些过时的长期兴趣。RNN和Transformer的动态更新能力在这方面有所帮助。

计算效率: 处理用户长序列时,效率是个大问题。
近似近邻搜索 (Approximate Nearest Neighbor Search): 对于非常长的历史行为,可以考虑使用近似方法来找到与当前行为“相似”的历史行为,而不是遍历所有历史。
分层处理: 可以将用户的行为按照时间粒度进行分层,比如每天、每周形成一个摘要,然后在大模型中处理这些摘要序列。

举个更具体的例子:

假设一个用户行为序列是:

[item1@t1, item2@t2, item3@t3, item4@t4, item5@t5, item6@t6]

短期兴趣: 我们可以用一个GRU模型来处理 `[item4, item5, item6]` 这段最近的行为。GRU会给出一个向量 `h_short`,代表了用户最近的意图。
长期兴趣: 假设在 `t1` 时刻,用户购买了“运动鞋”,在 `t2` 时刻购买了“运动服”。在 `t5` 时刻,又浏览了“运动手表”。我们希望模型能捕捉到用户“运动装备爱好者”的这个长期标签。
可以考虑用一个Transformer模型处理整个序列 `[item1, item2, ..., item6]`。Transformer通过自注意力机制,可能会发现 `item1` (运动鞋) 和 `item3` (运动服) 的关联,以及 `item6` (运动手表) 和 `item1` 的相关性。最终输出一个向量 `h_long`。
融合: 最后,将 `h_short` 和 `h_long` 拼接起来,送入一个预测层来计算用户对下一个物品的喜好度。或者,设计一个门控网络,让 `h_short` 和 `h_long` 以不同的权重组合。

总结来说,捕捉长短期兴趣的关键在于:

1. 序列表示的精细化: 不仅仅是行为的顺序,还要考虑行为发生的时间、发生的场景等。
2. 模型结构的适配: 选择能够有效处理时间序列、捕捉长短距离依赖的深度学习模型(RNN家族,Transformer)。
3. 长短期信息的有效融合: 设计机制让这些不同时间尺度的兴趣能够协同工作,相互影响。
4. 动态性与适应性: 模型能够随着用户兴趣的变化而调整,及时捕获新的偏好,同时保留稳定的长期偏好。

这是一个持续演进的领域,新的模型和方法层出不穷,但核心思想始终围绕着如何更智能、更全面地理解用户的行为脉络。

网友意见

user avatar

前言

众所周知,用户的行为序列,即用户最近交互(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 -

类似的话题

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有