建设网站产品图片显示不全,公司网站功能性建设有哪些,做网站的客户在哪找,如何检测wordpress后台慢的原因1. 为什么用户行为序列是推荐系统的“灵魂”#xff1f; 大家好#xff0c;我是老张#xff0c;在推荐系统这个行当里摸爬滚打了十来年#xff0c;从最早的协同过滤一路跟到现在的深度学习大模型。今天想和大家掏心窝子聊聊#xff0c;在像小红书这样的真实工业级推荐系统…1. 为什么用户行为序列是推荐系统的“灵魂”大家好我是老张在推荐系统这个行当里摸爬滚打了十来年从最早的协同过滤一路跟到现在的深度学习大模型。今天想和大家掏心窝子聊聊在像小红书这样的真实工业级推荐系统里用户行为序列建模这个技术是怎么一步步“进化”的。这玩意儿说白了就是让机器学会“读”懂你的历史记录猜你接下来想看啥。听起来简单但里面的门道可深了。想象一下你打开小红书首页给你推了一篇“周末露营攻略”。机器为啥推这个它可能看了你最近三天搜了“帐篷怎么选”、点赞了“户外烧烤食谱”、收藏了“北京周边露营地”。这一连串的动作就是一个行为序列。早期的推荐系统很“笨”它可能只看你最后点了个啥LastN或者把你所有的历史行为揉成一团算个平均。这就好比一个不称职的图书管理员你刚还了一本《python入门》他立马又塞给你一本《python入门》完全不管你后面借的《机器学习实战》和《深度学习》已经暴露了你想进阶的意图。在小红书这样内容极度丰富、用户兴趣快速变化的场景里这种“笨”方法显然不够用。用户上一秒还在看美妆教程下一秒可能就搜索起了宠物用品兴趣点是多峰且动态的。怎么从这一长串、有时甚至杂乱无章的历史点击里精准地抓住用户当前最强烈的兴趣信号就是用户行为序列建模要解决的核心问题。它的演进本质上就是推荐系统从“看热闹”到“懂门道”的过程。接下来我就带你从最基础的LastN开始一路看到业界前沿的SIM模型拆解它们的原理、实战中的坑以及我们是怎么根据不同的业务场景做选择的。2. 起点简单粗暴但实用的LastN方法2.1 LastN到底是什么怎么实现LastN顾名思义就是只取用户最近的N个交互行为比如点击、点赞、收藏来代表用户。这是最直观、也是最容易上线的方法。我最早做推荐的时候用的就是这招。它的逻辑极其简单用户最近的行为最能反映他/她当下的兴趣。比如N10我们就把用户最近点击的10个物品的ID或者它们的特征向量拿出来作为用户兴趣的表示。在模型里我们怎么用这10个ID呢最常见的是Pooling池化操作。# 一个简化的代码示例说明LastN Mean Pooling 的思想 import torch import torch.nn as nn class LastNModel(nn.Module): def __init__(self, item_embedding_dim): super().__init__() # 假设我们有一个预训练好的物品嵌入表 self.item_embedding nn.Embedding(num_embeddings1000000, embedding_dimitem_embedding_dim) def forward(self, last_n_item_ids): # last_n_item_ids: [batch_size, N] # 1. 查找这N个物品的嵌入向量 item_embeddings self.item_embedding(last_n_item_ids) # [batch_size, N, embed_dim] # 2. 沿着N这个维度做平均池化得到一个综合的用户向量 user_embedding torch.mean(item_embeddings, dim1) # [batch_size, embed_dim] return user_embedding上面代码里的torch.mean就是平均池化。除了平均也可以用最大池化Max Pooling或者直接拼接Concat。得到这个user_embedding后就可以和候选物品的embedding做内积或者其他操作来计算匹配分数了。2.2 LastN的优缺点与实战心得优点太明显了简单高效资源消耗低只需要存储和计算最近N个行为内存和计算开销小。在召回阶段面对海量候选集效率是第一位的LastN至今在很多公司的召回模块里依然占有一席之地。实时性强用户一个新行为产生能立刻更新序列影响下一次推荐。这对于新闻、短视频这类时效性强的场景很重要。不容易受“历史包袱”影响有些用户很久以前的行为可能已经过时了比如几年前喜欢看某类游戏攻略现在早不玩了LastN能自动“遗忘”旧数据。但缺点也同样突出这是我踩过坑的地方信息损失严重只取最后N个相当于把用户更早的、可能同样重要的兴趣给扔了。比如一个用户长期关注摄影最近几天因为要装修看了些家居内容LastN可能就只捕捉到家居兴趣丢失了其核心的摄影标签。无法区分重要性对最近的N个行为“一视同仁”但显然用户对其中某些物品的点击比如长时间停留、反复查看比另一些比如误触更重要。平均池化把所有信息“掺和”在一起稀释了关键信号。N的选择是门玄学N取小了信息不够N取大了又会引入噪声并且变回“长尾兴趣”影响当前决策的问题。这个参数需要反复AB测试来调而且可能不同用户群体新用户/老用户最优的N都不一样。在实际应用中LastN更像是一个强基线和保底策略。我们通常会在召回通道中设置一个“实时行为召回”通道就用LastN来实现它能保证推荐的即时性。但要想在排序阶段精耕细作精准把握用户复杂多变的兴趣就必须引入更高级的模型了。3. 第一次进化让模型学会“注意力”——DIN模型3.1 DIN的核心思想候选物品决定历史兴趣权重到了排序阶段我们有了更多的计算资源就可以玩点更精细的了。阿里的DINDeep Interest Network在2018年提出它引入了NLP领域大获成功的注意力机制Attention来解决LastN“一视同仁”的问题。DIN的想法非常符合直觉用户历史行为的重要性不是一成不变的而是相对于当前要预测的候选物品而言的。举个例子你的历史行为里有“口红试色”、“游戏攻略”和“健身教程”。当系统在考虑是否给你推荐一款“哑光口红”时“口红试色”这个历史行为的权重就应该被放大而如果候选物品是“Switch游戏卡”那么“游戏攻略”的权重就应该升高。这就好比一个聪明的销售在向你推荐新产品时会重点提及和你之前购买过的、最相关的那些产品的优点而不是把你所有的购买记录平铺直叙地念一遍。3.2 DIN模型架构与代码浅析DIN模型的结构并不复杂关键在于那个注意力激活单元。我们来拆解一下输入用户U的历史行为序列[item1, item2, ..., itemN] 以及候选物品item_candidate。嵌入层把所有物品历史行为和候选都映射成稠密向量。注意力计算对于每一个历史行为物品item_i计算它与候选物品item_candidate的相似度或相关性作为注意力权重a_i。# 注意力权重的简化计算思想 # item_emb_i: 历史行为物品i的嵌入 # item_emb_candidate: 候选物品的嵌入 # 通过一个小的神经网络通常是MLP来计算相关性 attention_weight_i MLP(concat(item_emb_i, item_emb_candidate, item_emb_i - item_emb_candidate, item_emb_i * item_emb_candidate))这里把向量拼接、点乘、相减都喂给网络是为了让网络更好地学习交互模式。加权求和用计算出的注意力权重a_i对所有的历史行为物品嵌入进行加权求和得到最终的用户兴趣表示。user_embedding sum(attention_weight_i * item_emb_i)输出将这个动态生成的user_embedding与候选物品embedding以及其他特征用户画像、上下文等一起输入到后续的深度网络中进行最终点击率预测。DIN带来的提升是显著的。在我们小红书的精排模型上线DIN结构后点击率和停留时长都有不错的提升。因为它真正实现了“千人千面”的兴趣抽取——同一个用户面对不同的候选内容其历史兴趣表示是不同的。3.3 DIN的局限与工程挑战然而DIN也不是银弹它在实际落地中会遇到两个头疼的问题计算开销大注意力机制需要对每个候选物品都计算一遍与所有历史行为的权重。在精排阶段我们一次可能要评估几百个候选物品每个物品都要和上百个历史行为算注意力这个计算量是O(候选数 * 序列长度)非常可观。虽然可以通过一些工程优化如批量矩阵运算来加速但相比简单的Pooling开销还是增加了不少。序列长度受限由于计算开销和模型复杂度的考虑实践中不可能使用太长的行为序列通常限制在100-200以内。这意味着DIN依然主要关注用户的近期兴趣那些埋藏在历史深处的长期兴趣还是难以被有效挖掘。所以DIN解决了“区分重要性”的问题但还没解决“利用超长历史”的问题。对于小红书这样的平台用户可能积累了成千上万的点赞收藏如何从这片“信息海洋”中捞起与当前最相关的“针”就需要更进一步的模型。4. 第二次进化从百到万挖掘超长兴趣——SIM模型4.1 SIM的设计动机两阶段检索思想阿里在DIN之后又提出了SIMSearch-based Interest Model目标直指DIN的软肋如何高效地处理超长用户行为序列例如上万条。SIM的灵感来源于搜索引擎。当你在谷歌搜索时它不会用你的查询词去和全网每一个网页做精细的相关性计算那会慢到无法接受而是先通过倒排索引快速召回一批相关文档召回阶段再对这批文档进行精排。SIM把这个思想用在了用户行为序列建模上。具体来说SIM把整个过程分成两个阶段通用搜索单元GSU 这是一个快速检索阶段。给定一个候选物品从用户超长的历史行为序列中比如过去30天的所有点击快速、粗略地筛选出Top-K个最相关的历史行为。这就像是用一个“粗筛子”先捞一遍。精准搜索单元ESU 这是一个精细建模阶段。只针对GSU筛选出来的K个相关行为使用类似DIN的注意力机制进行精细的加权聚合。因为K很小比如50所以这里的计算开销就变得可控了。这个“先粗筛再精算”的两阶段架构完美地平衡了效果和效率使得利用长达数万条的用户行为序列成为可能。4.2 SIM的两阶段架构详解第一阶段GSU通用搜索单元GSU的核心是“快”。怎么快它通常采用硬搜索的方式。基于物品属性例如用候选物品的类别、标签、作者等关键属性去历史行为序列里匹配具有相同或相似属性的物品。比如候选是一个“Python编程教程”那就先把用户历史上所有带“编程”、“Python”、“计算机”标签的行为找出来。基于Embedding近似最近邻ANN这是更主流也更有效的方法。我们预先为所有物品包括历史物品计算好Embedding向量。当拿到候选物品Embedding时就用向量检索技术如Faiss、HNSW从用户的历史行为Embedding池里快速找出最相似的Top-K个。这个过程复杂度可以做到近似O(logN)即使N是几万也很高效。第二阶段ESU精准搜索单元经过GSU我们得到了一个较短的、与候选强相关的行为子序列比如50个。接下来就进入ESU将这个子序列中的每个行为物品与候选物品一起通过一个复杂的网络比如Transformer中的Multi-Head Attention进行精细的交互。计算每个历史行为相对于当前候选的精确注意力权重。加权求和得到最终的用户兴趣表示。这个阶段和DIN很像但因为输入序列长度从几百降到了几十所以可以使用更强大、更耗时的模型如Transformer来捕捉更复杂的依赖关系效果自然更好。4.3 SIM的实战效果与部署考量在我们小红书的场景下上线SIM模型对于深度兴趣挖掘和长尾兴趣满足的提升非常明显。特别是对于那些活跃度高、行为历史丰富的“资深用户”系统终于能看懂他们几个月前甚至更早的偏好推荐结果惊喜感大大增加。比如一个用户半年前密集收藏过“油画教程”后来一段时间主要看生活分享SIM模型在遇到一个新的优质油画内容时依然能通过GSU从浩瀚历史中找回那个“油画”兴趣点从而完成精准推荐。但是SIM的部署复杂度也上了一个台阶这是你需要了解的离线索引构建你需要为每个用户维护其超长行为序列的物品Embedding索引比如用Faiss。这个索引需要定期更新例如小时级或天级是一个额外的离线计算和存储开销。在线检索服务线上服务需要集成一个高效的ANN检索模块对性能要求很高。这引入了新的依赖和潜在的故障点。两阶段延迟GSU和ESU是串行的虽然各自都优化得很快但总体延迟还是会比单阶段模型高。需要在效果和响应时间之间做权衡。在实际架构中我们通常会把GSU部分做成一个独立的向量检索服务而ESU部分则集成在精排模型图里。整个流程的稳定性和性能监控变得至关重要。5. 如何为你的业务选择合适的技术方案讲完了技术演进最后聊聊实战选型。LastN、DIN、SIM不是简单的“后者淘汰前者”而是适用于不同场景的武器。我画了一个简单的决策表格你可以对照自己的情况看看特性维度LastN (Pooling)DIN (Attention)SIM (两阶段)核心思想近期行为代表一切行为重要性因候选而异从超长历史中检索相关行为处理序列长度短 (通常100)中等 (通常100-200)超长(可达上万)计算复杂度极低(O(N))高 (O(N*C))中等 (检索O(logN) 精算O(K))实时性极强强中等依赖离线索引更新能捕捉的兴趣短期、近期兴趣中短期、动态兴趣长期、深度、长尾兴趣适用场景召回阶段、新闻/短视频等强时效场景精排阶段、电商/内容平台主流选择精排阶段、用户行为丰富、需深度挖掘的平台实施难度简单中等复杂给你的具体建议从LastN开始建立基线无论你的业务处于什么阶段都可以先实现一个LastNPooling的版本。它简单、稳定、实时性好能提供一个不错的基线效果也方便你快速搭建起行为序列建模的管道。效果遇到瓶颈时升级DIN当你的业务稳定有了足够的算力并且发现LastN无法很好地区分用户兴趣的细微差别时就是引入DIN的好时机。它对于提升点击率、转化率这类核心指标通常有直接帮助。当你有挖掘长期价值的需求时考虑SIM如果你的平台用户生命周期长沉淀了大量历史行为如电商的购买历史、内容平台的收藏历史并且你确信挖掘这些长期兴趣能带来巨大业务价值如复购、提升用户粘性那么可以着手调研和试点SIM。要做好应对其复杂工程架构的心理准备。混合使用是常态在实际系统中我们往往是多种方法并用的。比如在召回层用LastN做实时行为召回通道用SIM的GSU思想即向量检索做“长期兴趣召回”通道。在精排层模型的主体结构可能是基于DIN或SIM的ESU。这样形成一个从粗到细、从近期到长期的立体化兴趣建模体系。最后我想说模型和技术永远在迭代今天的前沿可能就是明天的基线。理解这些技术演进背后的核心逻辑——如何更高效、更精准地从用户的行为足迹中提取兴趣信号——比单纯记住模型名字更重要。在实际工作中多做AB测试让数据说话选择最适合你当前业务阶段和资源约束的方案才是王道。毕竟再 fancy 的模型如果不能稳定、高效地服务于业务增长那就只是空中楼阁。我自己也是从一个简单的平均池化开始一步步踩坑、优化、升级过来的这个过程本身就是推荐系统工程师最大的乐趣所在。