【论文极速看】MOBIUS 一种构建负样本的方法

2024-01-10 20:10

本文主要是介绍【论文极速看】MOBIUS 一种构建负样本的方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

∇ 联系方式:

e-mail: FesianXu@gmail.com

github: https://github.com/FesianXu

知乎专栏: 计算机视觉/计算机图形理论与应用

微信公众号:


在搜索,计算广告和推荐系统中,通常有着海量的用户数据,这类型的数据各种类型混杂,比如用户点击数据,用户浏览时长,还有各种用户行为信息等,如何根据这些数据构造出合适的数据集给模型训练,是一件核心问题。百度在论文[1]中提出了一种称之为MOBIUS的负样本构建思路。通常来说,搜索广告推荐(统称为推广搜系统)都会由『召回』『排序』两大步骤组成,比如论文中提到的百度『凤巢』广告系统,其可以看成是一个『倒三角形』的漏斗形结构,由上到下分别是『召回/匹配(matching)』,『粗排,精排』,『上层排序』等。

在漏斗的顶端是在海量(亿级别)的数据中召回足够相关的项目(item),这个时候通常只考虑用『相关性(relevance)』作为标准进行匹配,相关性指的是用户和项目的相关程度,对于信息检索系统来说就是用户Query和网页Doc的相关程度,对于广告系统就是用户Query和广告Ad的相关程度。在召回足够的项目之后,再根据更多的特征进行粗排序和精排序等。最后,考虑到业务需求,比如竞价,点击模型等,需要结合这些因素和相关性进行上层排序,得到最后的展现给用户的结果。在论文中,MOBIUS以CPM(Cost Per Mile,千人展现花费)作为业务的一个上层指标进行讨论, C P M = C T R × B i d CPM = CTR \times Bid CPM=CTR×Bid,也就是说CPM是由预估点击率和竞价决定的。

论文中提到,在实际场景中,很多时候高频物体会有着CTR偏高的倾向,即便用户和该项目没有太高的相关性。这个时候就会出现这种情况,用户搜索一个Query,投放出来的广告相关性不高,但是因为该物体被很多人点击,然后导致CTR偏高。这种情况即是『低相关性,高CTR』,如下图所示

百度凤巢提出的方法是构建负样本,也就是将这种『低相关性,高CTR』的负样本在数据构建阶段就产生出来,然后通过这种数据去学习得到的模型,可以区分低相关性的同时,还有对CTR感知的能力。可以认为之前在召回阶段,模型只考虑了相关性,如式子(1)所示。
O M a t c h i n g = max ⁡ 1 n ∑ i = 1 n R e l e v a n c e ( q u e r y i , i t e m i ) (1) \mathcal{O}_{Matching} = \max{\dfrac{1}{n} \sum_{i=1}^n \mathrm{Relevance}(query_i, item_i)} \tag{1} OMatching=maxn1i=1nRelevance(queryi,itemi)(1)
而在百度凤巢提出的系统中,希望是如式子(2)所示
O M o b i u s = max ⁡ ∑ i = 1 n C T R ( u s e r i , q u e r y i , i t e m i ) × b i d i s . t . 1 n ∑ i = 1 n R e l e v a n c e ( q u e r y i , i t e m i ) ≥ t h r e s h o l d \begin{aligned} \mathcal{O}_{Mobius} &= \max{\sum_{i=1}^n \mathrm{CTR}(user_i, query_i, item_i) \times bid_i} \\ & s.t. \dfrac{1}{n} \sum_{i=1}^n \mathrm{Relevance}(query_i, item_i) \geq threshold \end{aligned} OMobius=maxi=1nCTR(useri,queryi,itemi)×bidis.t.n1i=1nRelevance(queryi,itemi)threshold

至于构建的方法也很朴素,在点击日志里,找出诸多的用户-项目的点击对,然后进行直积构建出『生成数据对』,如 Q u e r y ⊗ I t e m Query \otimes Item QueryItem,比如Query有[A,B,C,D],而Item有[a,b,c],那么生成的数据对就有 4 × 3 = 12 4 \times 3 = 12 4×3=12个,为<A,a>,<A,b>...<D,c>。我们用已经训练好的相关性模型对每一个生成数据对进行相关性预测,同时设定一个阈值,将小于阈值的数据对取出,送给点击模型预测CTR,同时通过数据采样方法进行采样(此时的目的是挑选合适CTR等上层目标的样本),最后回归送到数据集中合并。整个流程下来,我们的『低相关性,高CTR(或其他上层指标)』的负样本就构建好了。构建好后,继续迭代更新点击模型的模型参数(如下图的粉色箭头所示),整个流程见下图。

总的来说,MOBIUS是百度凤巢实际使用的系统,用于负样本的构建与生成,并且希望将上层排序信号引入到相关性中。

Reference

[1]. Fan, M., Guo, J., Zhu, S., Miao, S., Sun, M., & Li, P. (2019, July). MOBIUS: towards the next generation of query-ad matching in baidu’s sponsored search. In Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining (pp. 2509-2517).

这篇关于【论文极速看】MOBIUS 一种构建负样本的方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

504 Gateway Timeout网关超时的根源及完美解决方法

《504GatewayTimeout网关超时的根源及完美解决方法》在日常开发和运维过程中,504GatewayTimeout错误是常见的网络问题之一,尤其是在使用反向代理(如Nginx)或... 目录引言为什么会出现 504 错误?1. 探索 504 Gateway Timeout 错误的根源 1.1 后端

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

python 线程池顺序执行的方法实现

《python线程池顺序执行的方法实现》在Python中,线程池默认是并发执行任务的,但若需要实现任务的顺序执行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录方案一:强制单线程(伪顺序执行)方案二:按提交顺序获取结果方案三:任务间依赖控制方案四:队列顺序消

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定