简介

传统的广告最终的呈现需要经过召回与排序两个阶段,百度的搜索架构则采用三层漏斗状,如图1所示。最上面的一层用于筛选出和用户查询最相关的一部分广告,将整个候选广告集从亿级降到千级;下面两层是排序阶段,需要结合具体的业务,对召回的广告进行最终的排序、展示。三层结构相较于两层结构更多的是从计算资源与业务目标上的考量。

图1 传统两阶段排序模式

然而这种“召回——排序”模式存在的主要问题是:召回阶段的优化目标和排序阶段的优化目标是不一样的,这就可能导致召回的样本不具备太多商业价值。针对这一问题,百度团队提出在召回阶段兼顾排序阶段的目标(如CTR、ROI),从而将两阶段模式融合成一个阶段。

图2 百度Mobius一阶段召回模式(在召回层考虑排序层的目标)

总体而言,该论文的创新之处有两点:

  • 在召回层保证相关性的同时引入了CPM等业务指标作为召回的依据;
  • 将以往的CTR预估模型融合到召回层中,提出一种全新的多目标商业召回系统架构。

问题建模

传统两阶段广告排序模型的召回层注重召回结果的相关性,用公式表达为:

\[O_{matching}=max\frac{1}{n}\sum_{i=1}^{n}Relevance(query_{i},ad_{i})
\]

召回阶段的优化目标和排序阶段的优化目标不一样,这可能导致召回的样本不具备太多商业价值。因此百度的解决方案是将两阶段模式融合成一个阶段,在召回阶段同时兼顾排序阶段的优化目标,问题建模为:

\[O_{mobius-v1}=max\sum_{i=1}^{n}CTR(user_{i},query_{i},ad_{i})\times Bid_{i},
\]
\[s.t.\frac{1}{n}\sum_{i=1}^{n}Relevance(query_{i},ad_{i})\geq threshold.
\]

如何在数以亿计的样本中兼顾召回的相关性和排序阶段的CTR、CPM等目标?一个直观的方案是在召回阶段引入排序阶段的模型,但是如果不加改动地直接使用排序模型会导致一些问题。我们知道,排序阶段的样本是召回阶段筛选出的与用户查询较为相关的一部分样本,然后经过排序后一部分样本会获得较高的CTR值,这是没问题的。然而直接在海量数据上进行排序,会导致与用户查询不相关的样本仍有很高的CTR,但这部分样本用户并不关心。

图3 直接将排序模型迁移到召回层会使本来不相关的query-ad pair有较高的CTR

为了解决这一问题,需要在排序之前让排序模型能够区分相关性低的样本。

模型架构

召回阶段需要计算样本与给定查询的相关性,在进行排序之前,先用召回模型计算query和id的相关性,把相关性较低的<query,ad>对筛选出来,该模块称为“Relevance Judger”。模型主要分为两个部分,数据增强模块和CTR建模模块,整体架构如下图所示。

图4 百度Mobius模型架构

输入是一个batch的<query,ad>对,在进行后续处理之前,需要拆分成两个集合——query集和ad集;

Data Augmenter模块对上一步拆分的query集和ad集做笛卡尔积,假设query集有m个元素,ad集有n个元素,则该模块会输出m*n个元素,包含很多虚拟的<query, ad>对;

接着通过Relevance Judger把相关性低于指定阈值的<query, ad>对筛选出来,然后送入到点击率预估网络中计算其CTR;

Data Sampler模块根据CTR值采样出一部分CTR值较高的样本,称为bad case。将该部分数据和一开始输入的<query, ad>对混合,最后送入到CTR预估网络中。与一般CTR预估模型的二分类(点击/不点击)输出不同的是,该架构的输出还包括bad case情况,是一个三分类问题。

总的来说,该架构训练网络,使其能够将与用户查询相关性低但是CTR高的ad标记为bad case。利用相关性召回模型 ( teacher ) 来“教”会CTR模型 ( student ) 哪些样本是badcase,所以这里首先利用相关性模型对构造的query-ad pair进行相关性打分,并从中筛选出来相关性较低的样本交给CTR模型进行预测,根据预测的PCTR值从中选出低相关性高PCTR的样本作为badcase ( 这类样本在原始CTR样本中是不存在的,是为了让CTR模型学会哪些是badcase而构建出来的,原始的CTR模型是不需要关注相关性的,只需要关注CTR )。

线上召回

离线训练好模型以后,可以通过图4中的User Query DNN和Ad DNN获得用户查询的Embedding和广告的Embedding,给定一个query embedding,需要找到若干和该查询相关的广告,然而在全体样本集里面一个一个查找可能的ad embedding在上线阶段是不可行的。因此百度采用ANN(近似最近邻)技术加速筛选过程。

为了最终排序结果的精确性,通常在排序之前要考虑业务相关权重信息,而ANN方案是先召回在考虑业务权重进行精排,MIPS则是将业务指标改写进了相似度计算的公式中,也就是在检索的过程中就考虑商业指标。

MOBIUS: Towards the Next Generation of Query-Ad Matching in Baidu's Sponsored Search——百度下一代搜索广告系统的更多相关文章

  1. 广告召回 Query-Ad Matching

    小结: 1.最为基础的召回链路就是要保证召回层的相关性,但是相关性高的广告并不一定具有很高的商业价值,所以开始尝试将一些商业化业务指标作为召回的依据 百度凤巢新一代广告召回系统--"莫比乌斯 ...

  2. 【Android 应用开发】GitHub 优秀的 Android 开源项目

    原文地址为http://www.trinea.cn/android/android-open-source-projects-view/,作者Trinea 主要介绍那些不错个性化的View,包括Lis ...

  3. ElasticSearch 简单的 搜索 聚合 分析

    一. 搜索1.DSL搜索 全部数据没有任何条件 GET /shop/goods/_search { "query": { "match_all": {} } } ...

  4. 【转】淘宝技术牛p博客整理

    转自:http://blog.csdn.NET/zdp072/article/details/19574793 淘宝技术委员会是由淘宝技术部高级技术人员组成的一个组织,共分为Java分会.C/C++分 ...

  5. elasticsearch从入门到出门-03-多种搜索

    1.query string search 2.query DSL 3.query filter 4.full-text search 5.phrase search 6.highlight sear ...

  6. Authorization in Cloud Applications using AD Groups

    If you're a developer of a SaaS application that allows business users to create and share content – ...

  7. 计算广告(5)----query意图识别

    目录: 一.简介: 1.用户意图识别概念 2.用户意图识别难点 3.用户意图识别分类 4.意图识别方法: (1)基于规则 (2)基于穷举 (3)基于分类模型 二.意图识别具体做法: 1.数据集 2.数 ...

  8. AD域渗透总结

    域渗透总结 学习并做了一段时间域网络渗透,给我直观的感受就是思路问题和耐心,这个不像技术研究,需要对一个点进行研究,而是遇到问题后要从多个方面思考,寻找"捷径"思路,只要思路正确, ...

  9. 搜索引擎Query Rewrite

    中心词抽取项目总结 B2B国际站Query重写.ppt 达观数据搜索引擎的Query自动纠错技术和架构详解 Natural Language Processing Simrank++ Query re ...

  10. Query DSL for elasticsearch Query

    Query DSL Query DSL (资料来自: http://www.elasticsearch.cn/guide/reference/query-dsl/) http://elasticsea ...

随机推荐

  1. PR-不同分辨率视频如何合并

    1.文件-新建-序列,可以使用预设,也可以自行设置基础分辨率. 2.将分辨率不同的视频,在"效果控件"-"缩放"当中,设置合适的缩放比例即可.

  2. WDA学习(22):WDA PLG,Application跳转传参

    1.15 WDA PLG,Application跳转传参 本实例Outbound Plugs页面跳转传参,URL跳转Application传参. 1.创建Component:Z_TEST_WDA_L6 ...

  3. Java使用HSSFWorkbook生成Excel

    HSSF 是Horrible SpreadSheet Format的缩写,也即"讨厌的电子表格格式". 也许HSSF的名字有点滑稽,就本质而言它是一个非常严肃.正规的API.通过H ...

  4. vim 基础

    光标移动(命令模式的上下左右):k,j,h,l 保存/退出 仅保存::w 退出::q(如果有修改要先保存) 保存并退出::wq(x效果一致) 强制退出::q! 模式 命令模式:esc(当前需要处于插入 ...

  5. python菜鸟学习: 1.用户登录输入输出

    # -*-coding: utf-8 -*-name = 'liyuzhoupan'password = '123'def login_test(): count = 0 while count &l ...

  6. win系统常用快捷键查询手册

    win+ctrl+左/右方向键 虚拟桌面切换

  7. 5.26 学习SSH

    1.ssh客户端是一种使用Secure Shell协议 连接到运行了ssh服务端的远程服务器上 ssh是比较可靠的,专为远程登录会话和其他网络服务提供安全性的协议 2.

  8. ES7-ES12总结篇

    脑图模式       插入 ES7-ES12  ES7  Array.prototype.includes()   includes() 方法用来判断一个数组是否包含一个指定的值,如果包含则 ...

  9. jdkman(jdk版本管理工具)安装和使用(mac)

    1.安装jdkman 1.1.下载命令 curl -s "https://get.sdkman.io" | bash 执行后,sdkman安装到目录$HOME/.sdkman/,比 ...

  10. Bugku Log4j2 漏洞题目 解题参考

    Log4j2 漏洞题目 题目地址 https://ctf.bugku.com/challenges/detail/id/340.html?page=1 二.攻击环境准备 需要一台linux云服务器,把 ...