负样本的艺术,再读Facebook双塔向量召回算法

Facebook这篇Embedding召回的论文,之前已经有几篇文章涉及过了,分别是《Embeding-based Retrieval in FaceBook Search》、《是"塔"!是"塔"!就是"它",我们的双塔!》和《负样本修正:既然数据是模型的上限,就不要破坏这个上限》,有兴趣的可以回顾一下。

在以上几篇文章中,模型结构没啥好说的,简单的双塔,两边塔的输入都是文本特征、社交特征和位置特征,其中社交特征和位置特征是他们在实验中发现对效果提升比较好的两种特征。

这篇工作的两个核心亮点是hard negative miningembedding ensemble

Hard negative mining是指,他们发现如果将随机负样本这种比较easy的样本与上次召回中排名101-500名的比较hard的样本以100:1的比例去训练模型(为什么是101-500?),得到的效果会比较好。

Embedding ensemble是指,可以将不同负样本训练得到的模型做融合来进行召回。融合的方式可以是相似度结果的直接加权或者是模型的串行融合,比如先用easy负样本训练模型进行初步的筛选,再用hard负样本训练模型进行最终的召回。

另外他们还提到虽然使用unified的特征,就是输入中包含社交特征和位置特征,来进行召回效果会比较好,但是召回结果在一定程度上也会损失文本的匹配,因此也可以先通过只输入文本特征的模型来做筛选再用输入unified特征的模型来召回,这样可以保证文本的匹配。

对于一个搜索引擎而言,往往由两个层构成,一个叫召回层,另一个叫排序层。召回层的目的就是在低延时,低资源利用的情况下,召回相关的documents。排序层就是通过很复杂的算法(网络结构)把和query最相关的document排序到前面。论文的题目,简单直白的告诉了大家,用embeding 表示query和document来做召回。

论文提到,召回的难点,主要体现在候选集合非常庞大,处理亿级别的documents都是正常操作。不同于面部识别召回,搜索引擎的召回需要合并字面召回和向量召回两种结果。"脸书"的召回,还有其他难点,"人"的特征,在"脸书"的搜索尤其重要。

同时,《Embeding-based Retrieval in FaceBook Search》一文中,也通过对Query处理、索引模块、召回模块、排序模块等做了一一的讲解。对该部分细节有兴趣的同学 ,可以查看下原文。

最近又重新翻了翻这篇论文后,对该论文对负样本的应用又有了一些新的感悟。本文主要在样本构造方面,来聊一聊负样本的艺术。

数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限”。有过机器学习经验的人都会知道特征对于解决机器学习问题的重要性了,在y=ax+b的公式里,特征解决了x的问题,而y的问题即是样本的问题,如果定义label,也同样重要。

在召回阶段,我们可以常会沿用排序阶段的思路,使用曝光且点击的为正样本,曝光未点击的为负样本。

这种方法我们在线下使用FM依旧可以有AUC 0.8+的水平,但线上提升却只有微微一点。那么为何线上线下造成了这样的不一致呢?

其一,我们来思考一下,曝光未点击,是怎么来的呢?

曝光未点击的数据,其实也是我们的模型在进行各种排序筛选之后,认为大概率命中了用户的兴趣才曝光给用户的,也就是说,使用的负样本是经过排序处理后的用户最喜欢的TopK个Items,相比之下,这些item对于召回来说,这些负样本很大概率上是召回的正样本了,则此时使用的样本集训练出的模型只学习到了用户可能喜欢的中,区分最喜欢可能喜欢的信息,而对于用户不喜欢的item却没有学到。

其二,在实践中,尤其是很多大型的平台,用户和商品都是亿级别的,对这种级别的数据进行排序不仅会耗费大量的计算资源,而且还要等很久的时间,所以大家都会选择采样观察指标。很多时候大家会选择采样个无关的商品然后加上相关的商品再去计算指标,其实只需要保证采样之后计算得到的指标和我们的全量数据计算得到的指标是保证相对大小的,换言之,这里违反了一条机器学习里的基本准则,线下线上数据样本分布的一致性

在Facebook的论文中,实验了两种负样本的构造方法,论文提到用未点击的曝光作为负样本训练出来的模型非常糟糕,在互联网工作了这么多年,我们在实践中也发现了这个问题。原因是这部分负样本太hard了,这么hard当然要放到精排去学,召回任务最重要的是快速把和query相关的documents拉出来。如果召回阶段就能把曝光未点击的过滤掉,那还要精排干嘛呢?

第二种负样本方法就是随机选择负样本,使用为用户召回的item中未曝光的部分的随机采样,对热门和非热门以热度来进行概率加权,从而实现热度采样,看到这里你也许会感觉似曾相识,没错这里跟Word2Vec中的负样本采样方法是同理的。

实验结果表明,随机采样的负样本比“曝光未点击”的负样本的线上效果要好很多。其实不难理解,线上实际召回时,大部分的item是模型没有见过的,随机的负样本抽样很贴合这种线上实际情况。

从Bias的角度,user和item之间未被发现到的交互可以归因于两大原因:1)商品与用户兴趣不匹配;2)用户不知道该商品。因此,无法区分真正的负反馈(如曝光但不感兴趣)和潜在的正反馈(如未曝光)将导致严重的Bias。

在大多数情况下,一小部分受欢迎的item占了大多数用户交互的比例。当对这些长尾数据进行训练时,该模型通常会给热门项目的评分高于其理想值,而只是简单地将不受欢迎的item预测为负值。因此,推荐热门item的频率甚至比数据集中显示的原始受欢迎程度还要高。

Hard样本这个说法来自图像的分类任务,在搜索推荐系统的召回中没有类别的概念,无法直接应用图像的Hard样本挖掘方法。Facebook在论文中尝试了两种Hard样本挖掘的方法:Hard负样本挖掘和Hard正样本挖掘。

Facebook在论文中发现很多时候同语义召回的结果,大部分都是相似的,而且没有区分度,最相似的结果往往还排不到Top的位置,这就说明之前的训练样本构造方式有问题,导致模型学习的不够充分。所以就想到了对应了解决方案,把和Positive Sample很近的样本作为负样本用于训练,通过这种方式模型就能学到这种Hard样本的区分信息了。

Hard负样本挖掘

论文提到,他们发现top-K召回结果大部分是同文本的,也就是说模型并没有充分利用社交特征。这主要因为随机负样本对于模型而言,因为和query文本完全不同,模型太容易学偏,认为文本一样就是需要召回的。

为了能使模型对相似的结果能有所区分,所以我们可以找到那些embeding很近,但实际上是负样本,让模型去学。

一种方法是在线hard负样本挖掘,这个思路就是in-batch负采样,在一个batch内,有n个相关的query和document,对于任意一个query,其他的document都是它的负样本,但是由于每个batch也是随机产生的,in-batch内负采样并不能获得足够的hard负样本。所以就有了离线hard负样本采样。

论文提到,在实验中发现,简单用hard负样本,效果是比用随机负样本要差的,主要原因是hard负样本需要非文本的特征区分,而easy负样本主要用文本特征区分,因此需要调整采样策略。论文还提到一点,hard负样本取排序模型排在101-500效果最好(所以其实要用semi-hard的样本),而且hard负样本需要和easy负样本混合在一起用。

Hard正样本挖掘

正样本选择相关度最高的,即用户点击过的样本和相似度高的潜在正样本作为Hard正样本。

这里做法和百度的Mobius中的做法很是相似了。

整个框架分为两个阶段,数据增强阶段是绿色箭头的部分,采样并利用样本中的用户请求与广告构造出更多样本,教师网络计算相似度后将低相似度的样本输入学生网络去预测CTR,通过采样的方式得到高CTR低相似度的样本存入buffer,这类样本我们称之为Badcase。

在召回问题中,用“曝光未点击”作为模型的负样本的一系列问题,其根源在于没有很好地理解问题,只是从经验的角度给出了解法,而这种解法不能算错,至少在线上反馈的层面上是有意义的,也具备一定的表征能力。

究其原因,曝光未点击的样本,一方面,它是经过了之前模型层层筛选得到的,至少在之前的模型中,模型判断的是用户对该部分item是具有兴趣的;另一方面,经过了线上的时间曝光之后,用户并没有点击,而这个不点击只是在Feed流中的相对的未点击

因为位置偏差告诉我们,用户倾向于与位于推荐列表中较高位置的item进行交互,而不管这些item的实际相关性如何,因此交互的item可能不是高度相关的。

负样本的艺术,再读Facebook双塔向量召回算法相关推荐

  1. 雕刻的艺术——再读《核舟记》原创

    明有奇巧人曰 王叔远,能以径寸之木,为宫室.器皿.人物,以至鸟兽.木石, 罔(wǎng)不因势象形,各具情态. 尝贻(yí)余核舟一,盖大苏泛赤壁云. 舟首尾长约八分有奇,高可二 黍(shǔ)许.中轩 ...

  2. EMNLP 2020 | Facebook稠密向量召回方案

    0. 背景 机构: Facebook AI.华盛顿大学.普林斯顿大学 作者: Vladimir Karpukhin, Barlas Oğuz, Sewon Min, Patrick Lewis, Le ...

  3. 每周一文(六)Facebook EBR向量召回模型

    契机 从样本和模型两方面来介绍向量级别召回模型的由来.提出很有建设性的工业级别的参考价值. 样本角度 有监督的二分类模型需要构建正负样本,正样本的选择不管是召回和排序来说都是一致的,即用户有显式的点击 ...

  4. yolov4负样本_了解各种挂件--帮助读懂YOLOV4

    YOLOV4在V3的基础上引进了很多挂机,了解这些挂件们,会有助于真正了解这篇文章.所以我就先从挂件开始介绍吧. Weighted-Residual-Connections 文章 weighted-r ...

  5. Facebook向量召回双塔模型

    不知道多少人还记得 <做向量召回 All You Need is 双塔>那篇,那篇介绍了国内外各个大厂做召回的用的双塔模型,其中提到一篇<Embeding-based Retriev ...

  6. 模型花费几十万美元,五年之间指导无数项目,才发现负样本用的是null?

    视学算法报道 机器之心编辑部 人们口口声声担心「人工智能的推断不可靠」,实则连个数据泄露的问题都敢忽略. 人们常会提到,当今流行的深度学习模型是黑箱状态--给它一个输入,模型就会决策出一个结果,其中的 ...

  7. 对比学习效果差?谷歌提出弱语义负样本,有效学习高级特征!

    文 | jxyxiangyu 编 | 小轶 对比学习是 2021 年几大研究热点之一了.如果说预训练模型解决了机器学习对大规模标注数据的需求问题,那么,对比学习可以说是将无监督/自监督学习推广到更一般 ...

  8. MoCo 动量对比学习——一种维护超大负样本训练的框架

    MoCo 动量对比学习--一种维护超大负样本训练的框架 FesianXu 20210803 at Baidu Search Team 前言 在拥有着海量数据的大型互联网公司中,对比学习变得逐渐流行起来 ...

  9. 负样本为王,百篇论文概览负采样方法的前世今生

    文|徐澜玲 源|RUC AI Box 目录 1. 研究背景 1.1 什么是负采样? 1.2 为什么需要负采样? 1.3 为什么需要高质量的负采样? 2. 负采样方法分类梳理 2.1 静态负采样 2.2 ...

最新文章

  1. 统计学习导论 Chapter2--What Is Statistical Learning?
  2. MySQL返回多行错误怎么处理_结果包含多个行错误mysql
  3. Nginx面试!mysql时间类型以及获取当前时间,干货满满
  4. 野比的示波器案例(Winfrom用户控件)
  5. XCode4 实践HelloWorld
  6. 【oracle】TNS-03505: 无法解析名称
  7. Py之openpyxl:openpyxl库的简介、安装、使用方法之详细攻略
  8. linux实验三shell程序设计,实验三 LINUX SHELL编程
  9. Netty : netty 3如何解决空轮询bug
  10. PCB设计中电源与地之间电容的作用(具体放置面积, 大小等等)
  11. paip.asp vbs的代码折叠代码结构查看
  12. 光纤跳线接口_一篇文章读懂光纤接头、尾纤、耦合器、终端盒的作用与接法!...
  13. idea 因破解而无法打开的问题
  14. URL中文参数错误解决方法
  15. 知乎周源微信_每周源代码7
  16. 转载:CAN:CAN矩阵、CAN网络、DBC、MDF关系
  17. jupyter查看python包
  18. Excel学习之旅(三)
  19. 大物设计性实验:电容、电感量的测量
  20. 二元一次在线计算机,(二元一次)方程组求解在线计算器_三贝计算网_23bei.com

热门文章

  1. 对协变和逆变的简单理解
  2. return error怎么定义_SpringBoot 系列 web 篇之自定义返回 Http Code 的 n 种姿势
  3. Science nature合集 2021年度上半年
  4. GraphPad Prism 教程,如何在坐标上放置2条生存曲线
  5. 医学论文摘要撰写的四要素以及注意事项
  6. Cadence IC使用教程
  7. java游戏模拟器mx5_OPPO华为VIVO魅族金立电脑手游安卓模拟器官方下载
  8. IsWindow函数的作用
  9. java mybatis狂神说sql_Mybatis 框架下 SQL 注入攻击的 3 种方式,真是防不胜防!
  10. Android phone xp 华为3x,3000mAh大电池 华为荣耀3X续航能力实测