当前位置: 首页 > news >正文

每天一个知识点——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计算)

相关文章:

每天一个知识点——L2R

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

解决flutter showDialog下拉框,复选框等无法及时响应的问题

使用StatefulBuilder _showDialogr() {showDialog(context: context,builder: (BuildContext ctx) {return StatefulBuilder(builder: (BuildContext context, StateSetter setState) {return Scaffold(body: Column(children: <Widget>[Container(height: 400,padding: …...

[C++ 网络协议编程] UDP协议

目录 1. UDP和TCP的区别 2. UDP的工作原理 3. UDP存在数据边界 4. UDP的I/O函数 4.1 sendto函数 4.2 recvfrom函数 4. 已连接(connected)UDP套接字和未连接(unconnected)UDP套接字 5. UDP的通信流程 5.1 服务器端通信流程 5.2 客户端通信流程 1. UDP和TCP的区别 主要…...

reactNative跳转appstore链接报错:Redirection to URL with a scheme that is not HTTP(S)

在reactnative中webview跳转H5下载页面&#xff0c;包错Redirection to URL with a scheme that is not HTTP(S) 在webview中添加一下代码 const onShouldStartLoadWithRequest (event: any) > {const { url } event;console.log(url);if (url.startsWith(https://itune…...

html css实现爱心

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style>/* 爱心 */.lo…...

react中使用shouldComponentUpdate生命周期函数调用setState引起的无限循环的错误

场景&#xff1a; 在 React 组件中&#xff0c;当在 componentWillUpdate 或 componentDidUpdate 生命周期方法中调用 setState 时&#xff0c;会触发无限循环&#xff0c;导致超过最大更新深度。 错误原因 在React组件中 &#xff0c;我们使用componentWillUpdate 或 componen…...

麦肯锡发布《2023科技趋势展望报告》,生成式AI、下一代软件开发成为趋势,软件测试如何贴合趋势?

近日&#xff0c;麦肯锡公司发布了《2023科技趋势展望报告》。报告列出了15个趋势&#xff0c;并把他们分为5大类&#xff0c;人工智能革命、构建数字未来、计算和连接的前沿、尖端工程技术和可持续发展。 类别一&#xff1a;人工智能革命 生成式AI 生成型人工智能标志着人工智…...

【爬虫】P1 对目标网站的背景调研(robot.txt,advanced_search,builtwith,whois)

对目标网站的背景调研 检查 robot.txt估算网站大小识别网站所用技术寻找网站的所有者 检查 robot.txt 目的&#xff1a; 大多数的网站都会包含 robot.txt 文件。该文件用于指出使用爬虫爬取网站时有哪些限制。而我们通过读 robot.txt 文件&#xff0c;亦可以最小化爬虫被封禁的…...

maven如何建立JavaWeb项目并连接数据库,验证登录

这里是建立建立web项目&#xff1a;Maven如何创建Java web项目&#xff08;纯干货版&#xff09;&#xff01;&#xff01;&#xff01;_明天更新的博客-CSDN博客 我们主要演示如何连接数据库验证登录。 1.在webapp目录下创建我们的登录页面&#xff1a;index.jsp 还需要再…...

CVPR 2023 | 用户可控的条件图像到视频生成方法(基于Diffusion)

注1:本文系“计算机视觉/三维重建论文速递”系列之一&#xff0c;致力于简洁清晰完整地介绍、解读计算机视觉&#xff0c;特别是三维重建领域最新的顶会/顶刊论文(包括但不限于 Nature/Science及其子刊; CVPR, ICCV, ECCV, NeurIPS, ICLR, ICML, TPAMI, IJCV 等)。 本次介绍的论…...

动态规划(基础)

一&#xff0c;背包问题 老规矩&#xff0c;上链接&#xff08;http://t.csdn.cn/hEwvu&#xff09; &#xff08;1&#xff09;01背包问题 给定一个承重量为C的背包&#xff0c;n个重量分别为w1​,w2​,...,wn​的物品&#xff0c;物品i放入背包能产生pi​(>0)的价值(i1,…...

【Pytorch:nn.Embedding】简介以及使用方法:用于生成固定数量的具有指定维度的嵌入向量embedding vector

文章目录 1、nn.Embedding2、使用场景 1、nn.Embedding 首先我们讲解一下关于嵌入向量embedding vector的概念 1&#xff09;在自然语言处理NLP领域&#xff0c;是将单词、短语或其他文本单位映射到一个固定长度的实数向量空间中。嵌入向量具有较低的维度&#xff0c;通常在几…...

动态库的命名规则

1、动态库的命名规则&#xff1a;libname.so.x.y.z 名字含义lib这是共享库的前缀name共享库名字x主版本号y次版本号z发布版本号 2、每个版本号的含义 版本号含义主版本号表示库的重大升级&#xff0c;不同主版本号的库之间是不兼容的。依赖旧的主版本号的程序需要改动相应的…...

【Linux】网络---->网络理论

网络理论 网络协议分层模型网络数据的封装于分用地址管理 网络协议分层模型 OSI五层模型&#xff1a;应用层&#xff0c;传输层&#xff0c;网络层&#xff0c;数据链路层&#xff0c;物理层 应用层&#xff1a;主要负责应用程序间的沟通&#xff0c;代表协议有HTML协议&#x…...

Android学习之路(4) UI控件之输入框

本节引言&#xff1a; 在本节中&#xff0c;我们来学习第二个很常用的控件EditText(输入框)&#xff1b; 和TextView非常类似&#xff0c;最大的区别是&#xff1a;EditText可以接受用户输入&#xff01; 1.设置默认提示文本 如下图&#xff0c;相信你对于这种用户登录的界面并…...

1.初识Web

文章目录 1. 什么是Web?2.初始Web前端2.1.Web标准 1. 什么是Web? web:全球广域网&#xff0c;也称万维网(www World Wide Web)&#xff0c;能够通过浏览器访问的网站。 2.初始Web前端 网页有哪些部分组成&#xff1f; 文字、图片、音频、视频、超链接… 我们看到的网页&am…...

【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡)

微服务技术一 技术栈图一、注册中心Eureka概念&#xff1a;搭建EurekaServer服务注册服务发现&#xff08;消费者对提供者的远程调用&#xff09; 二、Ribbon负载均衡负载均衡的原理&#xff1a;LoadBalanced负载均衡的策略&#xff1a;IRule懒加载 三、Nacos注册中心Nacos的安…...

【Linux】可重入函数 volatile关键字 以及SIGCHLD信号

可重入函数 volatile关键字 以及SIGCHLD信号 一、可重入函数1、引入2、可重入函数的判断 二、volatile关键字1、引入2、关于编译器的优化的简单讨论 三、SIGCHLD信号 一、可重入函数 1、引入 我们来先看一个例子来帮助我们理解什么是可重入函数&#xff1a; 假设我们现在要对…...

【动态规划】回文串问题

文章目录 动态规划&#xff08;回文串问题&#xff09;1. 回文子串2. 最长回文子串3. 回文串分割 IV4. 分割回文串 ||5. 最长回文子序列6. 让字符串成为回文串的最小插入次数 动态规划&#xff08;回文串问题&#xff09; 1. 回文子串 题目链接 状态表示 f[i][j]表示 i 到 j …...

Laravel Swift Mail发送带附件的邮件报错 “Swift_IoException The path cannot be empty“处理

先说下情况&#xff0c;就是我要做一个发送附件的邮件发送功能&#xff0c;结果&#xff0c;报错&#xff1a;The path cannot be empty。给我整的有点迷糊&#xff0c;网上也没有类似的问题。后来&#xff0c;我检查了一下代码&#xff0c;发现有个地方&#xff0c;是需要给附…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...

2.3 物理层设备

在这个视频中&#xff0c;我们要学习工作在物理层的两种网络设备&#xff0c;分别是中继器和集线器。首先来看中继器。在计算机网络中两个节点之间&#xff0c;需要通过物理传输媒体或者说物理传输介质进行连接。像同轴电缆、双绞线就是典型的传输介质&#xff0c;假设A节点要给…...