【推荐算法】双塔模型介绍

2023-11-17

双塔模型的结构不仅在推荐领域的召回和粗排环节中被广泛采用;而且在其它领域,如文档检索、问答系统等都有它的应用场景。

我们常说的双塔模型的结构,并不是一个固定不变的网络,而是一种模型构造思路:即把模型分成用户侧模型和物品侧模型两部分,然后用互操作层把这两部分联合起来,产生最后的预测得分。

一、双塔模型结构

双塔模型的结构如下图所示:这种 “物品侧模型 + 用户侧模型 + 互操作层” 的模型结构,我们可以把它们统称为“双塔模型”结构。

双塔模型最大的特点就是 “User和Item是独立的两个子网络”,左侧是User塔,右侧是Item塔。这两个塔的参数不共享,他们分别输出User Embedding 和 Item Embedding。然后将2个 Embedding 作为互操作层的输入,计算它们的相似度。

计算相识度的方式也有多种方案,如用简单的点积操作、Cosine相似度计算,或者是用比较复杂的 MLP 结构。

二、双塔模型的优缺点

  • 优点一:容易部署上线、服务实时性高

因为 User 和 Item 的 Embedding 我们可以在离线训练的时候获取到,并且会提前存入到数据库中。所以使用双塔模型时,我们不用把整个模型都部署上线,只需要从数据库中检索对应的Embedding,在线上进行互操作就可以了。如果这个互操作是点积操作,那么这个实现可以说没有任何难度。实际应用中非常容易落地,这也正是双塔模型在业界巨大的优势所在。

  • 缺点一:模型使用的特征缺少交叉组合类特征

一般在做推荐模型的时候,会有些特征工程方面的工作,比如设计一些User侧特征和Item侧特征的组合特征,一般而言,这种来自User和Item两侧的组合特征是非常有效的判断信号。但是,如果我们采用双塔结构,这种人工筛选的,来自两侧的特征组合就不能用了,因为它既不能放在User侧,也不能放在Item侧,这是特征工程方面带来的效果损失。当然,我个人认为,这个问题不是最突出的,应该有办法绕过去,或者模型能力强,把组合特征拆成两个分离的特征,各自放在对应的两侧,可以让模型去捕获这种组合特征。

  • 缺点二:User 和 Item 发生特征交叉的时机太晚,可能会丢失一些细节特征

如果是精排阶段的DNN模型,来自User侧和Item侧的特征,在很早的阶段,比如第一层MLP隐层,两者之间就可以做细粒度的特征交互。但是,对于双塔模型,两侧特征什么时候才能发生交互?只有在User Embedding和Item Embedding发生内积的时候,两者才发生交互,而此时的User Embedding和Item Embedding,已经是两侧特征经过多次非线性变换,糅合出的一个表征用户或者Item的整体Embedding了,细粒度的特征此时估计已经面目模糊了,就是说,两侧特征交互的时机太晚了。我们知道,User侧和Item侧特征之间的交互,是非常有效的判断信号。而很多领域的实验已经证明,双塔这种过晚的两侧特征交互,相对在网络结构浅层就进行特征交互,会带来效果的损失。这个问题比较严重。

三、双塔模型训练负例如何选择

我们训练精排模型的时候(假设是优化点击目标),一般会用“用户点击”实例做为正例,“曝光未点击”实例做为负例,来训练模型,基本都是这么做的。现在,模型召回以及粗排,也需要训练模型,需要定义正例和负例。一般正例,也都是用“用户点击”实例做为正例;但是怎么选择负例,这里面有不少学问。

如上图,如果我们仍然用“曝光未点击”实例做为召回和粗排的负例训练数据,会发现这个训练集合,只是全局物料库的一小部分,它的分布和全局物料库以及各路召回结果数据,这两个召回和粗排模型面临的实际输入数据,分布差异比较大,所以根据这种负例训练召回和粗排模型,效果如何就带有疑问

为了解决这个问题,在召回或者粗排模型训练的时候,应该调整下负例的选择策略,使得它尽量能够和模型输入的数据分布保持一致。这里总结下可能的做法:

  • 选择1:曝光未点击数据

这就是上面说的导致Sample Selection Bias问题的原因。我们的经验是,这个数据还是需要的,只是要和其它类型的负例选择方法,按照一定比例进行混合,来缓解Sample Selection Bias问题。当然,有些结论貌似是不用这个数据,所以用还是不用,可能跟应用场景有关。

  • 选择2:全局随机选择负例

就是说在原始的全局物料库里,随机抽取做为召回或者粗排的负例。这也是一种做法,Youtube DNN双塔模型就是这么做的。从道理上讲,这个肯定是完全符合输入数据的分布一致性的,但是,一般这么选择的负例,因为和正例差异太大,导致模型太好区分正例和负例,所以模型能学到多少知识是成问题的。

  • 选择3:Batch内随机选择负例

就是说只包含正例,训练的时候,在Batch内,选择除了正例之外的其它Item,做为负例。这个本质上是:给定用户,在所有其它用户的正例里进行随机选择,构造负例。它在一定程度上,也可以解决Sample Selection Bias问题。比如Google的双塔召回模型,就是用的这种负例方法。

  • 选择4:曝光数据随机选择负例

就是说,在给所有用户曝光的数据里,随机选择做为负例。这个我们测试过,在某些场景下是有效的。

  • 选择5:基于Popularity随机选择负例

这种方法的做法是:全局随机选择,但是越是流行的Item,越大概率会被选择作为负例。目前不少研究证明了,负例采取Popularity-based方法,对于效果有明显的正面影响。它隐含的假设是:如果一个例子越流行,那么它没有被用户点过看过,说明更大概率,对当前的用户来说,它是一个真实的负例。同时,这种方法还会打压流行Item,增加模型个性化程度。

  • 选择6:基于Hard选择负例

它是选择那些比较难的例子,做为负例。因为难区分的例子,很明显给模型带来的loss和信息含量比价多,所以从道理上讲是很合理的。但是怎样算是难的例子,可能有不同的做法,有些还跟应用有关。比如Airbnb,还有不少工作,都是在想办法筛选Hard负例上。

这边是借鉴大佬的文章提到的方法: SENet双塔模型:在推荐领域召回粗排的应用及其它 - 知乎

他们在模型召回阶段的经验是:比如在19年年中左右,我们尝试过选择1+选择3的混合方法,就是一定比例的“曝光未点击”和一定比例的类似Batch内随机的方法构造负例,当时在FM召回取得了明显的效果提升。 

双塔模型原理到这里就介绍完了,想看代码可以访问我的另外一篇文章:

【推荐算法】双塔模型代码实现_MachineCYL的博客-CSDN博客

参考链接

SENet双塔模型:在推荐领域召回粗排的应用及其它 - 知乎

深度盘点:基于双塔结构的推荐模型总结 - 知乎

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【推荐算法】双塔模型介绍 的相关文章

  • user-cf的理解-初衷

    使用user cf的初衷 以前的推荐算法 往往是基于内容标签的推荐 比如 用户喜欢了 数据挖掘导论 这本书 而这本书有 数据挖掘 这个标签 那么就给这个用户推荐 其他的 数据挖掘 类的图书 标签就像媒介一样 即是物品 即item 的属性 又
  • 基于 itemCF (item collaborative filtering) 推荐(基于物品的协同过滤算法)的理解

    推荐系统 一般是用于电商 广告 内容 信息流等推荐平台 以挖掘数据的最大价值 可以提升用户粘性和转化率 而本文提及到的基于内容的协同过滤算法就是一个经典的算法 基本思想 首先 什么是协同呢 协同在这里指的就是 用集体的智慧来为个体过滤出他需
  • 搜狐新闻算法原理

    转载 搜狐新闻推荐算法原理 导读 在当前这个移动互联网时代 各种信息内容爆炸 面对海量数据 用户希望在有限的时间和空间内 找到自己感兴趣的内容 这就是推荐需要解决的问题 接下来主要讲解新闻推荐的算法原理 01 新闻推荐算法架构 新闻算法的核
  • 2023年计算机毕设选题推荐

    同学们好 这里是海浪学长的毕设系列文章 对毕设有任何疑问都可以问学长哦 大四是整个大学期间最忙碌的时光 一边要忙着准备考研 考公 考教资或者实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要求的毕设项目越来越难
  • 【推荐系统】geohash召回

    经纬度坐标 精度非常高 只能表述一个点 二维坐标 geohash 一种地理编码系统 划分成4 8的格子 编码长度越长 区域大小越小 位置描述的越精确 1km 一般编码长度用6 7长度 geohash比经纬度好在哪里 浮点数编码成字符串占用的
  • 阿里手淘猜你喜欢Swing算法介绍

    Swing算法原理比较简单 是阿里早期使用到的一种召回算法 在阿里多个业务被验证过非常有效的一种召回方式 它认为 user item user 的结构比 itemCF 的单边结构更稳定 Swing指的是秋千 例如用户 u uu 和用户 v
  • CTR预估的几种方式

    1 CTR预估 CTR预估是计算广告中最核心的算法之一 那么CTR预估是指什么呢 简单来说 CTR预估是对每次广告的点击情况做出预测 预测用户是点击还是不点击 具体定义可以参考 CTR CTR预估和很多因素相关 比如历史点击率 广告位置 时
  • FM算法解析及Python实现

    1 什么是FM FM即Factorization Machine 因子分解机 2 为什么需要FM 1 特征组合是许多机器学习建模过程中遇到的问题 如果对特征直接建模 很有可能会忽略掉特征与特征之间的关联信息 因此 可以通过构建新的交叉特征这
  • 推荐算法实战项目:物品协同过滤算法(ItemCF)原理以及案例实战(附完整 Python 代码)

    协同过滤 collaborative filtering 是一种在推荐系统中广泛使用的技术 该技术通过分析用户或者事物之间的相似性 来预测用户可能感兴趣的内容并将此内容推荐给用户 这里的相似性可以是人口特征的相似性 也可以是历史浏览内容的相
  • 广电大数据用户画像及营销推荐策略(四)——Python实现

    本次大数据项目数据及分析均做脱敏化和保密化 主要分享思路体系 全程用Python实现 数据和代码均不提供 如有建议欢迎讨论 4 模型构建 在实际应用中 构造推荐系统时 并不是采用单一的某种推荐方法进行推荐 为了实现较好的推荐效果 大部分都将
  • 什么是Embedding?

    说起 Embedding 我想你肯定不会陌生 至少经常听说 事实上 Embedding 技术不仅名气大 而且用 Embedding 方法进行相似物品推荐 几乎成了业界最流行的做法 无论是国外的 Facebook Airbnb 还是在国内的阿
  • 【xgboost】贝叶斯自动调参代码

    工作中 很多场景下会用到xgboost模型 如风控 催收 营销 推荐等待 在用xgboost模型进行模型训练的时候 也经常用贝叶斯自动调参来搜索最优的参数 现在把相关的代码贴出来 供大家参考 目前是支持了xgboost和lightgbm模型
  • 【Tensorflow 2.12 电影推荐系统之排序模型】

    Tensorflow 2 12 电影推荐系统之排序模型 学习笔记 导入相关模块 准备数据 加载数据 数据预处理 获取词汇表 构建模型 定义评分排序模型 定义损失函数以及模型评估指标 定义完整的评分排序模型 训练和评估 创建排序模型实例 缓存
  • 【实践篇】推荐算法PaaS化探索与实践

    作者 京东零售 崔宁 1 背景说明 目前 推荐算法部支持了主站 企业业务 全渠道等20 业务线的900 推荐场景 通过梳理大促运营 各垂直业务线推荐场景的共性需求 对现有推荐算法能力进行沉淀和积累 并通过算法PaaS化打造通用化的推荐能力
  • 毕业设计-基于大数据招聘岗位可视化系统-python

    目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要求的毕设项目越来越难 有不少课题是研究生级别难度
  • 图书推荐管理系统Python,基于Django和协同过滤算法等实现

    一 介绍 图书推荐系统 图书管理系统 以Python作为开发语言 基于Django实现 使用协同过滤算法实现对登录用户的图书推荐 二 效果展示 三 演示视频 视频 代码 https www yuque com ziwu yygu3z gq5
  • 【数据结构】复杂度

    博客主页 小王又困了 系列专栏 数据结构 人之为学 不日近则日退 感谢大家点赞 收藏 评论 目录 一 什么是数据结构 二 什么是算法 三 算法的效率 四 时间复杂度 4 1大O渐进表示法 4 2常见时间复杂度计算举例 4 3例题 消失的数字
  • 【推荐算法】双塔模型代码(tensorflow)

    推荐算法 双塔模型介绍 MachineCYL的博客 CSDN博客 上文介绍了双塔模型的原理和结构 这篇介绍一下双塔模型的代码实现 我使用的是tensorflow来实现双塔模型和模型训练 一 前期准备 tensorflow使用的版本是2 0
  • 每日一题分享

    数字以 0123456789101112131415 的格式作为一个字符序列 在这个序列中第 2 位 从下标 0 开始计算 是 2 第 10 位是 1 第 13 位是 1 以此类题 请你输出第 n 位对应的数字 分析 0 9 共10个 10
  • lr推荐模型 特征重要性分析

    在分析lr模型特征重要性之前 需要先明白lr模型是怎么回事儿 lr模型公式是sigmoid w1 x1 w2 x2 wn xn 其中w1 w2 wn就是模型参数 x1 x2 xn是输入的特征值 对于lr模型来说 特征可以分为两个粒度 一个是

随机推荐

  • JPEG数据格式分析

    添加链接描述 参考如让 感谢原创分享 JPEG数据分析 分析对象是一幅8x8的jpg图片 如下 图片已被放大并被虚线切分 这里写图片描述 用windows照片查看器查看图片详细信息 信息 参数 大小 667字节 尺寸 8x8 宽度 8像素
  • 【干货】Spring远程命令执行漏洞(CVE-2022-22965)原理分析和思考

    前言 上周网上爆出Spring框架存在RCE漏洞 野外流传了一小段时间后 Spring官方在3月31日正式发布了漏洞信息 漏洞编号为CVE 2022 22965 本文章对该漏洞进行了复现和分析 希望能够帮助到有相关有需要的人员进一步研究 1
  • 《热题100》字符串、双指针、贪心算法篇

    思路 对于输入的的字符串 只有三种可能 ipv4 ipv6 和neither ipv4 四位 十进制 无前导0 小于256 ipv6 八位 十六进制 无多余0 00情况不允许 不为空 class Solution def solve sel
  • 区块链扩容系列之Plasma MVP

    以太坊低TPS一直被诟病 最近V神提出一种将以太坊TPS提升到500的方案 一经发表就被BM调侃 可见以太坊低TPS目前确实严重阻碍了以太坊的发展 连V神都不得不经常发声 我们知道以太坊低TPS的一个关键原因是以太坊采用POW 因而将部分交
  • selenium爬虫检测之如何避免对isTrusted属性检测

    如何避免对isTrusted属性检测 检测原理 什么是isTrusted属性 在web api官方网站mozilla org有如下解释 Event接口的 isTrusted 属性是一个只读属性 它是一个布尔值 Boolean 当事件是由用户
  • java中访问数组元素的方法

    1 使用普通 for 循环 这是最常见的遍历数组的方法 使用传统的 for 循环语法 通过索引来访问数组中的每个元素 int arr 1 2 3 4 5 for int i 0 i lt arr length i int element a
  • 【线上死锁分析】由index_merge引发的死锁事件

    1 事情背景 背景由于更换新的短信供应商 同事之前可能对这块业务不太熟 原本是回执ID recordId 一个手机号一个 但是同事接的时候将这个批量发送接口只设置了一个recordId 导致了多个手机号共用了一个recordId 2 线上d
  • Linux系统发生故障时,所有文件会以只读方式挂载

    解决办法 执行mount o remount rw 让文件可以修改 原因 挂载磁盘时 没有写fstab文件 或者fstab文件里写的是磁盘名称而不是uuid
  • 解决问题:EXT4 filefield 文件上传在IE8上返回状态无效,弹出下载页面

    解决描述 EXT4 filefield 以form 文件上传 基于IE8浏览器 不管上传成功与否 返回状态无效 即success function fp o 方法无效 并弹出下载页面 原代码情况如下 1 EXT4前台视图层view view
  • civetweb框架学习和使用(一)

    背景 CivetWeb基于Mongoose项目 是一个易于使用 功能强大的C C 嵌入式Web服务器 在2013年8月16日 在编写和分发此项目所依据的原始代码后 Mongoosed的许可证已经更改了 因此 CivetWeb已从上一个MIT
  • Windows下在后台运行jar包

    为什么80 的码农都做不了架构师 gt gt gt 新建一个bat文件 输入 echo off start javaw jar xxx jar exit 执行这个批处理程序就可以在后台运行jar包了 转载于 https my oschina
  • FIddler之Fiddler移动端抓包

    前言 笔者今天的这篇文章呢 想使用通俗易懂的话语 让大家明白以下内容 什么是抓包哪些场景需要用到抓包Fiddler抓包的原理怎样使用Fiddler进行移动端抓包 一 抓包 包 Packet 是TCP IP协议通信传输中的数据单位 一般也称
  • Apache/Tomcat/JBOSS/Jetty/Nginx区别 与选择

    总结 Apache Tomcat JBOSS Nginx区别 1 Apache是Web服务器 Tomcat是应用 Java 服务器 Tomcat在中小型系统和并发访问用户不是很多的场合下被普遍使用 Apache支持静态页 Tomcat支持动
  • 千行代码bug率统计

    1 计算公式 千行代码bug率 bug数 代码行数 1000 2 bug率标准 CMMI级别中做出了相关的指标规定 千行代码缺陷率 bug率 CMM1级 11 95 CMM2级 5 52 CMM3级 2 39 CMM4级 0 92 CMM5
  • JWT(Json Web Token)的原理、渗透与防御

    关于JWT kid安全部分后期整理完毕再进行更新 2023 05 16 JWT的原理 渗透与防御 目录 JWT的原理 渗透与防御 含义 原理 JWT的起源 传统session认证问题 token与session区别 JWT的结构与内容 JW
  • CVPR 2020-Object Detection

    目录 2D目标检测 视频目标检测 2D目标检测 Large Scale Object Detection in the Wild From Imbalanced Multi Labels Rethinking Classification
  • 芯片手册中的英文的表示含义

    芯片手册中的英文的表示含义 在读芯片的数据手册的时候 会有一些英文表示不知道是什么含义 现在整理了一些在下面 1 ppm 在一些电压芯片数据手册里 有一个描述基准性能的直流参数 称为温度漂移 也称温度系数 或简称TC Temperature
  • 机器学习之朴素贝叶斯: sklearn.naive_bayes

    朴素贝叶斯 sklearn naive bayes 1 贝叶斯原理 2 朴素贝叶斯 3 朴素贝叶斯模型 3 1 多项式模型MultinomialNB 3 2 高斯模型GaussianNB 3 3 伯努利模型BernoulliNB 4 skl
  • Python爬虫之爬取CSDN人工智能栏目的文章

    在进行正式开始爬虫之旅前 我们要认识几个Python库 urllib2 Python标准库 该库中提供了一系列针对url的操作方法 re Python标准库 提供了一系列针对字符串匹配的方法 BeautifulSoup4 最主要的功能是从网
  • 【推荐算法】双塔模型介绍

    双塔模型的结构不仅在推荐领域的召回和粗排环节中被广泛采用 而且在其它领域 如文档检索 问答系统等都有它的应用场景 我们常说的双塔模型的结构 并不是一个固定不变的网络 而是一种模型构造思路 即把模型分成用户侧模型和物品侧模型两部分 然后用互操