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

相关文章

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

一文详解Git中分支本地和远程删除的方法

《一文详解Git中分支本地和远程删除的方法》在使用Git进行版本控制的过程中,我们会创建多个分支来进行不同功能的开发,这就容易涉及到如何正确地删除本地分支和远程分支,下面我们就来看看相关的实现方法吧... 目录技术背景实现步骤删除本地分支删除远程www.chinasem.cn分支同步删除信息到其他机器示例步骤

在Golang中实现定时任务的几种高效方法

《在Golang中实现定时任务的几种高效方法》本文将详细介绍在Golang中实现定时任务的几种高效方法,包括time包中的Ticker和Timer、第三方库cron的使用,以及基于channel和go... 目录背景介绍目的和范围预期读者文档结构概述术语表核心概念与联系故事引入核心概念解释核心概念之间的关系

在Linux终端中统计非二进制文件行数的实现方法

《在Linux终端中统计非二进制文件行数的实现方法》在Linux系统中,有时需要统计非二进制文件(如CSV、TXT文件)的行数,而不希望手动打开文件进行查看,例如,在处理大型日志文件、数据文件时,了解... 目录在linux终端中统计非二进制文件的行数技术背景实现步骤1. 使用wc命令2. 使用grep命令

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

XML重复查询一条Sql语句的解决方法

《XML重复查询一条Sql语句的解决方法》文章分析了XML重复查询与日志失效问题,指出因DTO缺少@Data注解导致日志无法格式化、空指针风险及参数穿透,进而引发性能灾难,解决方案为在Controll... 目录一、核心问题:从SQL重复执行到日志失效二、根因剖析:DTO断裂引发的级联故障三、解决方案:修复

C++ 检测文件大小和文件传输的方法示例详解

《C++检测文件大小和文件传输的方法示例详解》文章介绍了在C/C++中获取文件大小的三种方法,推荐使用stat()函数,并详细说明了如何设计一次性发送压缩包的结构体及传输流程,包含CRC校验和自动解... 目录检测文件的大小✅ 方法一:使用 stat() 函数(推荐)✅ 用法示例:✅ 方法二:使用 fsee

Java继承映射的三种使用方法示例

《Java继承映射的三种使用方法示例》继承在Java中扮演着重要的角色,它允许我们创建一个类(子类),该类继承另一个类(父类)的所有属性和方法,:本文主要介绍Java继承映射的三种使用方法示例,需... 目录前言一、单表继承(Single Table Inheritance)1-1、原理1-2、使用方法1-