每天一個知識點——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計算)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/37988.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/37988.shtml
英文地址,請注明出處:http://en.pswp.cn/news/37988.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

海量數據遷移,亞馬遜云科技云數據庫服務為大庫治理提供新思路

1.背景 目前&#xff0c;文檔型數據庫由于靈活的schema和接近關系型數據庫的訪問特點&#xff0c;被廣泛應用&#xff0c;尤其是游戲、互聯網金融等行業的客戶使用MongoDB構建了大量應用程序&#xff0c;比如游戲客戶用來處理玩家的屬性信息&#xff1b;又如股票APP用來存儲與時…

Stable Diffusion - 幻想 (Fantasy) 風格與糖果世界 (Candy Land) 人物提示詞配置

歡迎關注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/132212193 圖像由 DreamShaper8 模型生成&#xff0c;融合糖果世界。 幻想 (Fantasy) 風格圖像是一種以想象力為主導的藝術形式&#xff0c;創造了…

27.Netty源碼之FastThreadLocal

highlight: arduino-light FastThreadLocal FastThreadLocal 的實現與 ThreadLocal 非常類似&#xff0c;Netty 為 FastThreadLocal 量身打造了 FastThreadLocalThread 和 InternalThreadLocalMap 兩個重要的類。下面我們看下這兩個類是如何實現的。 FastThreadLocalThread 是對…

【論文閱讀】NoDoze:使用自動來源分類對抗威脅警報疲勞(NDSS-2019)

NODOZE: Combatting Threat Alert Fatigue with Automated Provenance Triage 伊利諾伊大學芝加哥分校 Hassan W U, Guo S, Li D, et al. Nodoze: Combatting threat alert fatigue with automated provenance triage[C]//network and distributed systems security symposium.…

uniapp安卓ios打包上線注意事項

1、安卓包注意事項 隱私政策彈框提示 登錄頁面隱私政策默認不勾選隱私政策同意前不能獲取用戶權限APP啟動時&#xff0c;在用戶授權同意隱私政策前&#xff0c;APP及SDK不可以提前收集和使用IME1、OAID、IMS1、MAC、應用列表等信息 ios包注意事項 需要有注銷賬號的功能 3、安…

前后端分離------后端創建筆記(05)用戶列表查詢接口(上)

本文章轉載于【SpringBootVue】全網最簡單但實用的前后端分離項目實戰筆記 - 前端_大菜007的博客-CSDN博客 僅用于學習和討論&#xff0c;如有侵權請聯系 源碼&#xff1a;https://gitee.com/green_vegetables/x-admin-project.git 素材&#xff1a;https://pan.baidu.com/s/…

vue3中簡單快速的做個表單輸入框驗證

<el-form ref"formRef" :model"processingProgressForm"><el-form-item label"服務商名稱:" :label-width"120" prop"rejectRemarks" :rules"[{ required: true, message: 服務商名稱不能為空 }]">&l…

通過網關訪問微服務,一次正常,一次不正常 (nacos配置的永久實例卻未啟動導致)

微服務直接訪問沒問題&#xff0c;通過網關訪問&#xff0c;就一次正常訪問&#xff0c;一次401錯誤&#xff0c;交替正常和出錯 負載均衡試了 路由配置檢查了 最后發現nacos下竟然有2個order服務實例&#xff0c;我明明只開啟了一個呀 原來之前的8080端口微服務還殘留&…

基于架構的軟件開發方法

基于架構的軟件開發方法 基于架構的軟件開發方法是由架構驅動的&#xff0c;即指由構成體系結構的商業、質量和功能需求的組合驅動的。使用ABSD 方法&#xff0c;設計活動可以從項目總體功能框架明確就開始&#xff0c;這意味著需求抽取和分析還沒有完成(甚至遠遠沒有完成)&am…

純C#使用Visionpro工具2 操作斑點工具

結果圖 通過斑點工具中非圓性找取圓特征 代碼 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.For…

ApacheCon - 云原生大數據上的 Apache 項目實踐

Apache 軟件基金會的官方全球系列大會 CommunityOverCode Asia&#xff08;原 ApacheCon Asia&#xff09;首次中國線下峰會將于 2023 年 8 月 18-20 日在北京麗亭華苑酒店舉辦&#xff0c;大會含 17 個論壇方向、上百個前沿議題。 字節跳動云原生計算團隊在此次 CommunityOve…

OpenSSL 遠程升級到 3.2.1

OpenSSL 遠程升級到 3.2.1 文章目錄 OpenSSL 遠程升級到 3.2.1背景升級 OpenSSL1. 查看 OpenSSL版本2. 下載最新穩定版本 OpenSSL3. 解壓縮&#xff0c;安裝4. 配置 背景 最近的護網行動&#xff0c;被查出來了好幾個關于OpenSSH的漏洞。需要升級OpenSSH&#xff0c;升級OpenS…

冠達管理:價格破發是什么意思啊?

價格破發是股票商場中一個比較常見的術語&#xff0c;也是常常讓出資者感到困惑的現象之一。價格破發是指新股發行后&#xff0c;由于各種原因&#xff0c;股票價格低于發行價的現象。那么&#xff0c;價格破發的原因是什么呢&#xff1f;價格破發與出資者有哪些聯系呢&#xf…

C和指針(一)

C和指針&#xff08;一&#xff09; 預處理指令main 函數常量及變量整型字面值指針&#xff1a;基本聲明&#xff1a;隱式聲明&#xff1a;常量&#xff1a; 預處理指令 預處理器用庫函數頭文件的內容替換掉相對應的#include指令語句。 使用stdio.h頭文件可以使我們訪問標準I/…

企業直播MR虛擬直播(MR混合現實直播技術)視頻介紹

到底什么是企業直播MR虛擬直播&#xff08;MR混合現實直播技術&#xff09;&#xff1f; 企業直播MR虛擬直播新玩法&#xff08;MR混合現實直播技術&#xff09; 我的文章推薦&#xff1a; [視頻圖文] 線上研討會是什么&#xff0c;企業對內對外培訓可以用線上研討會嗎&#x…

24屆近5年南京工業大學自動化考研院校分析

今天給大家帶來的是南京工業大學控制考研分析 滿滿干貨&#xff5e;還不快快點贊收藏 一、南京工業大學 學校簡介 南京工業大學&#xff08;Nanjing Tech University&#xff09;&#xff0c;簡稱“南工”&#xff0c;位于江蘇省南京市&#xff0c;由國家國防科技工業局、住…

2023年之我拿起“java“

持續更新中………… 文章目錄 javajava基礎 了解 j a v a 的語法&#xff0c;從 H e l l o W o r l d 開始 \color{red}{了解java的語法&#xff0c;從HelloWorld開始} 了解java的語法&#xff0c;從HelloWorld開始 j a v a 語言的注釋 \color{red}{java語言的注釋} java語言的…

Vue3.2+TS的defineExpose的應用

defineExpose通俗來講&#xff0c;其實就是講子組件的方法或者數據&#xff0c;暴露給父組件進行使用&#xff0c;這樣對組件的封裝使用&#xff0c;有很大的幫助&#xff0c;那么defineExpose應該如何使用&#xff0c;下面我來用一些實際的代碼&#xff0c;帶大家快速學會defi…

VSCode 報錯 grep: /proc/version: 權限不夠

部分用戶在Linux上運行VSCode提示grep: /proc/version: 權限不夠 grep: /proc/version: 權限不夠 You are trying to start Visual Studio Code as a super user which isn’t recommended. If this was intended, please add the argument --no-sandbox and specify an alter…