发布人:google research 软件工程师 michael bendersky 和 xuanhui wang
2018 年 12 月,我们推出了 tf-ranking,这是一个基于 tensorflow 的开源代码库,用于开发可扩容的 learning-to-rank (ltr) 神经模型。当用户期望收到有序的项目列表来辅助查询时,该模型可以发挥出色作用。ltr 模型与一次只对一个项目进行分类的标准分类模型不同,它会将整个项目列表接收输入,并学习排序,充分提升整个列表的效用。
tf-ranking
https://github.com/tensorflow/ranking
虽然 ltr 模型最常用于搜索和推荐系统,但自其发布以来,我们已经看到 tf-ranking 在除搜索以外的各领域,均有应用,其中包括电子商务、sat 求解器和智能城市规划等。
learning-to-rank (ltr) 的目标是学习一个函数 f(),该函数会以项目列表(文件、产品、电影等)作为输入,并以最佳排序(相关性降序)输出项目列表。上图中,深浅不一的绿色表示项目的相关性水平,标有 “x” 的红色项目是不相关的
电子商务
https://dl.acm.org/doi/abs/10.1145/3308560.3316603
sat 求解器
https://arxiv.org/abs/1904.12084
智能城市规划
https://dl.acm.org/doi/abs/10.1145/3450267.3450538
2021 年 5 月,我们发布了 tf-ranking 的一个重要版本,实现了全面支持使用 keras(tensorflow 2 的一个高阶 api),以原生方式构建 ltr 模型。我们为原生 keras 排序模型加入了全新的工作流设计,其中包括灵活的 modelbuilder、用于设置训练数据的 datasetbuilder, 以及利用给定数据集训练模型的 pipeline。有了这些组件,构建自定义 ltr 模型会比以往更轻松,且有利于快速探索、生产和研究的新的模型结构。如果您选择的工具是 raggedtensors,tf-ranking 现在也可以和这些工具协作。
重要版本
https://github.com/tensorflow/ranking/releases/tag/v0.4.0
tensorflow 2
http://tensorflow.google.cn/
也
https://github.com/tensorflow/ranking/blob/master/tensorflow_ranking/examples/keras/antique_ragged.py
此外,我们在最新版本中结合了 orbit 训练库,其中包含了许多进展成果,而这些成果正是近两年半内,神经 ltr 研究结晶。下面我们分享一下 tf-ranking 最新版本中的一些重要改进。
构建和训练原生 keras 排序模型的工作流。蓝色模块由 tf-ranking 提供,绿色模块支持自定义
最新版本
https://github.com/tensorflow/ranking/releases/tag/v0.4.2
orbit
https://github.com/tensorflow/models/tree/master/orbit
利用 tfr-bert 的
learning-to-rank
最近,bert 之类的预训练语言模型在各种语言理解任务中性能表现突出。为利用这些模型,tf-ranking 实现了一个新颖的 tfr-bert 架构——通过结合 bert 与 ltr 的优势,来优化列表输入的排序过程。举个例子,假设有一个查询和一个由 n 个文件组成的列表,而人们想要在对此查询响应中的文件进行排序。ltr 模型并不会为每个 《query, document》 学习独立的 bert 表示,而是会应用一个排序损失来共同学习 bert 表示,充分提升整个排序列表相对于参照标准标签的效用。
这个过程如下图所示。首先,我们把查询响应中需要排序的 n 个文件组成的列表扁平化为一个 《query, document》 元组列表。把这些元组反馈至预训练的语言模型(例如 bert)。然后用 tf-ranking 中的专用排序损失,对整个文件列表的池化 bert 输出进行联合微调。
排序损失
https://github.com/tensorflow/ranking/blob/master/tensorflow_ranking/python/losses.py
结果表明,这种 tfr-bert 架构在预训练的语言模型性能方面有了明显改善,因此,可以在执行多个热门排序任务时体现出十分优越的性能。若将多个预训练的语言模型组合在一起,则效果更为突出。我们的用户现在可以通过这个简单的例子完成 tfr-bert 入门。
tfr-bert 架构的说明,在这个架构中,通过使用单个 《query, document》 对的 bert 表示,在包含 n 个文件的列表上构建了一个联合 ltr 模型
多个热门
https://arxiv.org/abs/2010.00200
简单的例子
https://github.com/tensorflow/ranking/blob/master/tensorflow_ranking/examples/keras/tfrbert_antique_train.py
具有可解释性的
learning-to-rank
透明度和可解释性是在排序系统中部署 ltr 模型的重要因素,在贷款资格评估、广告定位或指导医疗决定等过程中,用户可以利用这些系统来确定结果。在这种情况下,每个单独的特征对最终排序的贡献应具有可检查性和可理解性,以此确保结果的透明度、问责制和公正性。
实现这一目标的可用方法之一是使用广义加性模型 (generalized additive model,gam),这是一种具有内在可解释性的机器学习模型,由唯一特征的平滑函数线性组合而成。然而,我们虽然已经在回归 (regression analysis) 和分类任务方面对 gam 进行了广泛的研究,但将其应用于排序设置的方法却并不明确。举个例子,虽然可以直接利用 gam 对列表中的每个单独项目进行建模,然而对项目的相互作用和这些项目的排序环境进行建模,仍是一个更具挑战性的研究问题。为此,我们开发了神经排序 gam,这是可为排序问题的广义加性模型所用的扩展程序。
神经排序 gam
https://arxiv.org/abs/2005.02553
与标准的 gam 不同,神经排序 gam 可以同时考虑到排序项目和背景特征(例如查询或用户资料),从而得出一个可解释的紧凑模型。这同时确保了各项目级别特征与背景特征的贡献具有可解释性。例如,在下图中,使用神经排序 gam 可以看到在特定用户设备的背景下,距离、价格和相关性是如何对酒店最终排序作出贡献的。目前,神经排序 gam 现已作为 tf-ranking 的一部分发布。
为本地搜索应用神经排序 gam 的示例。对于每个输入特征(例如价格、距离),子模型会产生可以检查的子分数,支持公开查看。背景特征(例如用户设备类型)可以用于推算子模型的重要性权重
发布
https://github.com/tensorflow/ranking/issues/202
神经排序还是梯度提升?
神经模型虽然在多个领域展现出了十分优越的性能,但 lambdamart 之类的专门梯度提升决策树 (gradient boosted decision trees, gbdt) 仍然是利用各种开放 ltr 数据集时的性能标杆。gbdt 在开放数据集中的成功可归结于几个原因。首先,由于其规模相对较小,神经模型在这些数据集上容易过度拟合 (overfitting)。其次,由于 gbdt 使用决策树对其输入特征空间进行划分,它们自然更能适应待排序数据的数值尺度变化,这些数据通常包含具有 zipfian (zipf‘s law) 或其他偏斜分布的特征。然而,gbdt 在更为现实的排序场景中确实有其局限性,这些场景往往同时包含文本和数字特征。举个例子,gbdt 不能直接应用于像原始文档文本这种,较大的离散特征空间。一般来说,它们的可扩容性也要弱于神经排序模型。
因此,自 tf-ranking 发布以来,我们团队大大加深了对于神经模型在数字特征排序中优势的理解。。最能充分体现出这种理解的是,iclr 2021 的一篇论文中所描述的数据增强自觉潜在交叉 (dasalc) 模型,该模型首次在开放 ltr 数据集上建立了与强大的、与 lambdamart 基线相同的神经排序模型,并且在某些方面取得了统计学上的重大改进。这一成就是通过各种技术的组合实现的,其中包括数据增强、神经特征转换、用于建模文档交互的自注意机制、列表式排序损失,以及类似 gbdt 中用于提升的模型组合。现在 dasalc 模型的架构完全由 tf-ranking 库实现。
iclr 2021
https://research.google/pubs/pub50030/
结论
总而言之,我们相信基于 keras 的 tf-ranking 新版本能够让开展神经 ltr 研究和部署生产级排序系统变得更加轻松。我们鼓励大家试用最新版本,并按照这个引导例子进行实践体验。虽然这个新版本让我们感到非常激动,但我们的研发之旅远未结束,所以我们将继续深化对 learning-to-rank 问题的理解,并与用户分享这些进展。
最新版本
https://github.com/tensorflow/ranking/releases/tag/v0.4.0
这个引导例子
https://github.com/tensorflow/ranking/blob/master/tensorflow_ranking/examples/keras/keras_dnn_tfrecord.py
致谢
本项目的实现离不开 tf-ranking 团队的现任和前任成员:honglei zhuang、le yan、rama pasumarthi、rolf jagerman、zhen qin、shuguang han、sebastian bruch、nathan cordeiro、marc najork 和 patrick mcgregor。另外要特别感谢 tensorflow 团队的协作者:zhenyu tan、goldie gadde、rick chao、yuefeng zhou、hongkun yu 和 jing li。
三合一电驱系统可靠性试验研究与应用
区块链技术的基石密码学探讨
C++异步日志实践
dfrobot42步进电机简介
疫情下的AI做了什么
TF-Ranking实现新颖的TFR-BERT架构
如何构建开源mp3播放器套件
华为与清华大学联队夺取SolverChallenge竞赛最高奖项
联想发布2020年10大技术预测 折叠屏设备将为工作和生活带去更多可能
印度废钞令冲击手机产业 富士康员工被迫休假
电动汽车快充接口三大标准盘点
荣耀业务独立实际上是为鸿蒙系统布局?
科普|光电开关在使用中常见问题(一)——不良环境
PI新推出的LinkSwitch-3 IC可满足美国能源部EPS能效标准
关于FRAM技术的设备配置介绍
移动照明的A面与B面
大联大诠鼎集团力推TOSHIBA全面MID移动上网之完整解决方案
LSI推出采用ARM领先技术的全新通信处理器Axxia 5500
在没有散热器的情况下,SA310 3相SiC模块能做什么?
三菱PLC采用RS485控制变频器实例