草庐IT

【论文阅读 NeurIPS 2022】A Large Scale Search Dataset for Unbiased Learning to Rank

长命百岁️ 2023-04-10 原文

文章目录

前言

Abs

由于现有数据集的某些局限性,在现有基准数据集上的良好结果可能无法扩展到实际场景:

  • 它们的语义特征提取已经过时,而像BERT这样最先进的大规模预先训练的语言模型由于缺乏原始文本而不能被利用
  • 展示特征是不完整的,因此在 ULTR 上深度的学习是不可能的,比如使用显示的摘要来分析点击必要性偏差
  • 大多数现有的数据集都采用了合成的用户反馈,而现实世界的用户反馈却大大缺失

我们提出Baidu-ULTR数据集,包含1.2billion随机采样的搜索会话和7008个专家标注的查询(397572个查询-文档对)。Baidu-ULTR是第一个 billion 级别的 ULTR(unbiased learning to rank) 数据集,提供:

  • 原始语义特征和不同大小的预训练语言模型
  • 充分的显示信息,如位置,显示高度,显示摘要,以确保多种显示偏差的全面研究
  • 在搜索结果页面丰富的用户反馈,比如停留时间,允许用户参与度优化,促进在ULTR上多任务学习的探索

Intro

直接使用点击数据优化模型是不完美的,因为偏差的存在,比如:位置 bias,trust bias,click necessary bias。尽管目前的 ULTR 数据集可以在某种程度上满足数据消耗的需求,仍然存在一些限制:

  • 提供的语义特征(比如:BM25,TF-IDF,LMABS)不能享受现代表示学习方法的优点。应用最近的大规模预训练和端到端微调范式需要接触到查询和文档的原始文本。
  • 显示信息的种类是有限的,与其他显示信息(除了 position-related bias)相关的偏差被忽略。比如,如果显示的文档摘要完全满足用户需求,用户就没必要去点击文档。不同媒体类型的文档对用户的吸引程度不同
  • 大多数现存的数据集缺少真实的用户反馈。

因此,提出Baidu-ULTR数据集,对web search的大规模无偏 learning to rank数据集。它从最大的中文搜索引擎-百度中随机抽取了12亿个搜索会话,和7008个专家注释查询(397,572个查询文档对)进行验证和测试。

2.Preliminary

2.1.Ubiased Learning to Rank

我们的目的是:对一个指定 query,得到一个相关性降序排列的文档 list。查询和文档之间的相关等级 r d r_d rd(通常有0–4级, { b a d , f a i r , g o o d , e x c e l l e n t , p e r f e c t } \{bad, fair, good, excellent,perfect\} {bad,fair,good,excellent,perfect},)如果是人工标记的,我们通常认为是无偏的,但是这样比较费劲。

一个替代方案就是将用户的隐式反馈作为相似度标签。利用点击标签 c d c_d cd 替代相似标签 r d r_d rd

但是,这个loss function是有偏的,因为最终排序结果会影响用户的点击,排名高的文档可能会有更高的点击次数。无偏 learning to rank被提出,这样在有偏数据上的训练就能收敛到用无偏数据上训练的模型

2.2.Existion ULTR Datasets

现有的 ULTR 数据集可以分成两类:使用合成/真实用户反馈:

合成数据:Yahoo! LETOR , Microsoft LETOR and Istella LETOR

真实数据:Tiangong-ULTR

3.Dataset Description

主要包含两部分:1)大规模 web search 会话,2)专家注释数据集

3.1.Large Scale Web Search Sessions

Queries:从百度上的搜索会话上随机选取,每个都有一个独一无二的标识符。一个频繁出现的查询可能被采样多次,每个都有不同的标识符。这保证了数据集中查询的分布与在线系统相同:常见的查询有更大的权重

Documents:对于候选文档,只记录了展示出来的。因为没展示的提供的信息比较少,用户不会对这些文档提供反馈。日志会话通常对每个 query 只有十个文档(一页就展示了10个文档)。只有 1.1%的会话包含十个以上,因为1.1%的用户翻页了。这导致了训练和测试的不匹配。在训练时,用户只“label”top-10文档,但是在推理阶段,top-10结果需要通过检索和排序产生,系统需要利用很多模型来排序特别多的文档。

Page Presentation Features:用户在搜索结果页面(SERPs)上的行为受SERPs布局的影响很大。我们收集了在SERPs上的以下信息表示:排序位置,显示的url,显示的文档标题,显示的文档摘要,文档的多媒体类型,SERP的高度

为了保护用户隐私,将查询、标题和摘要的原始文本表示为带有私有字典的顺序 token id。进一步防止丢失语义信息,我们提供了一个 unigram集合,使用 desensitization token ids 来记录高频词,这对建模 word-level 语义信息是很有用的。

User Behavior:我们提供了丰富的用户行为集合,包括:查询重写,跳跃,点击,第一次点击,用户停留时间,显示时间,显示次数,滑走次数,siaplayed count of reverse browsing

3.2.Expert Annotation Dataset

Queries:从百度的搜索会话中随机选取的。因为查询是长尾分布的(a),我们进一步提供了查询的频率。我们根据搜索频次,将查询分成10个buckets:0,1,2对应高频,3,4,5,6对应中频,7,8,9对应尾频。

Documents:为了模拟在线长江,候选文档从检索阶段选择。我们选取了检索模型的top-30文档作为排序的候选集合。通过选择间隔为30的文档,我们进一步覆盖检索阶段的前数千个结果,这些文档用于衡量 ranker 在区分对用户体验极具破坏性的文档方面的表现

Expert Annotation:由专业标注者标注,从5个标签 { b a d , f a i r , g o o d , e x c e l l e n t , p e r f e c t } \{bad,fair,good,excellent,perfect\} {bad,fair,good,excellent,perfect} 中选一个,之后转成数字(0对应bad,4对应perfect)。

3.3.Dataset Analysis

像Figure.2,我们有如下观察:

  • 长尾分布出现在许多用户行为中

  • 高频查询的搜索结果比尾部查询的更相关,因为高频查询的每个查询的点击数为1.13远远大于尾部查询的0.43

  • 最关键的用户反馈与页面展示特征和其他用户行为展现出强相关。我们在图2©中说明了不同排名位置的点击率

  • 随着显示时间变长,用户更愿意在屏幕顶部花更多时间,在底部花更少时间

4.Benchmark and Baselines

4.1.Baselines

选择了下列具有代表性的 baselines:Naive,IPW,DLA,REM,PairD。这些方法都只考虑了位置相关的 bias,没使用其他的显示特征。因此,利用新提取的SERPs和显示特征,在Baidu-ULTR数据集上设计新的ULTR算法具有很大的潜力。

4.2.Metrics

使用 Discounted Cumulative Gain(DCG),只有在有绝对相关性判断时,才会报告DCG

  • N N N 个文档排序后的 list
  • G i G_i Gi 是给位置 i i i 的文档标签的权重,越高的相似度等级对应越高的权重

Expected Reciprocal Rank(ERR)计算用户停止的结果位置的倒数的期望:

  • R i R_i Ri 代表第 i i i 个文档与查询的相关概率
  • 1 i ∏ j = 1 i − 1 ( 1 − R j ) \frac{1}{i} \prod_{j=1}^{i-1}\left(1-R_j\right) i1j=1i1(1Rj)是第 i i i 个文档之前的有序文档的不相关概率

4.3.Performance Comparison

  • 没有一个 ULTR 算法有令人满意的结果,因为他们都只考虑了位置相关的偏差
  • DLA算法表现得最好,显示了其在真实数据集上的鲁棒性
  • naive算法比得上 IPW,甚至超过了REM和PairD,这说明,现实世界的用户反馈比利用特定用户行为假设(位置依赖的点击模型)生成的合成反馈更复杂

一个直观的解释是,用户日志是从一个运行良好的搜索引擎收集的,点击可能没有假设中提到的bias。直接减轻 bias 可能导致过度减轻和不满意的结果。

4.5.Performance Comparison on Tail Query

为了研究搜索频率的影响,我们进一步在三个不同等级搜索频率上比较了 ULTR 算法性能,包括high,middle,tail。

  • 从高频查询到尾部查询,所有算法的性能逐渐下降,这表明学习对尾部查询进行排序的难度较大
  • naive算法展示了有竞争力的性能,揭示了基准测试方法在处理尾部查询中的数据偏差时的脆弱性
  • DLA算法在高频查询方面有了显著的改进,表明ULTR算法对高频排序问题是有利的

5.Discussion

5.1.Data Challenge

Biased in Real-World User Feedback:因为用户日志是从良好运行的搜索引擎中收集的,点击可能不会有在生成合成数据集时的那种简单又强烈的bias

Long-tail Phenomenon:(1)大多数检索文档与用户查询无关。超过50%的文档被注释为与用户查询无关,而只有1.8%的文档被注释为完美的。(2)用户查询还显示了长尾分布。前10%的高频查询占据了搜索日志的60%以上。ULTR算法在高频查询上的性能远高于尾部查询

Mismatch between Training and Test:由于在线系统的存储限制,我们只记录排名系统中显示的页面,通常是 top-10 的结果。然而,在评估集中,我们记录前30个文档,并通过选择间隔为30的文档,进一步覆盖检索阶段的前上千个结果。这一挑战在实际场景中广泛存在,任意数量的文档都可以检索到我们的排序程序中。用于训练和测试的文档数量很少能完全一致。数据不匹配是排序算法面临的分布失衡挑战

6.Conclusion

Baidu-ULTR包含充足的展示信息和丰富类型的用户反馈。在脱敏之后,也可以提供原始文本特征,这确保能够使用更先进的语言模型。

有关【论文阅读 NeurIPS 2022】A Large Scale Search Dataset for Unbiased Learning to Rank的更多相关文章

  1. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  2. UE4 源码阅读:从引擎启动到Receive Begin Play - 2

    一、引擎主循环UE版本:4.27一、引擎主循环的位置:Launch.cpp:GuardedMain函数二、、GuardedMain函数执行逻辑:1、EnginePreInit:加载大多数模块int32ErrorLevel=EnginePreInit(CmdLine);PreInit模块加载顺序:模块加载过程:(1)注册模块中定义的UObject,同时为每个类构造一个类默认对象(CDO,记录类的默认状态,作为模板用于子类实例创建)(2)调用模块的StartUpModule方法2、FEngineLoop::Init()1、检查Engine的配置文件找出使用了哪一个GameEngine类(UGame

  3. ruby-on-rails - 在 irb 中阅读文档 - 2

    我怀念ipython的一件事是它有一个?为特定功能挖掘文档的运算符。我知道ruby​​有一个类似的命令行工具,但是我在irb中调用它非常不方便。ruby/irb有类似的东西吗? 最佳答案 Pry是IPython的Ruby版本,它支持?命令来查找有关方法的文档,但语法略有不同:pry(main)>?File.dirnameFrom:file.cinRubyCore(CMethod):Numberoflines:6visibility:publicsignature:dirname()Returnsallcomponentsofthef

  4. 映宇宙2022年营收63亿元:同比下降三成,毛利率提升4.3个百分点 - 2

    3月26日,映宇宙(HK:03700,即“映客”)发布截至2022年12月31日的2022年度业绩财务报告。财报显示,映宇宙2022年的总营收为63.19亿元,较2021年同期的91.76亿元下降31.1%。2022年,映宇宙的经营亏损为4698.7万元,2021年同期则为净利润4.57亿元;期内亏损(净亏损)为1.68亿元,2021年同期的净利润为4.33亿元;非国际财务报告准则经调整净利润为3.88亿元,2021年同期为4.82亿元,同比下降19.6%。 映宇宙在财报中表示,收入减少主要是由于行业竞争加剧,该集团对旗下产品采取更为谨慎的运营策略以应对市场变化。不过,映宇宙的毛利率则有所提升

  5. ruby - 如何将 Vim 中的 "expand"文本转换成一种易于阅读的方式? - 2

    我经常使用嵌套数据结构,很多时候我必须从控制台手动分析它们。问题是它们全部打印在一行中。是否有一种简单的方法可以根据{,[,],}和逗号重新构造数据结构的显示,使其看起来像Ruby的pretty_print输出? 最佳答案 :%s/\([{,]\)/\1\r/gggVG=:setft=ruby呜呜呜 关于ruby-如何将Vim中的"expand"文本转换成一种易于阅读的方式?,我们在StackOverflow上找到一个类似的问题: https://stacko

  6. 基于SpringBoot的线上日志阅读器 - 2

    软件特点部署后能通过浏览器查看线上日志。支持Linux、Windows服务器。采用随机读取的方式,支持大文件的读取。支持实时打印新增的日志(类终端)。支持日志搜索。使用手册基本页面配置路径配置日志所在的目录,配置后按回车键生效,下拉框选择日志名称。选择日志后点击生效,即可加载日志。windows路径E:\java\project\log-view\logslinux路径/usr/local/XX历史模式历史模式下,不会读取新增的日志。针对历史文件可以分页读取,配置分页大小、跳转。历史模式下,支持根据关键词搜索。目前搜索引擎使用的是jdk自带类库,搜索速度相对较低,优点是比较简单。2G日志全文搜

  7. IDEA 2022 创建 Spring Boot 项目详解 - 2

    如何用IDEA2022创建并初始化一个SpringBoot项目?目录如何用IDEA2022创建并初始化一个SpringBoot项目?0. 环境说明1.  创建SpringBoot项目 2.编写初始化代码0. 环境说明IDEA2022.3.1JDK1.8SpringBoot1.  创建SpringBoot项目        打开IDEA,选择NewProject创建项目。        填写项目名称、项目构建方式、jdk版本,按需要修改项目文件路径等信息。        选择springboot版本以及需要的包,此处只选择了springweb。        此处需特别注意,若你使用的是jdk1

  8. ruby - 在使用 ruby​​ 中的 "mail"gem 阅读电子邮件时需要帮助 - 2

    我正在使用Watir进行自动化,它会创建一封我需要检查的电子邮件。有人指出电子邮件gem是执行此操作的最简单方法。我添加了以下代码,并且能够从我的收件箱中收到第一封电子邮件。require'mail'require'openssl'Mail.defaultsdoretriever_method:pop3,:address=>"email.someemail.com",:port=>995,:user_name=>'domain/username',:password=>'pwd',:enable_ssl=>trueendputsMail.first我是这个论坛的新手,有以下问题:如何获

  9. 论文解读OTA: Optimal Transport Assignment for Object Detection - 2

    CSDN优秀解读:https://blog.csdn.net/jiaoyangwm/article/details/1266387752021https://arxiv.org/pdf/2103.14259.pdf关键解读在目标检测中标签分配的最新进展主要寻求为每个GT对象独立定义正/负训练样本。在本文中,我们创新性地从全局的角度重新审视标签分配,并提出将分配程序制定为一个最优传输(OT)问题——优化理论中一个被充分研究的课题。具体来说,我们将每个需求方(锚框)和供应商(GT标签)的单位传输成本定义为他们的分类和回归损失加权之和。在公式化后,找到最好的分配方案即为最小传播成本解决最优传输方案,

  10. ruby - 阅读用户输入时如何避免回显换行符? - 2

    我正在用Ruby编写类似curses的程序,我正在使用stty和ansi转义字符来实现我想要的。当我想获得用户输入时,我的问题就出现了。像许多基于控制台的程序一样,我想从终端底部获取用户输入。因此,我将光标放在屏幕底部并调用Readline.readline(或任何获取用户输入的方法)。像往常一样,它会读取所有内容,直到我按下回车键,并打印一个换行符。由于光标位于终端的最后一行,它会滚动一行,这会弄乱屏幕。我怎样才能避免这种情况?我试图使用stty来停止回显换行符,但我没有成功。也许可以使用stty来阻止终端滚动?当然,我可以编写自己的方法来通过一次读取一个字符(并捕获“返回”)来捕获

随机推荐