[LTR] RankLib.jar 包介绍
发布日期:2021-05-09 05:15:32 浏览次数:18 分类:技术文章

本文共 10601 字,大约阅读时间需要 35 分钟。

一、介绍

RankLib.jar 是一个学习排名(Learning to rank)算法的库,目前已经实现了如下几种算法:

  • MART
  • RankNet
  • RankBoost
  • AdaRank
  • Coordinate Ascent
  • LambdaMART
  • ListNet
  • Random Forests
  • Linear regression

二、

Usage: java -jar RankLib.jar 
Params: [+] Training (+ tuning and evaluation) # 训练数据 -train
Training data # 指定排名算法 -ranker
Specify which ranking algorithm to use 0: MART (gradient boosted regression tree) 1: RankNet 2: RankBoost 3: AdaRank 4: Coordinate Ascent 6: LambdaMART 7: ListNet 8: Random Forests 9: Linear regression (L2 regularization) # 特征描述文件,列出要学习的特征,每行一个特征,默认使用所有特征 [ -feature
] Feature description file: list features to be considered by the learner, each on a separate line If not specified, all features will be used. # [ -metric2t
] Metric to optimize on the training data. Supported: MAP, NDCG@k, DCG@k, P@k, RR@k, ERR@k (default=ERR@10) [ -gmax

1. -train <file>

指定训练数据的文件,训练数据格式:

label    qid:$id    $featureid:$featurevalue    $featureid:$featurevalue ... # description

每行代表一个样本,相同查询请求的样本的 qid 相同,label 表示该样本和该查询请求的相关程度,description 描述信息,不参与训练计算。

2、-ranker <type>

指定排名算法

  • MART(Multiple Additive Regression Tree)多重增量回归树
  • GBDT(Gradient Boosting Decision Tree)梯度渐进决策树
  • GBRT(Gradient Boosting Regression Tree)梯度渐进回归树
  • TreeNet 决策树网络
  • RankNet
  • RankBoost
  • AdaRank
  • Coordinate Ascent
  • LambdaMART
  • ListNet
  • Random Forests
  • Linear regression

3、-feature <file>

指定样本的特征定义文件,格式如下:

feature1feature2...# featureK(该特征不参与分析)

4、-metric2t <metric>

指定信息检索中的评价指标,包括:

MAP, NDCG@k, DCG@k, P@k, RR@k, ERR@k

5、Example

java -jar bin/RankLib.jar -train MQ2008/Fold1/train.txt -test MQ2008/Fold1/test.txt -validate MQ2008/Fold1/vali.txt -ranker 6 -metric2t NDCG@10 -metric2T ERR@10 -save mymodel.txt

命令解释 >>>

训练数据:MQ2008/Fold1/train.txt
测试数据:MQ2008/Fold1/test.txt
验证数据:MQ2008/Fold1/vali.txt
排名算法:6,LambdaMART
评估指标:NDCG,取排名前 10 个数据进行计算
测试数据评估指标:ERR,取排名前 10 个数据进行计算
保存模型:mymodel.txt

  • 参数 -validate 是可选的,但可以更好的模型结果,对于 RankNet/MART/LambdaMART 非常重要。
  • -metric2t 仅应用于 list-wise 算法(AdaRank、Coordinate Ascent 和 LambdaMART);point-wise 和 Pair-wise 算法(MART、RankNet、RankBoost)是使用自己内部的 RMSE/pair-wise loss 作为评价指标。ListNet 虽然是 list-wise 算法,但是也不用 metric2t 指定评价指标。

6、k-fold cross validation

  • 顺序分区
java -jar bin/RankLib.jar -train MQ2008/Fold1/train.txt -ranker 4 -kcv 5 -kcvmd models/ -kcvmn ca -metric2t NDCG@10 -metric2T ERR@10

按顺序将训练数据拆分5等份,第 i 份数据作为第 i 折叠的测试数据,第 i 折叠的训练数据则是由其他折叠的数据组成。

  • 随机分区
java -cp bin/RankLib.jar ciir.umass.edu.features.FeatureManager -input MQ2008/Fold1/train.txt -output mydata/ -shuffle

将训练数据 train.txt 重新洗牌存储在 mydata/ 目录下 train.txt.shuffled

  • 获取每个折叠中的数据
java -cp bin/RankLib.jar ciir.umass.edu.features.FeatureManager -input MQ2008/Fold1/train.txt.shuffled -output mydata/ -k 5

7、评估已训练的模型

java -jar bin/RankLib.jar -load mymodel.txt -test MQ2008/Fold1/test.txt -metric2T ERR@10

8、模型对比

java -jar bin/RankLib.jar -test MQ2008/Fold1/test.txt -metric2T NDCG@10 -idv output/baseline.ndcg.txtjava -jar bin/RankLib.jar -load ca.model.txt -test MQ2008/Fold1/test.txt -metric2T NDCG@10 -idv output/ca.ndcg.txtjava -jar bin/RankLib.jar -load lm.model.txt -test MQ2008/Fold1/test.txt -metric2T NDCG@10 -idv output/lm.ndcg.txt

输出文件中包含了每条查询的 NDCG@10 指标值,以及所有查询的综合指标,例如:

NDCG@10   170   0.0NDCG@10   176   0.6722390270733757NDCG@10   177   0.4772656487866462NDCG@10   178   0.539003131276382NDCG@10   185   0.6131471927654585NDCG@10   189   1.0NDCG@10   191   0.6309297535714574NDCG@10   192   1.0NDCG@10   194   0.2532778777010656NDCG@10   197   1.0NDCG@10   200   0.6131471927654585NDCG@10   204   0.4772656487866462NDCG@10   207   0.0NDCG@10   209   0.123151194370365NDCG@10   221   0.39038004999210174NDCG@10   all   0.5193204478059303

然后再进行对比:

java -cp RankLib.jar ciir.umass.edu.eval.Analyzer -all output/ -base baseline.ndcg.txt > analysis.txt

对比结果 analysis.txt 如下:

Overall comparison  ------------------------------------------------------------------------  System  Performance     Improvement     Win     Loss    p-value  baseline_ndcg.txt [baseline]    0.093  LM_ndcg.txt     0.2863  +0.1933 (+207.8%)       9       1       0.03  CA_ndcg.txt     0.5193  +0.4263 (+458.26%)      12      0       0.0  Detailed break down  ------------------------------------------------------------------------             [ < -100%)  [-100%,-75%)  [-75%,-50%)  [-50%,-25%)  [-25%,0%)  (0%,+25%]  (+25%,+50%]  (+50%,+75%]  (+75%,+100%]  ( > +100%]  LM_ndcg.txt    0        0           1            0            0         4            2            2            1            0  CA_ndcg.txt    0             0            0            0            0        1            6            2            3            0

9、利用训练模型重排名

java -jar RankLib.jar -load mymodel.txt -rank myResultLists.txt -score myScoreFile.txt

myScoreFile.txt 文件中只是增加了一列,表示重新计算的排名评分,需要自己另外根据该评分排序获取新的排名顺序。

1   0   -7.5286507606506351   1   2.90220618247985841   2   -0.7001255154609681   3   2.3766574859619141   4   -0.296662658452987671   5   -2.0386281013488771   6   -5.2677111625671391   7   -2.0221464633941651   8   0.6741248369216919...

参考

上一篇:3D顶点转换和法线转换
下一篇:[Q&A] 解决 SBT 初始化或下载 jar 包速度慢的问题

发表评论

最新留言

表示我来过!
[***.240.166.169]2025年04月19日 18时13分52秒