示例#1
0
 public void Update(RelevanceEstimate est)
 {
     // Nothing to do
     this._defaultEstimator.Update(est);
 }
示例#2
0
        public override void Run()
        {
            // Read files
            IEnumerable <Run> runs = AbstractCommand.ReadInputFile(this._inputPath);
            IEnumerable <RelevanceEstimate> judged = new RelevanceEstimate[] { };

            if (this._judgedPath != null)
            {
                judged = AbstractCommand.ReadKnownJudgments(this._judgedPath);
            }
            IEnumerable <RelevanceEstimate> estimates = AbstractCommand.ReadEstimatedJudgments(this._estimatedPath);
            // Instantiate estimate store and measure
            RelevanceEstimateStore store = new RelevanceEstimateStore(estimates);

            store.Update(judged);
            IMeasure measure = new CG(100); //TODO: max relevance

            // Compile list of all query-doc-sys-rank tuples
            Dictionary <string, Dictionary <string, Dictionary <string, int> > > qdsRanks = AbstractCommand.ToQueryDocumentSystemRanks(runs);
            // Re-structure estimates
            Dictionary <string, Dictionary <string, RelevanceEstimate> > qdEstimates = new Dictionary <string, Dictionary <string, RelevanceEstimate> >();

            foreach (var est in estimates)
            {
                Dictionary <string, RelevanceEstimate> dEstimates = null;
                if (!qdEstimates.TryGetValue(est.Query, out dEstimates))
                {
                    dEstimates = new Dictionary <string, RelevanceEstimate>();
                    qdEstimates.Add(est.Query, dEstimates);
                }
                dEstimates.Add(est.Document, est);
            }
            // Remove judged query-docs
            foreach (var j in judged)
            {
                Dictionary <string, RelevanceEstimate> dEstimates = null;
                if (qdEstimates.TryGetValue(j.Query, out dEstimates))
                {
                    dEstimates.Remove(j.Document);
                    if (dEstimates.Count == 0)
                    {
                        qdEstimates.Remove(j.Query);
                    }
                }
            }

            bool needsNext = false;
            // Re-structure runs for efficient access
            Dictionary <string, Dictionary <string, Run> > sqRuns = AbstractCommand.ToSystemQueryRuns(runs);

            if (this._target == EvaluationTargets.Relative)
            {
                // Estimate per-query relative effectiveness
                Dictionary <string, Dictionary <string, Dictionary <string, RelativeEffectivenessEstimate> > > ssqRels =
                    EvaluateCommand.GetSystemSystemQueryRelatives(sqRuns, measure, store, this._confEstimator);
                // Average (already sorted)
                List <RelativeEffectivenessEstimate> relSorted = EvaluateCommand.GetSortedMeanRelatives(ssqRels, this._confEstimator);

                if (relSorted.Average(r => r.Confidence) < this._confidence)
                {
                    needsNext = true;
                    measure.ComputeQueryDocumentWeights(qdEstimates, qdsRanks, ssqRels);
                }
            }
            else
            {
                // Estimate per-query absolute effectiveness
                Dictionary <string, Dictionary <string, AbsoluteEffectivenessEstimate> > sqAbss =
                    EvaluateCommand.GetSystemQueryAbsolutes(sqRuns, measure, store, this._confEstimator);
                // Average and sort
                List <AbsoluteEffectivenessEstimate> absSorted = EvaluateCommand.GetSortedMeanAbsolutes(sqAbss, this._confEstimator);

                if (absSorted.Average(a => a.Confidence) < this._confidence)
                {
                    needsNext = true;
                    measure.ComputeQueryDocumentWeights(qdEstimates, qdsRanks, sqAbss);
                }
            }

            if (needsNext)
            {
                var          batches = NextCommand.GetBatches(qdEstimates, this._batchNum, this._batchSize);
                TabSeparated io      = new TabSeparated(this._decimalDigits);
                ((IWriter <List <RelevanceEstimate> >)io).Write(Console.Out, batches.Take(this._batchNum));
            }
        }
示例#3
0
        public void Update(RelevanceEstimate estimate)
        {
            string id = RelevanceEstimate.GetId(estimate.Query, estimate.Document);

            this._estimates[id] = estimate;
        }
示例#4
0
 public void Update(RelevanceEstimate est)
 {
     // Nothing to do
 }