RankLib是一个排序学习算法的库。目前已经实现了8种流行的算法:RankNet、RankBoost、AdaRank、Coordinate Ascent、LambdaMART、MART、ListNet和Random Forests。还实现了多种检索指标,并提供了多种方法进行评价。
文件格式
训练、测试、验证数据文件格式与SVM-Rank相同。每一行代表一个样本数据,格式如下:
<target> qid:<qid> <feature>:<value> <feature>:<value> ... <feature>:<value> # <info>
其中<target>是样本的标签,也就是训练的目标;qid:<qid>是query标识,同一query的数据需要保持连续,否则会被解析为两个不同的query;<feature>:<value>是特征及其值;<info>是其他信息,在训练时#后面的信息会被忽略。
<target>、<qid>、<feature>为正整数,<value>为浮点数,<info>为字符串。
0 qid:9004234 1:0.00015 2:0.2 3:0.6955521 4:1.0 31:0.8157 32:0.500204 33:1.0 34:0.666667 43:0.5 44:1.0 50:1.0 #其他描述信息
0 qid:9004234 1:0.01112 4:1.0 14:1.0 31:0.77 32:0.463174 33:1.0 34:0.333333 42:0.15 43:0.3 44:1.0 50:1.0 #其他描述信息
0 qid:9004234 1:0.00015 3:0.6955521 4:1.0 31:0.8157 32:0.500204 33:1.0 34:0.666667 43:0.5 44:1.0 50:1.0 #其他描述信息
0 qid:9004234 3:0.4073483 4:1.0 24:1.0 31:0.7943 32:0.388067 33:1.0 34:0.333333 42:0.15 43:0.3 44:1.0 50:1.0 #其他描述信息
使用方法
RankLib不依赖其他第三方包,只需要有java环境即可。在RankLib所在目录下执行java -jar bin/RankLib.jar会打印使用说明,会看到详细的参数信息。
RankLib参数分为训练和测试两部分,训练参数中除了公共的参数外,还有一些算法特有的参数。
训练参数
公共参数 | |
---|---|
参数 | 说明 |
-train <file> | 训练数据文件。 |
-ranker <type> | 指定使用过的排序算法: 0:MART 1:RankNet 2:RankBoost 3:AdaRank 4:Coordinate Ascent 5:LambdaRank 6:LambdaMART 7:ListNet 8:Random Forests 9:Linear regression (L2 regularization) |
-feature <file> | 可选的,特征描述文件,列出学习器使用的特征,每行一个特征。 如果不指定此文件,默认使用所有特征。 |
-metric2t <metric> | 可选的,对训练数据进行评价的度量。支持MAP、NDCG@k、DCG@k、P@k、RR@k、ERR@k,默认为ERR@10。 |
-gmax <label> | 可选的,标签最大值,对ERR的计算有影响,默认为4,即标签范围是0、1、2、3。 |
-qrel <file> | 可选的,TREC格式的相关性判断文件,只对MAP和NDCG的计算有影响,默认不使用。 |
-silent | 可选的,不打印进度信息,默认是打印的。 |
-missingZero | 可选的,用0替换缺失的特性值,而不是抛出异常,默认抛出异常。 |
-validate <file> | 可选的,用于调优的验证数据文件。如果指定验证数据,对验证数据执行的最好的模型为最终的模型。默认不进行验证。 |
-tvs <x> | 可选的,如果没有单独的验证数据,可以使用此选项将训练数据分割成x的训练数据和1-x的验证数据。x为0-1之间的浮点数。默认不进行分割。 |
-save <model> | 可选的,保存学习到的模型,默认不保存。 |
-test <file> | 可选的,测试数据文件。如果指定测试数据,将使用测试数据评估训练出的模型,默认不进行测试。 |
-tts <x> | 可选的,如果没有单独的测试数据,可以使用此选项将训练数据分割成x的训练数据和1-x的测试数据。x为0-1之间的浮点数。如果同时指定-tts和-tvs,-tts会覆盖-tvs,即只会将数据分割成训练数据和测试数据。 |
-metric2T <metric> | 可选的,对测试数据进行评价的度量。由于在实现时选项并没有区分大小写,所以同时指定-metric2t与-metric2T选项时,两个参数总是相同的,且为最后一个设置的值。默认与metric2t相同。 |
-norm <method> | 可选的,对所有特征向量进行标准化。method可选值为:sum(对每个特征通过其所有值的和对其进行标准化)、zscore(对每个特征通过其平均值/标准偏差进行标准化)、linear(对每个特征通过其最大值、最小值进行标准化),默认不进行标准化。 |
-kcv <k> | 可选的,使用k折交叉验证法进行训练。-tvs选项可以进一步的在每折中保留一部分训练数据进行验证。默认不使用k折交叉验证。 |
-kcvmd <dir> | 可选的,保存通过交叉验证训练的模型的目录,默认不保存。 |
-kcvmn <model> | 可选的,每折中学到的模型的后缀。以字符“f”加上折数为前缀。默认为空字符串“”。
|
RankNet参数 | |
---|---|
-epoch <T> | 可选的,训练迭代次数,默认为100。 |
-layer <layer> | 可选的,隐藏层的数量,默认为1。 |
-node <node> | 可选的,每个隐藏层的节点数量,默认为10。 |
-lr <rate> | 可选的,学习率,默认为0.00005。 |
RankBoost参数 | |
---|---|
-round <T> | 可选的,训练轮数,默认为300。 |
-tc <k> | 可选的,候选域值的数量,如果为-1,则特征的所有值都用做候选域值,默认为10。 |
AdaRank参数 | |
---|---|
-round <T> | 可选的,训练的轮数,默认为500。 |
-noeq | 可选的,训练时不使用“强”特征队列,默认为使用。 |
-tolerance <t> | 可选的,连续两轮学习的性能最小提升,默认为0.002。 |
-max <times> | 可选的,在不改变性能的情况下,连续选择一个特性的最大次数,默认为5。 |
Coordinate Ascent参数 | |
---|---|
-r <k> | 可选的,随机重新启动的次数,默认为5。 |
-i <iteration> | 可选的,每个维度的迭代次数,默认为25。 |
-tolerance <t> | 可选的,两次随机重启运算后性能的最小提升,默认为0.001。 |
-reg <slack> | 可选的,正则化参数,默认不进行正则化。 |
MART、LambdaMART参数 | |
---|---|
-tree <t> | 可选的,树的数量,默认为1000。 |
-leaf <l> | 可选的,每棵树叶子节点的数量,默认为10。 |
-shrinkage <factor> | 可选的,学习率,默认为0.1。 |
-tc <k> | 可选的,树分裂时候选域值的数量,如果为-1,则使用特征的所有值,默认为256。 |
-mls <n> | 可选的,每个叶子节点必须包含的文档的最小数量,默认为1。 |
-estop <e> | 可选的,如果在验证数据上连续e轮没有任何性能提升就提前停止训练,默认为100。 |
ListNet参数 | |
---|---|
-epoch <T> | 可选的,训练轮数,默认为1500。 |
-lr <rate> | 可选的,学习率,默认为0.00001。 |
Random Forests参数 | |
---|---|
-bag <r> | 可选的,bag的数量,默认为300。 |
-srate <r> | 可选的,子集采样率,默认为1.0。 |
-frate <r> | 可选的,特征采样率,默认为0.3。 |
-rtype <type> | 可选的,bag使用的排序算法,可选值只有0(MART)和6(LambdaMART),默认为0。 |
-tree <t> | 可选的,每个bag中树的数量,默认为1。 |
-leaf <l> | 可选的,每棵树叶子节点的数量,默认为100。 |
-shrinkage <factor> | 可选的,学习率,默认为0.1。 |
-tc <k> | 可选的,树分裂时候选域值的数量,如果为-1,则使用特征的所有值,默认为256。 |
-mls <n> | 可选的,每个叶子节点必须包含的文档的最小数量,默认为1。 |
Linear Regression参数 | |
---|---|
-L2 <reg> | 可选的,L2正则化参数,默认为1.0E-10。 |
测试参数
公共参数 | |
---|---|
-load <model> | 要加载的模型,可以使用多个-load选项按递增的顺序来指定来自多折的模型。在这种情况下,测试/排序数据将相应地进行分区。 |
-test <file> | 用来评估模型的测试数据,不能与-rank选项同时使用。 |
-rank <file> | 对指定文件中的样本进行排序,不能与-test选项同时使用。 |
-metric2T <metric> | 可选的,对测试数据进行评估的度量,默认为ERR@10。 |
-gmax <label> | 可选的,标签最大值,对ERR的计算有影响,默认为4,即标签范围是0、1、2、3。 |
-score <file> | 可选的,保存每个排序的对象的分数,必须和-rank选项一起使用。 |
-qrel <file> | 可选的,TREC格式的相关性判断文件,只对MAP和NDCG的计算有影响,默认不使用。 |
-idv <file> | 可选的,保存模型对于单独的排序列表,在测试度量上的性能,必须和-test选项一起使用。 |
-norm | 可选的,标准化特征向量,可选值与训练参数中的-norm选项相同。 |