一文看懂推荐系统:召回06:双塔模型——模型结构、训练方法,召回模型是后期融合特征,排序模型是前期融合特征

本文主要是介绍一文看懂推荐系统:召回06:双塔模型——模型结构、训练方法,召回模型是后期融合特征,排序模型是前期融合特征,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一文看懂推荐系统:召回06:双塔模型——模型结构、训练方法,召回模型是后期融合特征,排序模型是前期融合特征

提示:最近系统性地学习推荐系统的课程。我们以小红书的场景为例,讲工业界的推荐系统。
我只讲工业界实际有用的技术。说实话,工业界的技术远远领先学术界,在公开渠道看到的书、论文跟工业界的实践有很大的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:矩阵补充、最近邻查找,工业界基本不用了,但是有助于理解双塔模型


提示:文章目录

文章目录

  • 一文看懂推荐系统:召回06:双塔模型——模型结构、训练方法,召回模型是后期融合特征,排序模型是前期融合特征
  • 前言:双塔模型可以看作是矩阵补充的升级版
  • 下面开始讲双塔模型的结构
  • 双塔模型
  • 双塔模型的训练方法:pointwise,parawise,listwise
    • 有三种训练双塔模型的方式
    • 那么该如何选择正负样本?
  • 具体讲解三种训练双塔模型的方式
    • Pointwise训练
    • Pairwise训练
    • Listwise训练
  • 看清楚召回是后端特征融合,而精排是前端特征融合
  • 总结


前言:双塔模型可以看作是矩阵补充的升级版

上一篇文章讲了矩阵补充模型,这篇文章讲的内容是双塔模型
【7】一文看懂推荐系统:召回05:矩阵补充、最近邻查找,工业界基本不用了,但是有助于理解双塔模型

双塔模型可以看作是矩阵补充的升级版,下面是之前介绍的矩阵补充模型。
在这里插入图片描述

模型的输入是一个用户ID和一个物品ID,模型用两个embedding层把两个ID映射到两个向量,
用两个向量的内积来预估用户对物品的兴趣分数。

这个模型比较弱,只用到了用户和物品的ID,没有用到用户和物品的属性。

今儿个介绍的双塔模型可以看作是矩阵补充模型的升级

下面开始讲双塔模型的结构

我们先来看用户的特征,我们知道用户ID还能从用户填写的资料和用户行为中获取很多特征,包括离散特征和连续特征。
在这里插入图片描述

所有这些特征不能直接输入神经网络,而是要先做一些处理,比如用embedding层把用户ID映射到一个向量
在这里插入图片描述

跟之前我们讲过的离散特征的做法相同,用户还有很多离散特征,比如所在城市感兴趣的话题等等。
用embedding层把用户的离散特征映射成向量,
在这里插入图片描述

对于每个离散特征,用单独一个embedding层得到一个向量,比如用户所在城市,用一个embedding层
用户感兴趣的话题,用另一个embedding层
对于性别这样类别数量很少的离散特征,直接用one hot编码就行,可以不做embedding

用户还有很多连续特征,比如年龄、活跃程度、消费金额等等。
在这里插入图片描述

不同类型的连续特征有不同的处理方法,最简单的是做归一化,让特征均值是零,标准差是一。
有些长尾分布的连续特征需要特殊处理,比如取log,比如做分筒,

做完特征处理,得到很多特征向量,把这些向量都拼起来输入神经网络。
神经网络可以是简单的全连接网络,也可以是更复杂的结构,比如深度交叉网络。
神经网络输出一个向量,这个向量就是对用户的表征。
在这里插入图片描述

做召回用到这个向量,

同理,物品的特征也是用类似的方法处理

用embedding层处理物品ID和其他离散特征,
用归一化取对数或者分桶等方法处理物品的连续特征,
把得到的特征输入一个神经网络。
在这里插入图片描述

神经网络输出的向量就是物品的表征,用于召回。


双塔模型

下面这样的模型就叫双塔模型,
在这里插入图片描述
**尤其要注意:**本模型直接拿用户表征rep和物品表征rep去融合,史称后端特征融合模型!!
——这是召回的用法,绝对不能提前concat再灌入神经网络又去映射一个打分rate(那是精排的做法!)

左边的塔提取用户的特征
右边的它提取物品的特征
跟上一篇文章的矩阵补充模型相比,双塔模型的不同之处就在于使用了ID 之外的多种特征
作为双塔的输入,两个塔各输出一个向量记作a和b,
两个向量的内积就是模型最终的输出rate,它即预估用户对物品的兴趣。

现在更常用的输出方法是余弦相似度
在这里插入图片描述

两个塔的输出,分别记作向量a和b,余弦相似度意思是两个向量夹角的余弦值,
它等于向量内积除以a的二范数,再除以b的二范数,
其实就相当于先对两个向量做归因化,然后再求内积
余弦相似度的大小介于负一到正一之间。

双塔模型的训练方法:pointwise,parawise,listwise

有三种训练双塔模型的方式

在这里插入图片描述

第一种是pointwise训练,独立看待每个正样本和负样本
做简单的二元分类训练模型,把正样本、负样本组成一个数据集。
在数据集上做随机梯度下降训练双塔模型。

第二种训练双塔模型的方式是parawise,每次取一个正样本,一个负样本组成一个二元组。
损失函数用triplely hing loss或者triple logistic loss
可以参考下面这篇Facebook发的论文。
《Jui-Ting Huang et al. Embedding-based Retrieval in Facebook Search. InKDD, 2020.》

第三种训练双塔模型的方式是listwise,每次取一个正样本和多个负样本组成一个list。
训练方式类似于多元分类,参考下面的文献二,这是Youtube发的论文,
《Xinyang Yi et al. Sampling-Bias-Corrected Neural Modeling for Large Corpus Item Recommendations. In RecSys, 2019.》
训练的时候要用到正样本和负样本。

那么该如何选择正负样本?

正样本很简单,就是用户点击过的物品,用户点击过一个物品,就说明用户对这个物品感兴趣,
负样本的意思是用户不感兴趣的,负样本的选择没有。
在这里插入图片描述

那么显然,在实践中负样本的选择是比较讲究的,有几种看起来比较合理的副样本:

比如没有被召回的
召回了,但是被粗排,精排淘汰的
还有曝光了,但是用户没有点击的

该用哪种?下一篇文章我们再详细讲解如何选择正负样本,
感兴趣的话,可以自己阅读刚才提到的两篇论文,
论文讲解了Facebook Youtube如何选择正负样本,
我们小红书基本是照着做的,再加一些自己的小技巧,取得了很好的效果。


具体讲解三种训练双塔模型的方式

Pointwise训练

第一种是pointwise训练,pointwise是最简单的训练方式,
我们把召回看作简单的二元分类任务,正样本意思是历史记录显示用户对物品感兴趣
对于正样本,我们要鼓励向量a和b的cos相似度接近+1
负样本的意思是用户对物品不感兴趣,对于负样本,我们要鼓励向量a和b的cos相似度接近-1

这就是个很典型的二元分类问题。
如果做pointwise训练,可以把正负样本的数量控制在1 : 2或者1 : 3。
我也不知道为什么,但是互联网大厂的人都这么做,这算是业内的经验。
在这里插入图片描述

Pairwise训练

第二种训练双塔模型的方式是pair wise,做训练的时候,每一组的输入是一个三元组,包括一个用户ID和两个物品ID。
在这里插入图片描述

左边的物品是这样的,就是用户感兴趣的物品。
右边的物品是负样本,是用户不感兴趣的物品,
把用户的特征和物品的特征各自做变换,然后输入神经网络,最终输出三个向量,
用户的特征向量记作a,
两个物品的特征,向量记作B加和B减两个物品,
在这里插入图片描述

特征变换映射物品的embedding结构是相同的,里面的embedding层和全连接层都用一样的参数

分别计算用户对两个物品的兴趣
用户对正样本的兴趣是向量a和向量b加的余弦相似度,这个值越大越好,最好是接近+1。
用户对负样本的兴趣是向量a和向量b减的余弦相似度,这个值越接近-1越好。
在这里插入图片描述

做pair wise训练的基本想法是让用户对正样本的兴趣尽量大,对负样本的兴趣尽量小
也就是让向量a和b加的运行相似度大于向量a和b减的余弦相似度,而且两者之差越大越好。

我们来推导一下损失函数,
在这里插入图片描述

我们希望看到用户对正样本的兴趣很大,而对负样本的兴趣很小,最好是前者比后者大M这么多。
这个M是个超参数,需要调,比如设置成1,
如果前者比后者大了M,那么就没有损失,
否则如果用户对正样本的兴趣不够大,没有比负样本的兴趣大M这么多,就会有损失,
损失等于cos(a,b减)加上M,再减去cos(a,b加)【这个loss是正数,需要让它降到0才行】
这样就推导出了triple hinge loss
如果熟悉孪生网络sign is network,应该见过这种损失函数。
训练的时候每个训练样本都是个三元组,向量a是用户的表征,B加和B减分别是物品正样本和负样本的表征,

我们希望损失函数越小越好,训练的过程就是对损失函数求最小化,
用梯度更新双塔神经网络的参数,
Triplely hinge loss只是一种损失函数,还有别的损失函数起到同样的作用。
在这里插入图片描述

triplet logistic loss是这样定义的,其实就是把logistic函数作用到这一项最小化,
Logistic函数会鼓励这一项尽量小,也就是让cos( a,b减)尽量小。
让cos( a,b加)尽量大,
跟上面的Triplely hinge loss道理是一样的,
都是让用户对正样本的兴趣分数尽量高,用户对负样本的兴趣分数尽量低。
这里的sigma是个大于零的超参数控制损失函数的形状,Sigma需要手动设置。

稳了,我们已经推导出了Triplely hinge loss和Triplely logistic loss,可以通过最小化这样的损失函数来训练双塔模型。

训练样本都是三元组,其中一个用户,一个正样本物品,还有一个负样本物品。

Listwise训练

第三种训练双塔模型的方式是list wise。
做list wise训练的时候,每次取一个正样本和很多负样本,
需要一个用户把它的特征向量记作a,
在这里插入图片描述

取一个正样本,意思是历史记录显示用户喜欢这个物品,把这个物品的特征向量记作B加,
还需要取N个负样本,把它们的特征向量去做B1减到BN减。
做训练的时候要鼓励a和正样本b+的余弦相似度尽量大,
鼓励a和负样本bn-的余弦相似度尽量小。

下面我演示一下list white训练具体怎么做。
在这里插入图片描述

向量a和B加的余弦相似度是个介于负一到正一之间的实数,意思是用户对正样本物品兴趣的预估分数。
这个分数越大越好,最好是接近正一

其余的cos相似度对应负样本,它们是用户对N个负样本兴趣的预估分数,这N个分数越小越好,最好是接近负一
把这N个负样本的分,和正样本的分,全部输入soft max激活函数【它就是将整体归一化为0–1的函数】,
激活函数输出N+1个分数,这些分数都介于零到一之间,
最左边的分数S加对应正样本,我们希望这个分数越大越好,最好是能接近1。
右边的N个分数对应负样本,我们希望这些分数越小越好,最好都接近零。

在这里插入图片描述

上图中,y+=1是正样本的标签,意思是鼓励S+接近1
负样本的标签是Y1减到YN减,把它们都设置成0,意思是鼓励S1减到SN减都接近0,
我们用Y和S的交叉熵作为损失函数。

训练的时候,最小化交叉熵,意思是鼓励soft max,输出的预测值S,尽可能接近标签Y,
其实交叉商就等于负的log s加【上面公式】

训练的时候最小化交叉商也就是最大化S加
这就等价于最大化正样本的余弦相似度,
最小化负样本的余弦相似度。

懂???三种训练方法的本质都是让用户和正样本物品的余弦相似度大,而用户跟负样本的余弦相似度小。

我已经讲完了双塔模型和三种训练方式,最后总结一下这本文讲过的内容,
在这里插入图片描述

双塔模型,顾名思义有两个塔,一个用户塔,一个物品塔,
两个塔各输出一个向量,
向量的余线相似度就是对兴趣的预估值,这个值越大,用户就越有可能对物品感兴趣。

有三种训练双塔模型的方式,
一种是pointwise,每次用一个用户和一个物品,物品可以是正样本也可以是负样本,
第二种训练方式是pair wise,每次取一个用户一个这样本物品,一个负样本物品
训练的目标是最小化Triplely hinge loss和Triplely logistic loss,
也就是让正样本的余弦相似度尽量大,与负样本余弦相似度尽量小。

第三种训练方法是list wise,每次取一个用户,一个正样本物品,很多个负样本物品
训练的时候用soft max激活函数
用交叉熵损失函数训练,也是鼓励正样本余弦相似度尽量大
负样本余弦相似度尽量小

看清楚召回是后端特征融合,而精排是前端特征融合

在结束之前,我们讨论一种错误的召回模型的设计,
在这里插入图片描述

大家一看到这种结构就应该知道这是粗排或者精排的模型,而不是召回的模型,这种模型没办法应用到召回。

下面这块结构跟双塔模型是一样的,都是分别提取用户和物品的特征,得到两个特征向量,
在这里插入图片描述

但是上层的结构就不一样了,这里直接把两个向量做concat。

然后输入一个神经网络,神经网络可以有很多层,这种神经网络结构属于前期融合
在进入全连接层之前就把特征向量拼起来了。
在这里插入图片描述
看一下精排模型图中的神经网络,神经网络最终输出一个实数作为预估分数,表示用户对物品的兴趣,
把两个特征向量拼起来输入神经网络,这种前期融合的模型不适用于召回。

这种前期融合的神经网络结构跟前面讲的双塔模型有很大区别,双塔模型属于后期融合
在这里插入图片描述

两个塔在最终输出相似度的时候才融合起来。【前面压根没用神经网络去输出相似度哦】

假如把这种精排的模型用于召回,就必须把所有物品的特征都挨个输入模型,预估用户对所有物品的兴趣。
假设一共有1亿个物品,每给用户做一次召回,就要把这个模型跑1亿次,这种计算量显然不可行。

如果用这种模型,就没办法用近似最近邻查找来加速计算。

这种模型通常用于精排排序,即从几千个候选物品中选出几百个,计算量不会太大。

以后大家一看到这种前期融合的模型,就要明白这是排序模型,不是召回模型。
召回只能用双塔那样的后期融合模型。

okay,今天讲解了双塔模型的神经网络结构和三种训练的方式。
做训练的时候需要选择正负样本,这部分内容下文我再详细给你说。


总结

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

(1)找工作投简历的话,你要将招聘单位的岗位需求和你的研究方向和工作内容对应起来,这样才能契合公司招聘需求,否则它直接把简历给你挂了
(2)你到底是要进公司做推荐系统方向?还是纯cv方向?还是NLP方向?还是语音方向?还是深度学习机器学习技术中台?还是硬件?还是前端开发?后端开发?测试开发?产品?人力?行政?这些你不可能啥都会,你需要找准一个方向,自己有积累,才能去投递,否则面试官跟你聊什么呢?
(3)今日推荐系统学习经验:三种训练方法的本质都是让用户和正样本物品的余弦相似度大,而用户跟负样本的余弦相似度小。前期融合的模型是排序模型,不是召回模型,召回模型都是后期融合的,直接求余弦相似度,表示用户对它的喜好程度。

这篇关于一文看懂推荐系统:召回06:双塔模型——模型结构、训练方法,召回模型是后期融合特征,排序模型是前期融合特征的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/331775

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

06 C++Lambda表达式

lambda表达式的定义 没有显式模版形参的lambda表达式 [捕获] 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 有显式模版形参的lambda表达式 [捕获] <模版形参> 模版约束 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 含义 捕获:包含零个或者多个捕获符的逗号分隔列表 模板形参:用于泛型lambda提供个模板形参的名