推荐系统序列化建模总结(三)

简介: 推荐系统序列化建模总结(三)

DISN


  • Session Interest Extractor Layer:Self Attention+Bi-LSTM


  • Bias Encoding:分别构建了session的位置特征,Item在session的位置特征,Item在Sequence的位置特征。奇怪的是没有使用行为时间特征,个人感觉这类特征还是挺重要的。


9a5cc63678309fc43c085eb66dbda7ad.png


Bias Encoding


  • Multi head Self-attention:用Self Attention建模Session内部Item之间的依赖关系(考虑到Session内Item是同构的还是合理的),然后对Session内部Item隐状态Mean Pooling得到Session Embedding(由于Session内Item比较相似,用Target Attention权重也会比较接近)。


43fb74f7e8af41adb0d291137685dc5f.png


Multi head Self-attention


  • Session Interest Interacting Layer:用Bi-LSTM对上面得到的Session序列建模兴趣的转移过程,相比Attention模型,RNN更适合学习这种“购买了Item A后接着购买Item B”的模式。


39d92aac36c5e9ef41b57c18d8ea3213.png


Session Interest Interacting Layer


  • Session Interest Activating Layer:用Target Attention抽取相关信息,用双线性点积建模不同方式得到的Embedding的差异性。


fa2bcdda6ba99ae4db69c648204f710c.png


Session Interest Activating Layer


3.9 WSDM’20 京东 | Hierarchical User Profiling for E-commerce Recommender Systems [3]


  • 问题背景:行为序列可以划分为不同的粒度,从而更全面地对User Profiling建模。


  • 业务场景:商品推荐召回阶段?


  • Hierarchical User Profiling:这里对常用的行为序列(Item view)分别进行了更细粒度(Micro behavior)和更粗粒度(Category View)的刻画,整体上呈现树状结构,刻画粒度从细到粗,最终得到多个不同粒度的兴趣向量。


0be941fa6bb4332996ff2aade0be6fa5.png


Hierarchical User Profiling


  • The Input and Embedding Layers:v表示Item, t表示行为时间,b表示行为类型,c表示Item所属的类别,d表示停留时间,g表示和下一次行为的间隔


  • Pyramid Recurrent Neural Networks:用RNN对不同粒度的行为序列建模,底层的隐状态作为高层的输入状态。


33dfa0bbb32dd9366f617b027dddc153.png


Pyramid Recurrent Neural Networks


  • Behavior-LSTM Cell:新增了两个受行为特征影响的门控,[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tYLPruq7-1635863814276)(https://mmbiz.qpic.cn/mmbiz_svg/rKBCaRcVshMooyeWaghnHNZdQJLoZBibyVn5NLJafo5wJd2Y9IjhqsANficlJdbUYvklYOFzudd95qZwEsRZvEKNcxiblYMib3Fm/640?wx_fmt=svg)]是前后行为时间间隔,影响着遗忘多少前一次的历史信息;[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8ta86FZp-1635863814277)


  • (https://mmbiz.qpic.cn/mmbiz_svg/rKBCaRcVshMooyeWaghnHNZdQJLoZBibyiatiaFyJ8lZuNl53mx41tRBmEQQ3PfWbia6ZDictTxB5NxVgffPQVIfZvRdK2AIjhejp/640?wx_fmt=svg)]是行为类型或者停留时间,决定了保留多少当前行为的Item的信息,在Micro Level Layer使用行为类型(停留时间不好统计),其他两层使用停留时间。


[外链图片转存中…(img-k1jR0Kur-1635863814278)]


Behavior-LSTM Cell


  • The Attention Layers:用一个2-Layer MLP计算Attention,其中Q是第T步(最后一步)的隐状态,K是第i步的隐状态和行为类型或停留时间,V是第i步的隐状态。


[外链图片转存中…(img-ZfUMTrDE-1635863814279)]


The Attention Layers


  • Loss Function:损失函数由负余弦函数构成,每一项对应不同粒度的划分,这里没有负采样。


[外链图片转存中…(img-CTXrU4y2-1635863814280)]


Loss Function


3.10 CIKM’19 阿里 | Multi-Interest Network with Dynamic Routing for Recommendation at Tmall [5]


  • 问题背景:由行为序列得到的单一的兴趣向量难以建模用户多样的兴趣。


  • 业务场景:商品推荐召回阶段


  • Multi-Interest Extractor Layer


[外链图片转存中…(img-j9lxsfke-1635863814281)]


MIND


  • Dynamic Routing Revisit:胶囊网络单元的输入输出都是向量(区别于标量),动态路由算法通过类似K-Means迭代的方式,对底层胶囊(输入向量)进“软聚类”,划分到最相关的高层胶囊(输出向量)中。该模型非常适合用来建模多兴趣划分,底层胶囊可以看做是序列中的Item,高层胶囊则是多个用户兴趣向量,动态路由的过程即将属于同一类兴趣的Item聚类。


[外链图片转存中…(img-57zo9cqQ-1635863814283)]


动态路由


  • B2I Dynamic Routing


[外链图片转存中…(img-qStNCSaz-1635863814284)]


B2I Dynamic Routing


  • Shared bilinear mapping matrix:用户的行为序列是变长的,不适合为每个Item胶囊分配一个变换矩阵;另一方面,期望通过共享变换矩阵的方式将Item映射到同一个特征空间。


[外链图片转存中…(img-cgtCLd0F-1635863814285)]


Shared bilinear mapping matrix


  • Randomly initialized routing logits:考虑到映射矩阵是共享的,如果初始路由logits一样,会导致高层兴趣胶囊一直不变,因此需要进行随机初始化


  • Dynamic interest number:这里并没有给所有用户都分配固定K个兴趣胶囊,而是设计了一个启发式的规则,保证K个兴趣胶囊足够表征I个行为胶囊。


[外链图片转存中…(img-wxjdV8aU-1635863814289)]


Dynamic interest number

  • Label-aware Attention Layer:其实就是Target Item与兴趣胶囊的Target Attention。P用来控制Attention分布的Gap,P趋向于无穷时相当于Hard Attention。

[外链图片转存中…(img-5G6sVt8l-1635863814290)]


Label-aware Attention Layer


  • Training:根据行为序列等特征预测下一个Item(Sampling Softmax)


[外链图片转存中…(img-tMr50jSl-1635863814291)]


Training


  • Serving:线上服务时并不会运行Training模块,系统会实时地取到用户的行为序列特征,经过动态路由模块得到K个兴趣向量(即兴趣向量是实时的,随用户行为而更新),再用这K个兴趣向量通过LSH等方法快速召回N个Item,Item的Embedding由离线训练时得到。


  • 实验效果:这里主要看一下多兴趣建模的有效性,可以看到单个兴趣向量的召回的Item比较杂也不够准确,而多个兴趣向量分别召回的Item则比较相关且准确。


[外链图片转存中…(img-lGiNrnNy-1635863814293)]


效果


3.11 KDD’20 阿里 | Controllable Multi-Interest Framework for Recommendation [8]


  • 问题背景:单一的兴趣向量不足以建模用户的多兴趣;K个兴趣向量召回需要兼顾准确性和多样性。


  • 业务场景:商品推荐召回阶段


  • Multi-Interest Framework:作者总结了两种建模多兴趣的方法:动态路由算法和多头注意力机制。


[外链图片转存中…(img-5OtP2gLp-1635863814294)]


贪心算法


Aggregation Module:仅仅召回K路中最相关的N个Item不利于推荐结果的多样性,作者定义了一个值函数,第一项衡量了准确性,第二项衡量了多样性,其中多样性是通过召回Item的类目种类来定义的。通过贪婪机制确定使值函数最大化的Item集合,即在每一步选取能使当前集合最大化值函数的Item。


[外链图片转存中…(img-DIm85P24-1635863814295)]


值函数和多样性


  • 实验效果:动态路由算法和多头注意力机制的效果差别不大


3.12 WSDM’21 阿里 | Sparse-Interest Network for Sequential Recommendation,WSDM 2021 [18]


  • 问题背景:已有的多兴趣模型可以分为隐式方法和显示方法。隐式方法通过一个聚类的过程对兴趣做划分,缺少对多兴趣的显示建模;显示方法为每个用户直接学习L个兴趣类簇向量(即随机初始化一组可学习向量用于表征兴趣),无法扩展到工业场景。本文SINE属于显示方法,但是不再为每个用户学习独立的兴趣向量,而是维持了一个所有用户共享的兴趣矩阵,对于每个用户会根据行为序列从中取出相关的K个兴趣向量。“稀疏”体现在每个用户的兴趣个数相对全体用户的兴趣个数是稀少的。


  • 业务场景:商品推荐召回阶段


  • Concept activation:C是所有用户共享的conceptual prototype matrix,表征了L个抽象的Concept,类似Item类目等特征。这里对行为序列做self-attention得到一个一般的意图向量,该意图向量包含了序列中各个Item的混合概念信息(如类目),通过它到conceptual prototype matrix取出对应的最相关的Top K个概念向量。


Concept activation


  • Intention assignment:每个概念向量表示用户的一个意图,意图分配计算序列中的Item与K个意图向量的相关性,相当于将Item软分配到了K个意图类簇中。


Intention assignment


  • Attention weighting:计算序列中的每个Item对预测下一个Item任务的重要性


Attention weighting

  • Interest embedding generation:意图向量只包含了高层次的抽象类目等信息,这里还需要利用序列中的Item得到精细的兴趣向量,相当于先得到K个预定义的类簇,然后将序列中的Item分配到K个类簇。


[外链图片转存中…(img-tQoHyzLI-1635863814300)]


Interest embedding generation


  • Interest Aggregation Module:MIND训练时通过Label-Attention(Target Attention)聚合兴趣向量,然后测试时由于没有Label(实际上是候选集太大计算量不允许)只能使用K个兴趣向量分别召回K路Item,然后取整体中的Top N个Item。一个直观的方法是粗略计算出下一个Item(Embedding,不是具体的Item)作为我们的Label,但是Item太细粒度了实际上不容易预测准确,因此这里退一步先粗略计算下一个意图(意图相对宽泛,更容易预测),然后使用该意图作为Label,并且在测试时也能保持一致(最后只有一个统一的兴趣向量用于召回)。具体而言,使用之前的意图分布矩阵得到用户当前的意图序列,然后使用Self-Attention预测下一个意图。


Interest Aggregation Module


  • Model Optimization:加入了对conceptual prototype matrix的约束项,使得C尽可能正交(形成一组基底)


3.13 IJCAI’18 微软 | Sequential Recommender System based on Hierarchical Attention Network [10]


  • 问题背景:以往工作将长期兴趣看做用户比较稳定的的一般性偏好,因此在用历史行为建模时没有考虑到其变化性。


  • 业务场景:商品推荐召回阶段


  • Long-term Attention-based Pooling Layer:作者根据时间窗口将行为序列划分为Long-term sets和Short-term sets,然后对前者用User Attention抽取信息(召回阶段的限制,候选集太大不能用Targte Attention)。


Long-term Attention-based Pooling Layer


  • Long- and Short-term Attention-based Pooling Layer:将得到的long-term representation与short-term sets一起做User Attention融合。


Long- and Short-term Attention-based Pooling Layer


3.14 CIKM’19 阿里 | SDM: Sequential Deep Matching Model for Online Large-scale Recommender System [9]


该工作和上一篇类似,模型结构上为LSTM+Self Attention+User Attention+Gated Attention(融合长短期兴趣);用多头注意力机制建模用户的多兴趣;对long term sequence从特征的粒度建模,例如类目序列等,大概用来表示一些比较稳定的偏好吧,对各个feature序列Attention抽取后再concat得到Long Term Sequence Embedding。


[外链图片转存中…(img-aJ6nXQsG-1635863814304)]


SDM


3.15 KDD’19 阿里 | Practice on Long Sequential User Behavior Modeling for Click-Through Rate Prediction [7]

  • 问题背景:加长序列可以包含更丰富的用户历史行为,但是一方面,超长序列会带来巨大的存储消耗,另一方面,已有的基于RNN,Attention的方法在处理超长序列时无法满足排序阶段线上服务的低时延要求。


  • 业务场景:广告推荐排序阶段


MIMN


  • 模型结构:该工作的一个关键在于将用户兴趣向量的更新与用户的请求(待排序物品的打分)进行了解耦,当用户发起一个请求,系统会到UIC模块取出其兴趣向量用于打分;当用户发生商品点击等行为时,系统动态更新UIC中对应的兴趣向量(通过记忆网络的方式)。这两个过程彼此是独立的。但是这样的一个缺陷是,无法对序列做Target Attention。


模型结构

3.16 CIKM’20 阿里 | Search-based User Interest Modeling with Lifelong Sequential Behavior Data for Click-Through Rate Prediction [12]


该工作也是针对超长序列,其业务场景为广告推荐排序阶段,一般来说,在排序阶段对行为序列使用Target Attention效果较好,对不相关的行为过的Item信息进行了过滤,但是在处理超长序列时计算时延是不可接受的。


本文介绍了两种方法,先对超长序列做一次“初筛”,留下与目标Item相关的部分,接着就可以对缩短后的序列用Target Attention“精筛”。一种是“Hard Search”,只保留与Target Item同一类目的Item,线上服务时会构建一个User ID-Category ID-Item ID的二级索引表。


一种是“Soft Search”,离线训练时使用整个长序列得到Item的Embedding,线上服务时利用离线训练得到的Embedding,然后用ALSH方法快速筛选出与Target Item相关的Item。该方法非常类似召回和排序。


相关文章
|
机器学习/深度学习 人工智能 搜索推荐
推荐系统序列化建模总结(二)
推荐系统序列化建模总结(二)
670 0
推荐系统序列化建模总结(二)
|
机器学习/深度学习 存储 人工智能
推荐系统序列化建模总结(一)
推荐系统序列化建模总结(一)
1227 0
推荐系统序列化建模总结(一)
|
1月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
152 1
|
1月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
167 1
|
5月前
|
存储 Java 编译器
说一说关于序列化/反序列化中的细节问题
我是小假 期待与你的下一次相遇 ~
104 1
|
5月前
|
JSON Java 数据库连接
|
6月前
|
存储 安全 IDE
说一说序列化与反序列化中存在的问题
本文详细解析了Java中的序列化机制,包括序列化的概念、实现方式及应用场景。通过Student类的实例演示了对象的序列化与反序列化过程,并分析了`Serializable`接口的作用以及`serialVersionUID`的重要意义。此外,文章还探讨了如何通过自定义`readObject()`方法增强序列化的安全性,以及解决可序列化单例模式中可能产生的多实例问题。最后提供了代码示例和运行结果,帮助读者深入理解序列化的原理与实践技巧。
171 2
|
6月前
|
JSON JavaScript 前端开发
Go语言JSON 序列化与反序列化 -《Go语言实战指南》
本文介绍了 Go 语言中使用 `encoding/json` 包实现 JSON 与数据结构之间的转换。内容涵盖序列化(`Marshal`)和反序列化(`Unmarshal`),包括基本示例、结构体字段标签的使用、控制字段行为的标签(如 `omitempty` 和 `-`)、处理 `map` 和切片、嵌套结构体序列化、反序列化未知结构(使用 `map[string]interface{}`)以及 JSON 数组的解析。最后通过表格总结了序列化与反序列化的方法及类型要求,帮助开发者快速掌握 JSON 数据处理技巧。
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
469 1