SDIM是一种基于SimHash原理的长序列推荐模型,通过分桶聚合用户兴趣,在保持推荐效果的同时显著提升线上性能。以下从背景、原理、效果、部署等方面展开分析:一、背景与挑战在视频和电商推荐场景中,用户行为序列(如点击、观看、互动)是建模兴趣的关键。传统方法(如DIN、DIEN)通过Attention机制处理序列,但受限于序列长度(通常≤100),过长会导致线上Serving压力剧增。然而,序列长度从100增至1000时,AUC可提升0.6%(精排阶段显著提升),因此长序列建模成为需求。图:序列长度与AUC的关系(来源:MIMN论文)二、长序列建模方式对比直接喂入模型(如DIN):离线效果好,但序列与Target Item不解耦,Serving性能差。Transformer建模(如MIMN):解决性能问题,但受Memory Slot限制(兴趣可能局限于单个Slot),且训练速度仅为DIN的1/10。硬检索相似Item(如SIM):通过属性索引(如类别)匹配相似Item,计算逻辑放在特征处理阶段,对离线训练和Serving影响小,但局限于同类Item相关性。Hash函数计算相似Item(如ETA、SDIM):利用Hash函数快速定位相似Item,减少计算量。三、SDIM原理详解核心思想:通过SimHash将长序列分桶,每个桶内的Item视为相似,用户兴趣表示为桶内Item向量的均值。哈希指纹生成:对序列中每个Item的Embedding,用同一组Hash函数(如48个)生成0/1向量。将向量映射为哈希指纹(如3位编码对应8种指纹)。每个指纹的信息=该指纹内所有Item向量的均值(简单聚合)。图:4个Hash函数、2位编码的示例(黄色区域指纹(1,-1)的信息=norm(s0+s1))Target Item匹配:对Target Item用相同Hash函数生成指纹。用户兴趣=Target Item指纹对应桶的信息(所有桶信息的均值)。优化技巧:实际运算中,将指纹(如(-1,-1)、(1,-1))转化为数组下标(如[0,1,2,3]),通过gather操作快速索引用户兴趣。图:指纹转化为数组下标,通过gather获取用户兴趣四、效果对比指纹数量优化:3位编码(8种指纹)效果最佳,假设最大序列长度2000,则每个指纹平均含250个Item。指纹概念类似MIMN的Memory Slot,均用于分桶存储用户兴趣。图:3位编码(8指纹)的AUC最高与主流模型对比:SDIM的训练速度是DIN(Long Seq)的11倍,AUC几乎持平。相比DIN(Avg-Pooling)等短序列方法,SDIM能充分利用长序列信息,效果更优。图:SDIM在AUC和训练速度上均优于DIN(Long Seq)五、线上部署方案整体思路:将用户兴趣计算与模型Serving解耦,分两阶段处理。离线阶段:计算用户长序列的Hash指纹,聚合每个指纹的信息(如8个指纹的均值)。将结果存储在数据存储中心(如Redis)。Serving阶段:计算Target Item的Hash指纹。通过gather操作从存储中心获取用户兴趣。图:离线聚合指纹信息,Serving阶段快速索引六、总结优势:效果:与长序列DIN持平,AUC提升显著。性能:训练速度是DIN(Long Seq)的11倍,Serving阶段通过解耦优化性能。扩展性:支持超长序列(如2000+),指纹数量可调。适用场景:需要兼顾推荐效果与线上性能的视频、电商等长序列推荐场景。



































