一文看懂推荐系统:排序16:Dual Augmented Two-tower Model和张俊林的SENet,都是为了加入特征交叉想,增强重要特征,去掉噪声,类似于attention的骚操作

article/2025/9/20 6:54:06

一文看懂推荐系统:排序16:Dual Augmented Two-tower Model和张俊林的SENet,都是为了加入特征交叉想,增强重要特征,去掉噪声,类似于attention的骚操作

提示:最近系统性地学习推荐系统的课程。我们以小红书的场景为例,讲工业界的推荐系统。
我只讲工业界实际有用的技术。说实话,工业界的技术远远领先学术界,在公开渠道看到的书、论文跟工业界的实践有很大的gap,
看书学不到推荐系统的关键技术。
看书学不到推荐系统的关键技术。
看书学不到推荐系统的关键技术。

王树森娓娓道来**《小红书的推荐系统》**
GitHub资料连接:http://wangshusen.github.io/
B站视频合集:https://space.bilibili.com/1369507485/channel/seriesdetail?sid=2249610

基础知识:
【1】一文看懂推荐系统:概要01:推荐系统的基本概念
【2】一文看懂推荐系统:概要02:推荐系统的链路,从召回粗排,到精排,到重排,最终推荐展示给用户
【3】一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程
【4】一文看懂推荐系统:召回02:Swing 模型,和itemCF很相似,区别在于计算相似度的方法不一样
【5】一文看懂推荐系统:召回03:基于用户的协同过滤(UserCF),要计算用户之间的相似度
【6】一文看懂推荐系统:召回04:离散特征处理,one-hot编码和embedding特征嵌入
【7】一文看懂推荐系统:召回05:矩阵补充、最近邻查找,工业界基本不用了,但是有助于理解双塔模型
【8】一文看懂推荐系统:召回06:双塔模型——模型结构、训练方法,召回模型是后期融合特征,排序模型是前期融合特征
【9】一文看懂推荐系统:召回07:双塔模型——正负样本的选择,召回的目的是区分感兴趣和不感兴趣的,精排是区分感兴趣和非常感兴趣的
【10】一文看懂推荐系统:召回08:双塔模型——线上服务需要离线存物品向量、模型更新分为全量更新和增量更新
【11】一文看懂推荐系统:召回09:地理位置召回、作者召回、缓存召回
【12】一文看懂推荐系统:排序01:多目标模型
【13】一文看懂推荐系统:排序02:Multi-gate Mixture-of-Experts (MMoE)
【14】一文看懂推荐系统:排序03:预估分数融合
【15】一文看懂推荐系统:排序04:视频播放建模
【16】一文看懂推荐系统:排序05:排序模型的特征
【17】一文看懂推荐系统:排序06:粗排三塔模型,性能介于双塔模型和精排模型之间
【18】一文看懂推荐系统:特征交叉01:Factorized Machine (FM) 因式分解机
【19】一文看懂推荐系统:物品冷启01:优化目标 & 评价指标
【20】一文看懂推荐系统:物品冷启02:简单的召回通道
【21】一文看懂推荐系统:物品冷启03:聚类召回
【22】一文看懂推荐系统:物品冷启04:Look-Alike 召回,Look-Alike人群扩散
【23】一文看懂推荐系统:物品冷启05:流量调控
【24】一文看懂推荐系统:物品冷启06:冷启的AB测试
【25】推荐系统最经典的 排序模型 有哪些?你了解多少?
【26】一文看懂推荐系统:排序07:GBDT+LR模型
【27】一文看懂推荐系统:排序08:Factorization Machines(FM)因子分解机,一个特殊的案例就是MF,矩阵分解为uv的乘积
【28】一文看懂推荐系统:排序09:Field-aware Factorization Machines(FFM),从FM改进来的,效果不咋地
【29】一文看懂推荐系统:排序10:wide&deep模型,wide就是LR负责记忆,deep负责高阶特征交叉而泛化
【30】一文看懂推荐系统:排序11:Deep & Cross Network(DCN)
【31】一文看懂推荐系统:排序12:xDeepFM模型,并不是对DeepFM的改进,而是对DCN的改进哦
【32】一文看懂推荐系统:排序13:FNN模型(FM+MLP=FNN),与PNN同属上海交大张楠的作品
【33】一文看懂推荐系统:排序14:PNN模型(Product-based Neural Networks),和FNN一个作者,干掉FM,加上LR+Product
【34】一文看懂推荐系统:排序15:DeepFM模型(Factorization-Machine),xDeepFM可不是对DeepFM的改编哦,而是对DCN的改编
【35】一文看懂推荐系统:经典双塔模型:微软DSSM模型(Deep Structured Semantic Models),无特征交互,后来美团改进了


提示:文章目录

文章目录

  • 一文看懂推荐系统:排序16:Dual Augmented Two-tower Model和张俊林的SENet,都是为了加入特征交叉想,增强重要特征,去掉噪声,类似于attention的骚操作
  • 前言
  • 双塔改建计划
  • 双塔重地,闲人免进
  • 另一条路就是美团整的dual augmented two-Tower
  • 二、模型结构
    • 2.1 Embedding层
    • 2.2 Dual Augmented layer
    • 2.3 Category Alignment
    • 2.4 模型训练和损失函数
  • 总结


前言

之前我们说了DSSM模型是没有特征交互的双塔模型

后来美团的一篇文章《A Dual Augmented Two-tower Model for Online Large-scale Recommendation》,
设计了Adaptive-Mimic Mechanism,
其中最主要的是设计了mimic loss,
该loss的主要作用是让增强向量来拟合相应query或着item在另一个塔中所有正样本的输出向量表示
增强向量代表了来自另一个塔的有用信息,
在训练增强向量的过程中需要使用stop gradient策略来冻结梯度。

从论文介绍来看增强向量更多地是表征用户的历史点击序列/物品的历史点击用户

那么是否可以将这两个序列特征进行简单池化or聚类就有不错的效果,
即结构的收益也许可以通过特征来近似拿到。

且论文一共有4个loss,直观感觉训练难度会比较大,但是不妨碍这篇论文结构上是比较创新的。


双塔改建计划

针对DSSM,双塔最大的缺点就在于,user&item两侧信息交叉得太晚
等到最终能够通过dot或cosine交叉的时候,
user & item embedding已经是高度浓缩的了,
一些细粒度的信息已经在塔中被损耗掉,永远失去了与对侧信息交叉的机会。

所以,双塔改建最重要的一条主线就是:
如何保留更多的信息在tower的final embedding中,
从而有机会和对侧塔得到的embedding交叉?

围绕着这条主线,勤劳的互联网打工人设计出很多的改进方案。

双塔重地,闲人免进

这种思路以张俊林大佬的SENet为代表。

既然把信息“鱼龙混杂”一古脑地喂入塔,其中的噪声造成污染,
导致很多细粒度的重要信息未能“幸存”到final dot product那一刻。

SENet的思路就是,在将信息喂入塔之前,插入SEBlock。
SEBlock动态学习各特征的重要性,增强重要信息
弱化甚至过滤掉原始特征中的噪声,
从而减少信息在塔中传播过程中的污染与损耗,
能够让可能多的重要信息“撑”到final dot product那一刻。

在这里插入图片描述

senet的主要效果是信息提纯,让最有效的信息保留,不重要的信息忽略,
这样在最后计算cos的时候的交互才是最好的,避免了乱七八糟的信息进行交互了。

SEnet 在推荐上,主要两个工作:
在这里插入图片描述
squeeze:这个步骤就是讲embedding 求平均变为1维,比如你有十个特征,那么对应的embedding压缩后变成10维的变量

excitation:简单的通过两层mlp输出指定的dense,这个输出的大小与输入的特征个数有关,
比如你的特征有4个,那么mlp输出维度为4
,然后与原始的embdding相乘累加,看起来就是attention 的意思,无非就是算权重的方式不一样

(1)特征emb编码压缩,对每个emb编码取平均值,得到一个数值z,所有特征的z组成向量Z
(2)对Z作用两个MLP神经网络,主要意义在特征交叉,得到每个特征emb编码的权重值a

将SENet引入推荐系统,用来对特征重要性进行动态判断。

所谓动态,指的是比如对于某个特征,
在某个输入组合里可能是没用的,但是换一个输入组合,很可能是重要特征。
它重要不重要,不是静态的,而是要根据当前输入,动态变化的。

强化那些重要特征,弱化甚至清除掉

本质就是attention的意思

另一条路就是美团整的dual augmented two-Tower

可以看到这篇论文是发表在dlp-kdd上的一篇关于双塔召回的论文,
这篇论文其实比较偏工业界的风格,
主要的创新点其实就两个地方,我们一起来看看吧。

许多现代推荐系统都有非常大的物品库,
处理大规模检索的一个常见工业方法是使用双塔模型从内容特征中学习query和item的表示。

然而,该模型缺乏两塔之间的信息交互,
此外,类别数据的不平衡也影响了模型的性能。

在美团的首页推荐场景下,负责给所有的业务进行导流和推荐任务

在首页推荐场景下,物品类别是严重不平衡的。
举个例子来说,外卖这个类别的商品数量就比较多,
也就是说,如果不加区分的对所有的物品进行训练,
那么就会导致整个模型的效果受主要类别主导,
模型的训练就跟少量的类别关系没那么大了,
这些少样类别几乎不会对模型的训练造成影响。

另外,做双塔的各位都知道,一个比较难受的问题就是query塔跟item塔没有进行交互,
唯一一次交互式在计算相似度(cos/内积)的时候。
在这里插入图片描述

该论文提出了双重增强双塔模型来解决以上两个问题。

论文设计了Adaptive-Mimic Mechanism,来为每一个query和item学习一个增强向量
增强向量代表了来自另一个塔的有用信息;
此外,论文还在训练阶段引入了Category Alignment Loss来缓解类别不平衡的问题

二、模型结构

在这里插入图片描述

2.1 Embedding层

这个就不在进行过多的介绍了,query跟item的特征都经过embedding结构生成稠密的特征。

2.2 Dual Augmented layer

对于query和item,都假设带有一个对应的增强向量au和av,
并与Embedding层得到的Embedding进行concat,作为两个塔的输入。

如对于uid=253,city=SH,gender=male的用户,以及iid=149,price=10,class=cate的item,对应的模型输入为:

在这里插入图片描述

做过双塔的都知道,在模型经过多层dnn后,
需要在最后进行l2正则,为什么要做正则呢,
很多文章都解释过了,这里就简单提几点:

1.为了模型训练更稳定
2.为了检索一致性,归一化后在点积=cos相似度 等价于hnsw中的欧式距离

所以接下来的操作就是:

在这里插入图片描述

我们可以从图中看到,增强向量跟着dnn进入了双塔结构,但是这个增强向量还有另外的作用。

这里直接用简单的话来讲解,
我们可以看到au可以看作是query侧的增强向量
除了跟着模型一起训练以外,还扮演着对于所有item塔中所有正样本的输出向量表示。

可以这么理解,我们前面不是说了吗,
我们没办法在双塔中进行特征交叉,
因为得不到彼此的信息表示,那么我们为什么不自己构造出一个伪的item表示呢,
其实au就是候选item的一种假设,是我们用来进行特征交互的假设向量。

你可能觉得,太好了,
如果我们直接假设一个彼此向量就好了,这个想法太天衣无缝了?
错了,
我们必须要对这个增强向量进行限制才行,
既然他是我们对另一侧的假设向量,这个vec就不能太飘,所以我们需要用一个loss进行限制:

在这里插入图片描述
以loss_u为例,
如果y=0,则没有损失,
若y=1,则增强向量必须要跟另一个塔的输出向量越接近,则损失越小。

也就是说,增强向量是对该query或item所有可能匹配的正样本信息的综合表示。

而在训练增强向量的过程中,需要使用stop gradient策略来冻结pu和pv。

2.3 Category Alignment

前面提到了两个问题,一个是特征交叉,另一个是类别不平衡问题。

在美团这种场景下,类别是严重不平衡的,
我们不能让模型被主要类别带偏了。

同时也要让较少的类别参与到模型的训练中。

论文提出了Category Alignment Loss,
可以将数量较多的类别中学习到的信息迁移到数量较小的类别中

CAL计算主类别和其他类别的协方差矩阵二阶矩,降低类别间的差距:

在这里插入图片描述
在这里插入图片描述

2.4 模型训练和损失函数

这部分就很简单了,双塔召回嘛,无非就是采样+loss设计的问题:
在这里插入图片描述
加入上述的mimic loss和Category Alignment Loss后,总的loss计算如下:
在这里插入图片描述


总结

提示:如何系统地学习推荐系统,本系列文章可以帮到你

(1)找工作投简历的话,你要将招聘单位的岗位需求和你的研究方向和工作内容对应起来,这样才能契合公司招聘需求,否则它直接把简历给你挂了
(2)你到底是要进公司做推荐系统方向?还是纯cv方向?还是NLP方向?还是语音方向?还是深度学习机器学习技术中台?还是硬件?还是前端开发?后端开发?测试开发?产品?人力?行政?这些你不可能啥都会,你需要找准一个方向,自己有积累,才能去投递,否则面试官跟你聊什么呢?
(3)今日推荐系统学习经验:


http://chatgpt.dhexx.cn/article/u3ZDQPyQ.shtml

相关文章

张俊林:BERT和Transformer到底学到了什么 | AI ProCon 2019

演讲嘉宾 | 张俊林(新浪微博机器学习团队AI Lab负责人) 编辑 | Jane 出品 | AI科技大本营(ID:rgznai100) 【导读】BERT提出的这一年,也是NLP领域迅速发展的一年。学界不断提出新的预训练模型,刷…

张俊林:GPT-4 模型会开创哪些新的研究方向?

作者|张俊林知乎 整理|蘑菇先生学习记 分享一篇张俊林老师关于GPT-4模型会开创哪些新的研究方向的回答。 引言 在这个历史性的时刻,回答个问题,留下自己作为历史见证人的足迹。先遵循这个问题的主旨,写两句GPT-4开创了…

新浪张俊林:大语言模型的涌现能力——现象与解释

内容来源:ChatGPT 及大模型专题研讨会 分享嘉宾:新浪新技术研发负责人、中国中文信息学会理事 张俊林 分享主题:《大型语言模型的涌现能力:现象与解释》 转载自:https://zhuanlan.zhihu.com/p/621438653 注1&#xf…

张俊林:对比学习研究进展精要

作者 | 张俊林 编辑 | 夕小瑶的卖萌屋 对比学习(Contrastive Learning)最近一年比较火,各路大神比如Hinton、Yann LeCun、Kaiming He及一流研究机构比如Facebook、Google、DeepMind,都投入其中并快速提出各种改进模型:Moco系列、SimCLR系列、…

张俊林:推荐系统排序环节特征 Embedding 建模

每天给你送来NLP技术干货! 分享嘉宾:张俊林博士 新浪微博 编辑整理:刘一全 出品平台:DataFunTalk 导读:随着深度学习在推荐系统应用的发展,特征 Embedding 建模的重要性已经成为共识,同时海量特…

张俊林:从对比学习视角,重新审视推荐系统的召回粗排模型

分享嘉宾:张俊林博士 新浪微博 编辑整理:王岩 开课吧 出品平台:DataFunTalk 导读:今天分享的主题是从对比学习的视角,即从一个不同的角度来看看推荐系统里面的召回和粗排模型。对比学习从去年年中开始比较火&#xff0…

单链表的插入和删除

前言 在上一篇文章(单链表的定义)中我们已经了解了单链表的含义和简单的实现。那么在这篇文章中,我们将要来讲解单链表的插入和删除操作。 按位序插入(带头结点) 我们在上篇文章中已经讲解过,如果想要在…

单链表的定义和表示

一、单链表的存储结构,如下图所示: 定义单链表L的代码段: typedef struct Lnode{ //声明结点的类型和指向结点的指针类型 ElemType data; //结点的数据域 struct Lnode *next; //结点的指针域}Lnode, *Li…

【数据结构】- 链表之单链表(中)

文章目录 前言一、单链表(中)1.1 头删1.2尾删1.2.1第一种方法:1.2.2第二种方法:1.2.3多因素考虑 二、完整版代码2.1 SList.h2.2 SList.c2.3 Test.c 总结 前言 千万不要放弃 最好的东西 总是压轴出场 本章是关于数据结构中的链表之单链表(中) 提示&#…

带头结点的单链表表示和实现

带头结点的单链表表示和实现 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。 链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) 指针(指示后继元素存储位置),元素就是存…

C++单链表

链表是一种常见的数据结构。它主要是利用动态内存分配、结合结构体并配合指针来实现的,能根据需要开辟和释放内存单元。由于链表是用一组任意的存储单元来存储线性表中的数据,存储单元不一定是连续的,且链表的长度不是固定的,因此…

单链表的建立

一、顺序建立链表(尾插法) 1、首先建立一个只需头结点的空链表,此时头指针、尾指针均指向头结点 head(struct node*)malloc(sizeof(struct node));head->nextNULL; 2、在头结点后插入第一个节点 p(struct node*)malloc(sizeof(struct n…

【数据结构】单链表(带图详解)

文章目录 一、单链表的定义及其结构1.1.概念1.2.单链表的结构1.3.单链表的特点 二、单链表的实现2.1.定义结点2.2.创建单链表2.3.打印单链表2.4. 单链表尾插与尾删2.4. 单链表头插与头删2.4.查找某个结点2.5.插入2.6.删除\ 总代码 一、单链表的定义及其结构 1.1.概念 概念&am…

单链表的常用算法

目录 一、判断链表是否为空 二、单链表的销毁:链表销毁后不存在 三、清空单链表:链表仍存在,但链表中无元素,成为空链表(头指针和头结点仍然在) 四、求单链表的表长 五、单链表的取值 六、单链表的按值查找 七、单链表的插…

线性表的链式存储:单链表的相关介绍(插入、删除、查找等)头节点和头指针的区别

一、链式存储 用一组地址任意的存储单元(地址可以连续也可以不连续),依次存储线性表中的各数据元素。 链式存储结构中的每个存储单元称为“结点”,结点包含一个数据域和一个指针域。 数据元素之间的逻辑关系通过结点中的指针表示 …

单链表的简单讲解

注意:本人也是小白,如果出现错误希望各位读者能够包容 文章目录 前言一、单链表的结构定义二、单链表的基本操作1.单链表的初始化2.单链表的创建1.头插法头插法图片讲解 2.尾插法尾插法图片讲解 3.头插法和尾插法的对比 3.单链表的输出4.单链表的插入图片…

线性表之单链表~

这次来介绍一下数据结构里面的单链表。 这是一个简单的链表,它是单向的,没有(哨兵位置)头结点,不循环,有一个头指针指向第一个节点。 和上次介绍线性表一样,我们同样研究它的 增,删,查&#x…

链表(Linked List)----单链表

链表是有序的列表,但是它在内存中是存储如下的: 链表是以节点的方式存储的,链式存储每个节点包含data域,next域指向下一个节点如上图:链表的各个节点不一定是连续存放的.链表分带头节点的链表和没有头节点的链表(根据实际的需求来确定) 使用带head头的单项链表实现-水浒英雄排行…

单链表的插入与删除

链表是数据结构中的一种线性结构,表示数据运算之间的一种抽象关系。 1、单链表的结构如下: typedef struct node{datatype data; //数据struct node *next; //指向下一个节点的指针 }linklist_s; 其中包括一个数据域和一个指针域,向单链表…