Search in sources :

Example 6 with structures._Query

use of structures._Query in project IR_Base by Linda-sunshine.

the class LambdaRank method evaluate.

protected double evaluate() {
    double obj = 0, perf = 0, total = 0, r;
    int misorder = 0;
    for (_Query query : m_queries) {
        if ((r = m_eval.eval(query)) >= 0) {
            // ranking score should already be calculated
            perf += r;
            total++;
        }
        for (_QUPair pair : query.m_docList) {
            if (pair.m_worseURLs != null) {
                for (_QUPair worseURL : pair.m_worseURLs) {
                    if ((r = Utils.logistic(pair.m_score - worseURL.m_score)) > 0)
                        obj += Math.log(r);
                    if (pair.m_score <= worseURL.m_score)
                        misorder++;
                }
            }
            if (pair.m_betterURLs != null) {
                for (_QUPair betterURL : pair.m_betterURLs) {
                    if ((r = Utils.logistic(betterURL.m_score - pair.m_score)) > 0)
                        obj += Math.log(r);
                    if (pair.m_score >= betterURL.m_score)
                        misorder++;
                }
            }
        }
    }
    perf /= total;
    // to be maximized
    obj -= 0.5 * m_lambda * Utils.L2Norm(m_weight);
    System.out.format("%d\t%.2f\t%.4f\n", misorder / 2, obj, perf);
    return perf;
}
Also used : structures._Query(structures._Query) structures._QUPair(structures._QUPair)

Example 7 with structures._Query

use of structures._Query in project IR_Base by Linda-sunshine.

the class LambdaRankParallel method allocateQueries.

void allocateQueries() {
    for (LambdaRankWorker worker : m_workers) worker.clearQueries();
    int workerSize = m_workers.length, workerId;
    Random rand = new Random();
    for (_Query q : m_queries) {
        workerId = rand.nextInt(workerSize);
        m_workers[workerId].addQuery(q);
    }
    for (LambdaRankWorker worker : m_workers) worker.init();
}
Also used : structures._Query(structures._Query) Random(java.util.Random)

Example 8 with structures._Query

use of structures._Query in project IR_Base by Linda-sunshine.

the class LambdaRankWorker method evaluate.

protected void evaluate() {
    double r;
    m_obj = 0;
    m_perf = 0;
    m_misorder = 0;
    for (_Query query : m_queries) {
        // calculate ranking score with latest weight
        for (_QUPair pair : query.m_docList) pair.score(m_weight);
        if (// ranking score should already be calculated
        (r = m_eval.eval(query)) >= 0)
            m_perf += r;
        for (_QUPair pair : query.m_docList) {
            if (pair.m_worseURLs != null) {
                for (_QUPair worseURL : pair.m_worseURLs) {
                    if ((r = Utils.logistic(pair.m_score - worseURL.m_score)) > 0)
                        m_obj += Math.log(r);
                    if (pair.m_score <= worseURL.m_score)
                        m_misorder++;
                }
            }
            if (pair.m_betterURLs != null) {
                for (_QUPair betterURL : pair.m_betterURLs) {
                    if ((r = Utils.logistic(betterURL.m_score - pair.m_score)) > 0)
                        m_obj += Math.log(r);
                    if (pair.m_score >= betterURL.m_score)
                        m_misorder++;
                }
            }
        }
    }
    m_misorder /= 2;
}
Also used : structures._Query(structures._Query) structures._QUPair(structures._QUPair)

Example 9 with structures._Query

use of structures._Query in project IR_Base by Linda-sunshine.

the class L2RMetricLearning method L2RModelTraining.

protected void L2RModelTraining() {
    // select the training pairs
    createTrainingCorpus();
    if (m_ranker == 0) {
        ArrayList<Feature[]> fvs = new ArrayList<Feature[]>();
        ArrayList<Integer> labels = new ArrayList<Integer>();
        for (_Query q : m_queries) q.extractPairs4RankSVM(fvs, labels);
        Model rankSVM = SVM.libSVMTrain(fvs, labels, RankFVSize, SolverType.L2R_L1LOSS_SVC_DUAL, m_tradeoff, -1);
        m_weights = rankSVM.getFeatureWeights();
        System.out.format("RankSVM training performance:\nMAP: %.4f\n", evaluate(OptimizationType.OT_MAP));
    } else if (m_ranker == 1) {
        // all the rest use LambdaRank with different evaluator
        LambdaRank lambdaRank;
        if (m_multithread) {
            /**
             ** multi-thread version ***
             */
            lambdaRank = new LambdaRankParallel(RankFVSize, m_tradeoff, m_queries, OptimizationType.OT_MAP, 10);
            lambdaRank.setSigns(getRankingFVSigns());
            // lambdaRank specific parameters
            lambdaRank.train(100, 100, 1.0, 0.95);
        } else {
            /**
             ** single-thread version ***
             */
            lambdaRank = new LambdaRank(RankFVSize, m_tradeoff, m_queries, OptimizationType.OT_MAP);
            lambdaRank.setSigns(getRankingFVSigns());
            // lambdaRank specific parameters
            lambdaRank.train(300, 20, 1.0, 0.98);
        }
        m_weights = lambdaRank.getWeights();
    } else if (m_ranker == 2) {
        RankNet ranknet = new RankNet(RankFVSize, 5.0);
        ArrayList<double[]> rfvs = new ArrayList<double[]>();
        for (_Query q : m_queries) q.extractPairs4RankNet(rfvs);
        ranknet.setSigns(getRankingFVSigns());
        double likelihood = ranknet.train(rfvs);
        m_weights = ranknet.getWeights();
        System.out.format("RankNet training performance:\nlog-likelihood: %.4f\t MAP: %.4f\n", likelihood, evaluate(OptimizationType.OT_MAP));
    }
    for (int i = 0; i < RankFVSize; i++) System.out.format("%.5f ", m_weights[i]);
    System.out.println();
}
Also used : structures._Query(structures._Query) ArrayList(java.util.ArrayList) LambdaRankParallel(Ranker.LambdaRankParallel) Feature(Classifier.supervised.liblinear.Feature) LambdaRank(Ranker.LambdaRank) RankNet(Ranker.RankNet) Model(Classifier.supervised.liblinear.Model)

Example 10 with structures._Query

use of structures._Query in project IR_Base by Linda-sunshine.

the class L2RMetricLearning method evaluate.

double evaluate(OptimizationType otype) {
    Evaluator eval;
    if (otype.equals(OptimizationType.OT_MAP))
        eval = new MAP_Evaluator();
    else if (otype.equals(OptimizationType.OT_NDCG))
        eval = new NDCG_Evaluator(LambdaRank.NDCG_K);
    else
        eval = new Evaluator();
    double perf = 0;
    for (_Query q : m_queries) {
        for (_QUPair qu : q.m_docList) qu.score(m_weights);
        perf += eval.eval(q);
    }
    return perf / m_queries.size();
}
Also used : structures._Query(structures._Query) structures._QUPair(structures._QUPair) MAP_Evaluator(Ranker.evaluator.MAP_Evaluator) NDCG_Evaluator(Ranker.evaluator.NDCG_Evaluator) MAP_Evaluator(Ranker.evaluator.MAP_Evaluator) NDCG_Evaluator(Ranker.evaluator.NDCG_Evaluator) Evaluator(Ranker.evaluator.Evaluator)

Aggregations

structures._QUPair (structures._QUPair)9 structures._Query (structures._Query)7 ArrayList (java.util.ArrayList)3 Feature (Classifier.supervised.liblinear.Feature)1 Model (Classifier.supervised.liblinear.Model)1 LambdaRank (Ranker.LambdaRank)1 LambdaRankParallel (Ranker.LambdaRankParallel)1 RankNet (Ranker.RankNet)1 Evaluator (Ranker.evaluator.Evaluator)1 MAP_Evaluator (Ranker.evaluator.MAP_Evaluator)1 NDCG_Evaluator (Ranker.evaluator.NDCG_Evaluator)1 Random (java.util.Random)1 MyPriorityQueue (structures.MyPriorityQueue)1 structures._Doc (structures._Doc)1 structures._RankItem (structures._RankItem)1