每天一个知识点——L2R

面试的时候,虽然做过医疗文献搜索,也应用过L2R的相关模型,但涉及到其中的一些技术细节,都会成为我拿不下offer永远的痛。也尝试过去理解去背下一些知识点,终究没有力透纸背,随着时间又开始变得模糊,下面对相关问题进行一个总结。

一、PointWise、PairWise和ListWise

这个并不是特定的算法,而是排序模型的设计思路,主要体现在损失函数(Loss Function)以及相应的标签标注方式和优化方法的不同。

PointWise

可以训练一个二分类网络:h_{\theta }(q_{i},c_{i,j})\rightarrow y_{i,j},其中0\leq y_{i,j}\leq 1训练的目标是最小化数据集中所有问题和候选句子对的交叉熵

缺陷是虽然预测分数,但损失函数只考虑正负样本,并不要求精确打分,正样本内的先后关系并不在考虑范围。

Pointwise常见算法有SVM等

PairWise

损失函数为合页损失函数:

L=max\{0,m-h_{\theta }(q_{i},c_{i}^{+})+h_{\theta }(q_{i},c_{i}^{-})\}

这里m为边界阈值,即正样本的得分不仅要比负样本的高,而且还要高出一定阈值范围,h_{\theta }(q_{i},c_{i}^{+})-h_{\theta }(q_{i},c_{i}^{-})\geq m

缺陷是对噪音更加敏感,比如一个样本标注错误,会引起多个pair对错误,仅考虑了pair对的相对位置信息,并没有考虑到绝对位置信息。

Pairwise常见算法有Ranking SVM、RankNet、RankBoost等。

ListWise

在训练过程中给定提问q_{i}和它的一系列候选句子 C(c_{i1},c_{i2},...,c_{im})和标签 Y(y_{i1},y_{i2},...,y_{im}) ,归一化的得分向量S通过如下公式计算:

Score_j=h_\theta(q_i,c_{ij})

S=softmax([Score_1,Score_2,...,Score_m])

标签归一化为,

Y=\frac{Y}{\sum_{j=1}^{m}y_{ij}}

训练的目标可以为最小化SY的KL散度。

Listwise常见算法有AdaRank,SoftRank,LambdaMART等

二、RankNet、LambdaRank和LambdaMart

RankNet

RankNet的训练数据是一个个的pair对,比如文章(i,j),然后模型对两个候选进行打分,我们建模的目标是一个概率,即模型认为候选i比候选j更相关的概率:

P_{ij}=\frac{1}{1+e^{-\sigma (s_i-s_j)}}

C=-\bar{P}_{ij}logP_{ij} - (1-\bar{P}_{ij})log(1-P_{ij})

\bar{P}_{ij}=\frac{1}{2}(1+s_{ij}),s_{ij}\in \{-1, 0, 1\}

LambdaRank

首先对RankNet的损失函数进行分解,得到其中的梯度,

\begin{aligned} \frac{\partial C}{\partial \omega _k} &=\frac{\partial C}{\partial s _i}\frac{\partial s _i}{\partial \omega _k} + \frac{\partial C}{\partial s _j}\frac{\partial s _j}{\partial \omega _k} \\ &=\sigma (\frac{1}{2}(1-S_{ij}) - \frac{1}{1+e^{\sigma (s_i-s_j)}})(\frac{\partial s_i}{\partial \omega_k} - \frac{\partial s_j}{\partial \omega_k}) \\ &=\lambda _{ij}(\frac{\partial s_i}{\partial \omega_k} - \frac{\partial s_j}{\partial \omega_k}) \end{aligned}

\lambda _{ij}可以表示梯度的强度,进一步简化,假设对于文档对(i,j),都有文档i在文档j前面,即S_{ij}=1,则

\lambda _{ij}=\frac{-\sigma }{1+e^{\sigma (s_i-s_j)}}

LambdaRank主要创新点在于不直接定义模型的损失函数再求梯度,而是通过分析RankNet排序损失函数的梯度再直接对梯度lambda进行修改。

现在将NDCG,ERR等指标引入lambda中,论文中的做法是交换两个文档i,j的位置,然后计算评估指标的变化情况|\Delta Z|,把|\Delta Z|作为lambda的因子,Z可以是NDCG等评价指标

\lambda _{ij}=\frac{-\sigma }{1+e^{\sigma(s_i-s_j)}}|\Delta Z|

通过梯度lambda也可以反推出LambdaRank的损失函数,如下,

C=log(1+e^{-\sigma (o_i-o_j)})|\Delta Z|

三、LambdaMart的实现原理

MART: Multiple Additive Regression Tree

GBDT: Gradient Boosting Decision Tree

  • 基于多个决策树来预测结果;
  • 决策树之间通过加法模型叠加结果;
  • 每棵决策树都是针对之前决策树的不足进行改进。

在这里插入图片描述

 综上的伪代码可知,lambdaMart的计算经历这样几个步骤

  1.  利用训练数据每个query的pair对情况,计算\lambda

|\Delta Z|=\frac{abs(single\_dcgs[(i,j)] + single\_dcgs[(j,i)] - single\_dcgs[(i,i)] -single\_dcgs[(j,j)])}{IDCG}

single\_dcgs[(i,j)]=\frac{2^{scores[i]} - 1}{log_2(j + 1)}

rho = \frac{1}{1+e^{temp\_scores[i] - temp\_scores[j]}}

\lambda _i = \lambda _i + rho *|\Delta Z|

\lambda _j = \lambda _j - rho *|\Delta Z| 

同时,计算的,还有权重参数\omega,用于牛顿迭代法,但实际代码中感觉没有用到这一块。

w[i] = w[i] + rho *(1-rho) *|\Delta Z|

w[j] = w[j] + rho *(1-rho) *|\Delta Z|

        2. 以每个样本特征为X,以\lambda为拟合目标Y,构建决策树,

tree = DecisionTreeRegressor(max\_depth=50) \\ tree.fit(self.training\_data[:, 2:], \lambda )

        3. 然后用训练的决策树去预测X的分数,将得到分数加入temp\_scores中,

pred = tree.predict(self.training\_data[:, 2:]) \\ predicted\_scores = predicted\_scores + self.lr * pred

        4、然后重复上面3个步骤,训练多棵决策树。

说到决策树的训练:lambdaMART采用最朴素的最小二乘法,也就是最小化平方误差和来分裂节点:即对于某个选定的feature,选定一个值val,所有<=val的样本分到左子节点,>val的分到右子节点。然后分别对左右两个节点计算平方误差和,并加在一起作为这次分裂的代价。遍历所有feature以及所有可能的分裂点val(每个feature按值排序,每个不同的值都是可能的分裂点),在这些分裂中找到代价最小的。

五、评价指标

NDCG

DCG@T=\sum_{i=1}^{T}\frac{2^{l_i}-1}{log(1+i)}

NDCG@T=\frac{DCG@T}{maxDCG@T}

这里计算的时候,会可能会采取两种策略,需要注意下:

        1、预测结果的分数不要,只要文档的顺序,而具体分数用文档真实的分数,也就是分子分母计算的l_i用的是同一套,只不过由于预测文档的先后顺序出现变动,最大分数未必会出现在第一位;

        2、分子用预测分数,分母用真实分数。

另外需要注意的一点是分子分母计算面对可能并非完全一样的样本集。

六、参考文献

  • 排序学习(LTR)经典算法:RankNet、LambdaRank和LambdaMart

  • LambdaMART简介-基于Ranklib源码(Regression Tree训练)
  • LambdaMART简介-基于Ranklib源码(lambda计算)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/74991.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

勘探开发人工智能技术:机器学习(6)

0 提纲 7.1 循环神经网络RNN 7.2 LSTM 7.3 Transformer 7.4 U-Net 1 循环神经网络RNN 把上一时刻的输出作为下一时刻的输入之一. 1.1 全连接神经网络的缺点 现在的任务是要利用如下语料来给apple打标签&#xff1a; 第一句话&#xff1a;I like eating apple!(我喜欢吃苹…

css3-flex布局:基础使用 / Flexbox布局

一、理解flex 二、理解Flex布局&#xff08;又称Flexbox布局&#xff09; Flex布局&#xff08;又称Flexbox布局&#xff09;是一种基于Web的CSS3布局模式&#xff0c;其目的是为了更加灵活和自适应地布置各种各样的网页元素。Flex布局通过将一个父容器分割为一个或多个弹性项…

spring cloud alibaba 应用无法注册到sentinel dashboard

一。技术背景 由于升级jdk17的需要 我们将项目中的 spring cloud spring cloud alibaba 以及springboot进行了升级 各版本如下 spring cloud 2021.0.5 spring cloud alibaba 2021.0.5.0 spring boot 2.6.13 二。问题表现 当启动项目服务后&#xff0c;服务无法注册到 sentin…

开发规范(一):Mysql篇

1. 流程 数据库表结构的修改需要相关人员和Leader一起评审&#xff0c;保证符合涉及规范。 不允许使用root账号&#xff0c;所有开发和测试应当分配指定账号&#xff0c;并授予最小数据库权限 2. 数据库与表规范 表命名规范 常规表表名以 t_开头&#xff0c;t 代表 table 的意思…

安卓逆向 - 某麦网 x-mini-wua x-sgext x-sign x-umt x-utdid

本文仅供学习交流&#xff0c;只提供关键思路不会给出完整代码&#xff0c;严禁用于非法用途&#xff0c;若有侵权请联系我删除&#xff01; 目标app: 5aSn6bqm572ROC41LjQ 目标接口&#xff1a;aHR0cHM6Ly9hY3MubS50YW9iYW8uY29tL2d3L210b3AuZGFtYWkud2lyZWxlc3MuZGlzY292ZX…

vue element 多图片组合预览

定义组件&#xff1a;preview-image <template><div><div class"imgbox"><divclass"preview-img":class"boxClass"v-if"Imageslist 3 ||Imageslist 5 ||Imageslist 7 ||Imageslist 8 ||Imageslist > 9"&…

IK分词器升级,MySQL热更新助一臂之力

ik分词器采用MySQL热更新 ​ 官方所给的IK分词器只支持远程文本文件热更新&#xff0c;不支持采用MySQL热更新&#xff0c;没关系&#xff0c;这难不倒伟大的博主&#xff0c;给哈哈哈。今天就来和大家讲一下如何采用MySQL做热更新IK分词器的词库。 一、建立数据库表 CREATE…

Vue-4.编译器VsCode

准备 Vue-1.零基础学习Vue Vue-2.nodejs的介绍和安装 Vue-3.vue简介 为什么用VsCode VsCode 是Vue官网首推的编译器它是完全免费的 下载安装VsCode 下载地址 安装的时候不停地下一步直到完成即可 安装插件 安装汉化插件 要将 Visual Studio Code&#xff08;VSCode&am…

回归预测 | MATLAB实现基于LSSVM-Adaboost最小二乘支持向量机结合AdaBoost多输入单输出回归预测

回归预测 | MATLAB实现基于LSSVM-Adaboost最小二乘支持向量机结合AdaBoost多输入单输出回归预测 目录 回归预测 | MATLAB实现基于LSSVM-Adaboost最小二乘支持向量机结合AdaBoost多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.Matlab实现L…

elasticsearch-head 插件

1、elastic 插件说明 **Head** 是第三方提供的一款很优秀的插件&#xff0c;集监控、查询、配置一体的web功能系统&#xff0c;可以在系统中进行创建、删除索引 、文档。以及查询、配置索引等功能&#xff0c;深受广大开发者的喜爱 **Kopf** 是另一个第三方提供的一款很优秀…

云原生k8s---资源限制、探针

目录 一&#xff1a;资源限制 1、资源限制原因 2、Pod 和 容器 的资源请求和限制 3、CPU 资源单位 4、内存 资源单位 5、事例 &#xff08;1&#xff09;事例一 &#xff08;2&#xff09;事例二 二&#xff1a;重启策略 1、重启策略模式 2、事例 三&#xff1a;探针…

微信小程序实现左滑删除

一、效果 二、代码 实现思路使用的是官方提供的 movable-area&#xff1a;注意点&#xff0c;需要设置其高度&#xff0c;否则会出现列表内容重叠的现象。由于movable-view需要向右移动&#xff0c;左滑的时候给删除控件展示的空间&#xff0c;故 movable-area 需要左移 left:…

视觉学习(七)---Flask 框架下接口调用及python requests 实现json字符串传输

在项目实施过程中需要与其他系统进行接口联调&#xff0c;将图像检测的结果传递给其他系统接口&#xff0c;进行逻辑调用。这中间的过程可以通过requests库进行实现。 1.安装requests库 pip install requests2.postman 接口测试 我们先通过postman 了解下接口调用&#xff0…

linux系统服务学习(二)linux下yum源配置实战

文章目录 Linux下yum源配置实战一、Linux下软件包的管理1、软件安装方式2、源码安装的配置过程3、详解源码安装的配置过程&#xff08;定制&#xff09;4、详解编译过程5、安装过程6、axel多线程下载软件源码安装7、使用软链接解决command not found8、使用环境变量解决command…

springcloud3 hystrix实现服务降级,熔断,限流以及案例配置

一 hystrix的作用 1.1 降级&#xff0c;熔断&#xff0c;限流 1.服务降级&#xff1a; A方案出现问题&#xff0c;切换到兜底方案B&#xff1b; 2.服务熔断&#xff1a;触发规则&#xff0c;出现断电限闸&#xff0c;服务降级 3.服务限流&#xff1a;限制请求数量。 二 案例…

【机器学习5】数据处理(二)Pandas:表格处理

Pandas:表格处理 &#x1f31f;&#x1f31f;Pandas三种数据类型✨✨Series数据结构✨✨ DataFrame数据结构&#x1f319;&#x1f319;DataFrame数据的选取&#x1f315;&#x1f315;DataFrame的构建&#x1f315;&#x1f315;选取多行&#x1f315;&#x1f315;选取某一列…

【广州华锐视点】VR燃气轮机故障判断模拟演练系统

VR燃气轮机故障判断模拟演练系统由广州华锐视点开发&#xff0c;是一款基于虚拟现实技术的教育工具&#xff0c;旨在为学生提供一个安全、高效、互动的学习环境&#xff0c;帮助他们更好地掌握燃气轮机的故障诊断技能。 这款VR实训软件能够模拟真实的燃气轮机故障诊断场景&…

JVM---理解jvm之对象已死怎么判断?

目录 引用计数算法 什么是引用 可达性分析算法&#xff08;用的最多的&#xff09; 引用计数算法 定义&#xff1a;在对象中添加一个引用计数器&#xff0c;每当有一个地方引用它时&#xff0c;计数器值就加一&#xff1b;当引用失效时&#xff0c;计数器值就减一&#xff1…

利用python实现批量登录网络设备进行日常巡检

利用python实现批量登录网络设备 实现ensp与物理机互通ensp 配置配置网络设备远程登录 用python实现批量登录常见问题 通过阅读本文可以学习自动化运维相关知识&#xff0c;本文章代码可以直接使用&#xff0c;通过批量登录功能后&#xff0c;可以按照自己意愿进行功能更改与完…

CentOS7最小化安装使用KVM虚拟化

说明&#xff1a;本文初衷在于记录一次实战经验&#xff0c;以便后续参考&#xff0c;不具有任何权威作用&#xff0c;如若对你有帮助深感荣幸&#xff01; 一、环境安装 CentOS Linux release 7.9.2009 (Core)【不带GUI】Xshell 6Xmanager 6 # 执行 export DISPLAY客户端机器…