一文看懂推荐系统:召回07:双塔模型——正负样本的选择,召回的目的是区分感兴趣和不感兴趣的,精排是区分感兴趣和非常感兴趣的

提示:最近系统性地学习推荐系统的课程。我们以小红书的场景为例,讲工业界的推荐系统。
我只讲工业界实际有用的技术。说实话,工业界的技术远远领先学术界,在公开渠道看到的书、论文跟工业界的实践有很大的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:双塔模型——模型结构、训练方法,召回模型是后期融合特征,排序模型是前期融合特征


提示:文章目录

文章目录

  • 一文看懂推荐系统:召回07:双塔模型——正负样本的选择,召回的目的是区分感兴趣和不感兴趣的,精排是区分感兴趣和非常感兴趣的
  • 选对正负样本的作用大于改进模型结构
  • 负样本咋搞?
    • 非均匀抽样负样本
    • batch内负样本
  • 困难负样本
  • 错误负样本选取,直接就把曝光但是没有点击的物品作为负样本
  • 总结

选对正负样本的作用大于改进模型结构

今儿个继续讲双塔模型训练,
【8】一文看懂推荐系统:召回06:双塔模型——模型结构、训练方法,召回模型是后期融合特征,排序模型是前期融合特征

双塔模型需要用到正样本和负样本选对正负样本的作用大于改进模型结构。

首先来讨论如何选择正样本,正样本比较好选,

如果物品给用户曝光之后,用户有点击行为,就说明用户对物品感兴趣,把用户和物品二元组作为正样本。

但是选取正样本的时候有个问题需要解决,
大家应该听说过二八法则,就是少部分物品占据了大部分点。

正样本是有点击的物品,所以正样本大多属于热门物品
拿过多的热门物品作为正样本,会对冷门物品不公平,
这样会让热门物品更热,冷门物品更冷。

解决方案是对冷门物品做过采样,或者对热门物品做降采样
过采样的英文是up sampling,意思是让一个样本出现多次。
降采样的英文是down sampling,意思是抛弃一些样本。

比如一定概率抛弃热门物品,抛弃的概率与样本点击次数正相关。一会细说

前面咱们讲过,推荐系统的链路分为召回、粗排、精排、重排,稍后要用到这里。

再简单回顾一下,
召回是从物品的数据库中快速取回一些物品,
比如小红书有上亿篇笔记,用几十条召回通道各取回一两百篇笔记,一共取回几千篇笔记,
然后用粗排和精排给召回的笔记逐一打分,保留分数最高的笔记
最后一步是重排,这一步主要是做多样性采样,还会用很多规则做调整,最终有几十篇笔记被选中曝光给用户。

负样本咋搞?

下面我们讨论怎样选取训练双塔模型的负样本,负样本就是用户不感兴趣的物品,
也就是链路上每一步被淘汰的物品
召回模块儿从几亿物品中选出几千个。
被召回的物品只是极少数,这些没被召回的几亿个物品可以看作是负样本

粗排和精排,从几千个召回的物品中选出几百个,
也就是说几千个物品会被这一步淘汰,最终有几十个物品曝光给用户,
——这些没有被曝光给用户的就是负样本

当然了,不是每个曝光的物品都会被点击
曝光了,但是用户没有点击的也可以视作是负样本。

不过一定要小心,这仨不能同时用于某一个阶段:
比如曝光未点击的千万不能用于召回!一会给你说为啥!

接下来我们分别讨论这三类负样本
首先是简单负样本:简单负样本是未被召回的物品,这种物品通常是用户不感兴趣的
几亿个物品里面只有几千个被召回,也就是说几乎所有的物品都没有被召回,
那么未被召回的物品跟全体物品基本上是一回事儿,
所以直接在全体物品中做随机抽样就可以了。
抽到的物品作为负样本


当然,问题在于怎样做抽样?

是均匀抽样还是非均匀抽样?

非均匀抽样负样本

均匀抽样的坏处是对冷门物品不公平。
前面讨论过二八法则,少部分物品占据了大部分点击,这会导致这样本大多是热门物品。
如果在全体笔记中做均匀抽样生成负样本,那么负样本大多是冷门物品,
总拿热门物品做正样本,冷门物品做负样本,对冷门物品会不公平,
这样会让热门物品更热,冷门物品更冷,

所以负样本抽样要随机非均匀
这样可以打压热门物品抽样的概率与热门程度正相关,热门物品成为负样本的概率大。
物品的热门程度可以用它的点击次数来衡量。
可以这样做,抽样每个物品的抽样概率正比于它点击次数的0.75次方

0.75是个经验值。

刚才介绍的简单负样本是从全体物品中抽的。

batch内负样本

下面我介绍另一种简单负样本,叫做batch内负样本。

图中是一个batch内的样本,左边是用户,右边是物品,
中间的箭头表示用户点击过的物品。

图中任意一个样本都是正样本,比方说第二个用户点击过第二个物品,这就说明用户对物品感兴趣。
这个二元组是个正样本。

什么是batch内负样本?这里举个例子,
第一个用户跟第二个物品可以组成一个负样本。
第一个用户跟第三个物品也可以组成一个负样本,
设一个batch内有N个正样本,那么一个用户跟N-1个物品可以组成负样本,
所以这个batch内一共有N×N-1个负样本,这些都属于简单负样本。

对于第一个用户来说,第二个物品就相当于是从全体物品中随机抽样的
第一个用户大概率不会喜欢第二个物品。

batch内负样本存在一个问题,我来分析一下,
图中这些二元组都是通过点击行为选取的,
第一个用户和第一个物品之所以成为一个正样本,原因是用户点击了物品,
所以一个物品出现在batch内的概率正比于它的点击次数,也就是它的热门程度。

这样就会有个问题,前面讨论了物品成为简单负样本的概率应该是正比于点击次数的0.75次方,
但是在这里我们做batch内负采样,物品成为负样本的概率正比于它点击次数的1次方【过大了】

重复一遍,抽样概率本应该正比于点击次数的0.75次方,
但这里实际上是1次方。
也就是说,任何物品成为负样本的概率过大,
一个物品成为负样本的概率越大,模型对这个物品打压就会越狠,对负样本应该打压,但这里打压的太狠了
这样会造成偏差。

这篇Youtube论文讲了如何修正偏差,
《Xinyang Yi et al. Sampling-Bias-Corrected Neural Modeling for Large Corpus Item Recommendations. In RecSys, 2019.》

我们在小红书照着做了,确实拿到了收益。

我具体讲一下如何修正偏差。
我们把物品i被抽到的概率记作pi,它正比于物品i的点击次数,反映出物品的热门程度。

双塔模型通常用余弦相似度预估用户对物品I的兴趣分数rate,
Cos中的a是用户的特征向量,
bi是物品i的特征向量,
训练的时候要鼓励正样本的=余弦相似度尽量大,
鼓励负样本的余弦相似度尽量小。

根据Youtube论文的建议,训练双塔模型的时候,
应该把cos(a bi)调整为cos(a bi)- log(pi),
这样可以纠偏,人为地把这个负样本的概率减掉,避免过分打压热门的物品

训练结束之后在线上做召回的时候,还是用原本的余弦相似度cos(a bi),
线上召回的时候不用做这种调整,不用减 log(pi)。

刚才我讲了两种简单负样本,一种是从全体物品中做随机抽样生成负样本,另一种是在batch内生成负样本。

困难负样本

接下来我要介绍困难负样本,

困难负样本是被排序淘汰的物品,
比如物品被召回,但是被粗排淘汰,
比方说召回5000个物品进入粗排,粗排按照分数做截断,只保留前500个,
那么被淘汰的4500个物品都可以被视作困难负样本

为什么被粗排淘汰的物品叫做困难副样本?

这些物品被召回,说明他们跟用户兴趣多少有些关系,
被粗排淘汰说明用户对物品的兴趣不够强,所以分成了负样本。
被正负样本做二元分类的话,这些困难负样本容易被分错,容易被错误的判定为正样本

更困难的样本是通过了粗牌,但是在精牌中分数排名靠后的物品
比方说精牌给500物品打分,排名在后300的物品都算是极度困难的父样本。

能够通过粗牌进入金牌,说明物品已经比较符合用户兴趣了,但未必是用户最感兴趣的,
所以在精牌中排名靠后的物品可以被视为极度困难负样本训练。

双塔模型其实是个二元分类任务,让模型区分正负样本,
把全体物品作为简单负样本,分类准确率会很高,因为他们明显跟用户兴趣不符。

被粗排淘汰的物品也是负样本,但他们多少跟用户兴趣有些相关,所以比较困难,分类准确率会稍微低一些。
精排分数靠后的物品也可以视作是负样本,这些物品跟正样本有些相似
所以他们很容易被判定为正样本,对他们做分类非常困难。

工业界比较常用的做法是把简单负样本与困难负样本混合起来作为训练数据。

比如50%是简单副样本,就是从全体物品中随机非均匀抽样出来的,
另外50%是困难负样本,也就是从粗排和精排淘汰的物品中随机抽样出来的。


错误负样本选取,直接就把曝光但是没有点击的物品作为负样本

前面解释了简单副样本和困难副样本,
最后讨论一种常见的错误
很多人以为可以把曝光但是没有点击的物品作为负样本。

其实这是错误的,

如果你训练双塔模型的时候,用一些这样的负样本,效果肯定会变差,
工业界的人紧踩过这个雷,把这个作为教训。

我再解释一遍,这种错误的负样本是什么意思,看一下这张图,

物品1–80这些都是重排之后曝光给用户的物品。
既然都曝光给用户了,这所有80个都认为是用户很感兴趣的了,你咋能做召回的负样本呢?????????

通过一些技术手段,我们得知用户只看了前五个物品【曝光了】。

也就是说前五个物品曝光给了用户,
第六到80物品没有曝光,

在曝光的物品里面,第一个和第五个被用户点击,其余三个物品没有被用户点击,
有人觉得可以把这三个物品当做负样本,因为他们有曝光,但是没有点击。

我再强调一遍,这种想法是错误的,训练召回模型 不能用这样的副样本,
原因我稍后解释,

这种负样本不是给训练召回模型 用的。而是给训练排序模型用的

训练排序模型的时候确实要用这种曝光但是没有点击的物品作为负样本。

我解释一下选择负样本的原理。
召回的目的是快速找到用户可能感兴趣的物品,凡是用户可能感兴趣的全都取回来,
然后再交给后面的排序模型逐一做甄别。
召回模型的任务是区分用户不感兴趣的物品和可能能感兴趣的物品
不是区分比较感兴趣的物品和非常感兴趣的物品【这是排序干的事】,这就是选择负样本的基本思路。

可以把全体物品当做负样本,把它们叫做简单副样本,这些物品绝大多数都是用户根本不感兴趣的,
双塔模型很容易区分,
这些负样本被召回,然后被粗排精排淘汰的叫做困难负样本
这些物品能被召回,说明他们跟用户的兴趣有一定的相关性
被排序模型过滤掉,说明用户对这些物品的兴趣不够强,他们可以作为排序模型的负样本,
这样的负样本跟正样本有点像,做分类的时候比较难以区分,所以算是困难负样本

有曝光但是没有点击的物品看起来可以作为负样本,但其实不能,
只要用了这种负样本,双塔模型的效果肯定会变差,

为什么?

一个物品能够通过精牌模型的甄别,最终曝光给用户,
说明物品已经非常匹配用户的兴趣点了,
每次给用户展示几十个物品,用户不可能每个物品都点击,
而曝光了没有点击不代表不感兴趣,
可能只是用户对别的物品更感兴趣就点击了别的,
或者是用户感兴趣,只是碰巧没有点击

曝光但是没有点击的物品已经算是非常匹配的了,甚至可以拿来做召回的正样本
不应该把曝光但是没有点击的物品作为召回的负样本,记住这一点。

再说一遍!!!
召回的目的是区分不感兴趣的和比较感兴趣的,
而排序才是区分比较感兴趣的和非常感兴趣的。

这类负样本只适用于训练排序模型,但不适用于训练召回模型。

这是工业界的共识,是通过反复做实验得出的结论。


最后总结一下本文的内容,
详细讲解了如何选择正负样本,正样本意思是曝光而且有点击的用户物品二元组。

简单负样本有两种,
一种是从全体物品中做随机抽样,
另一种是batch内负样本。

困难负样本是被召回但是被排序淘汰的物品。
这些物品跟正样本比较像,做分类会有困难,所以叫做困难负样本。

我们还讨论了一种错误的做法,就是拿曝光但是未点击的物品作为召回的负样本,
这种负样本只能用于排序,不能用于召回。

这样子的话,你就明白了负样本的本质了吧
不同的阶段负样本不同

排序的负样本可以作为召回的正样本
懂?


总结

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

(1)找工作投简历的话,你要将招聘单位的岗位需求和你的研究方向和工作内容对应起来,这样才能契合公司招聘需求,否则它直接把简历给你挂了
(2)你到底是要进公司做推荐系统方向?还是纯cv方向?还是NLP方向?还是语音方向?还是深度学习机器学习技术中台?还是硬件?还是前端开发?后端开发?测试开发?产品?人力?行政?这些你不可能啥都会,你需要找准一个方向,自己有积累,才能去投递,否则面试官跟你聊什么呢?
(3)今日推荐系统学习经验:不应该把曝光但是没有点击的物品作为召回的负样本,而是召回的正样本哦,这些也只能是精排模型的负样本,即排序的负样本可以作为召回的正样本,所以负样本选取很妙的。

一文看懂推荐系统:召回07:双塔模型——正负样本的选择,召回的目的是区分感兴趣和不感兴趣的,精排是区分感兴趣和非常感兴趣的相关推荐

  1. 一文看懂推荐系统:物品冷启02:简单的召回通道

    一文看懂推荐系统:物品冷启02:简单的召回通道 提示:最近系统性地学习推荐系统的课程.我们以小红书的场景为例,讲工业界的推荐系统. 我只讲工业界实际有用的技术.说实话,工业界的技术远远领先学术界,在公 ...

  2. 一文看懂推荐系统:概要01:推荐系统的基本概念

    一文看懂推荐系统:概要01:推荐系统的基本概念 提示:最近系统性地学习推荐系统的课程.我们以小红书的场景为例,讲工业界的推荐系统. 我只讲工业界实际有用的技术.说实话,工业界的技术远远领先学术界,在公 ...

  3. 一文看懂推荐系统:Gate网络2:百度GemNN(Gating-Enhanced Multi-Task Neural Networks)

    一文看懂推荐系统:Gate网络2:百度GemNN(Gating-Enhanced Multi-Task Neural Networks) 提示:最近系统性地学习推荐系统的课程.我们以小红书的场景为例, ...

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

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

  5. 一文看懂推荐系统:Gate网络(一):新浪微博GateNet,GateNet就是想用attention的方法去搞,和SENet一样,都是张俊林的杰作

    一文看懂推荐系统:Gate网络(一):新浪微博GateNet,GateNet就是想用attention的方法去搞,和SENet一样,都是张俊林的杰作 提示:最近系统性地学习推荐系统的课程.我们以小红书 ...

  6. 一文看懂推荐系统:排序06:粗排三塔模型,性能介于双塔模型和精排模型之间

    一文看懂推荐系统:排序06:粗排三塔模型,性能介于双塔模型和精排模型之间 提示:最近系统性地学习推荐系统的课程.我们以小红书的场景为例,讲工业界的推荐系统. 我只讲工业界实际有用的技术.说实话,工业界 ...

  7. 一文看懂推荐系统:物品冷启05:流量调控

    一文看懂推荐系统:物品冷启05:流量调控 提示:最近系统性地学习推荐系统的课程.我们以小红书的场景为例,讲工业界的推荐系统. 我只讲工业界实际有用的技术.说实话,工业界的技术远远领先学术界,在公开渠道 ...

  8. 一文看懂推荐系统:排序01:多目标模型

    一文看懂推荐系统:排序01:多目标模型 提示:最近系统性地学习推荐系统的课程.我们以小红书的场景为例,讲工业界的推荐系统. 我只讲工业界实际有用的技术.说实话,工业界的技术远远领先学术界,在公开渠道看 ...

  9. 一文看懂推荐系统:排序04:视频播放建模

    一文看懂推荐系统:排序04:视频播放建模 提示:最近系统性地学习推荐系统的课程.我们以小红书的场景为例,讲工业界的推荐系统. 我只讲工业界实际有用的技术.说实话,工业界的技术远远领先学术界,在公开渠道 ...

最新文章

  1. 8坨穿越千年的便便,让哈佛科学家找到治疗糖尿病的线索 | Nature
  2. Java操作HBase 2.0.5:创建表代码示例
  3. IOC操作Bean管理XML方式(bean的作用域)
  4. Centos7 重启网卡
  5. c语言编译前端,c语言编译器前端的设计与实现.doc
  6. SpringMVC_04 拦截器 【拦截器的编程步骤】【session复习?】
  7. Windows Terminal 0.9 发布
  8. C++对象数组与对象指针的用法【C++初学面向对象编程】
  9. 操作系统作业3 xv6 CPU alarm
  10. 【Caffe】利用log文件绘制loss和accuracy(转载)
  11. 最大值_期末C语言特辑 计算一维数组中最大值
  12. 在ASP.NET中加密页面机制
  13. matplotlib 设置中文字体
  14. 计算机常用英语词汇及读音,e发音的单词有哪些
  15. 读书笔记——《图解TCP/IP》(1/4)
  16. Ubuntu连接蓝牙鼠标键盘
  17. 机器学习之聚类算法——聚类效果评估可视化
  18. 三行九个点,用4条线段连接(扩展,用3条,用1条)
  19. 前端面试题 Doctype作用是什么?严格模式与混杂模式如何区分?他们之间有何意义?
  20. XTUOJ-1251-Colombian Number

热门文章

  1. 在iPad上利用pythonista(python3.6)调用有道翻译API实现单词的批量翻译
  2. 录音怎么转换成文字?4个方法轻松解决
  3. 分数混合运算简便方法_分数混合运算方法
  4. BCD码与十进制转换编码
  5. ubuntu16.04使用小觅相机
  6. unzip 解压大文件出现错误invalid zip file with overlapped components (possible zip bomb)
  7. 日志门面和日志框架(SpringBoot日志实现)
  8. 联想拯救者Y7000P2019双系统安装与卸载(win10+ubuntu18.04+NVIDIA GeForce RTX2060+CUDA10.0+Cudnn+pytorch)
  9. Ubuntu14.0.4 64位安装ADT问题
  10. 【matlab矩阵运算】06、matlab索引:位置索引、线性索引和逻辑索引