【论文极速看】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

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

Linux云服务器手动配置DNS的方法步骤

《Linux云服务器手动配置DNS的方法步骤》在Linux云服务器上手动配置DNS(域名系统)是确保服务器能够正常解析域名的重要步骤,以下是详细的配置方法,包括系统文件的修改和常见问题的解决方案,需要... 目录1. 为什么需要手动配置 DNS?2. 手动配置 DNS 的方法方法 1:修改 /etc/res

JavaScript对象转数组的三种方法实现

《JavaScript对象转数组的三种方法实现》本文介绍了在JavaScript中将对象转换为数组的三种实用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录方法1:使用Object.keys()和Array.map()方法2:使用Object.entr

SpringBoot中ResponseEntity的使用方法举例详解

《SpringBoot中ResponseEntity的使用方法举例详解》ResponseEntity是Spring的一个用于表示HTTP响应的全功能对象,它可以包含响应的状态码、头信息及响应体内容,下... 目录一、ResponseEntity概述基本特点:二、ResponseEntity的基本用法1. 创

java中判断json key是否存在的几种方法

《java中判断jsonkey是否存在的几种方法》在使用Java处理JSON数据时,如何判断某一个key是否存在?本文就来介绍三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目http://www.chinasem.cn录第一种方法是使用 jsONObject 的 has 方法

java中ssh2执行多条命令的四种方法

《java中ssh2执行多条命令的四种方法》本文主要介绍了java中ssh2执行多条命令的四种方法,包括分号分隔、管道分隔、EOF块、脚本调用,可确保环境配置生效,提升操作效率,具有一定的参考价值,感... 目录1 使用分号隔开2 使用管道符号隔开3 使用写EOF的方式4 使用脚本的方式大家平时有没有遇到自