From e0feb35aceebf311362775d94cd648134fc34f8e Mon Sep 17 00:00:00 2001 From: Thong Nguyen Date: Fri, 12 Mar 2021 14:25:55 +0100 Subject: [PATCH] display metric in query box --- diffir/measure/qrels.py | 4 +++- diffir/measure/unsupervised.py | 4 +++- diffir/run.py | 7 ++++--- diffir/templates/template.html | 10 ++++++++-- 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/diffir/measure/qrels.py b/diffir/measure/qrels.py index a9f72e6..da7694d 100644 --- a/diffir/measure/qrels.py +++ b/diffir/measure/qrels.py @@ -35,4 +35,6 @@ def _query_differences(self, run1, run2, *args, **kwargs): eval_run_2 = evaluator.evaluate(run2) query_ids = eval_run_1.keys() & eval_run_2.keys() query_ids = sorted(query_ids, key=lambda x: abs(eval_run_1[x][metric] - eval_run_2[x][metric]), reverse=True) - return query_ids[:topk] + query_ids = query_ids[:topk] + id2diff = {x:abs(eval_run_1[x][metric] - eval_run_2[x][metric]) for x in query_ids} + return query_ids, id2diff, metric diff --git a/diffir/measure/unsupervised.py b/diffir/measure/unsupervised.py index 389b7e1..8aaa184 100644 --- a/diffir/measure/unsupervised.py +++ b/diffir/measure/unsupervised.py @@ -120,4 +120,6 @@ def _query_differences(self, run1, run2, *args, **kwargs): raise ValueError("Metric {} not supported for the measure {}".format(self.config["metric"], self.module_name)) id2measure[qid] = tau qids = sorted(qids, key=lambda x: id2measure[x]) - return qids[:topk] + qids = qids[:topk] + id2measure = {idx: id2measure[idx] for idx in qids} + return qids, id2measure, metric diff --git a/diffir/run.py b/diffir/run.py index 472692d..bc064d1 100644 --- a/diffir/run.py +++ b/diffir/run.py @@ -93,7 +93,7 @@ class MainTask(ModuleBase): Dependency(key="weight", module="weight", name="exactmatch"), ] - def create_query_objects(self, run_1, run_2, qids, dataset): + def create_query_objects(self, run_1, run_2, qids, qid2diff, metric_name, dataset): """ TODO: Need a better name This method takes in 2 runs and a set of qids, and constructs a dict for each qid (format specified below) @@ -138,6 +138,7 @@ def create_query_objects(self, run_1, run_2, qids, dataset): ) fields = query._asdict() + fields["metric"]={"name": metric_name, "value": qid2diff[query.query_id]} qrels_for_query = qrels.get(query.query_id, {}) run_1_for_query = [] for rank, (doc_id, score) in enumerate(run_1[query.query_id].items()): @@ -312,9 +313,9 @@ def json(self, run_1_fn, run_2_fn=None): # TODO: handle the case without qrels assert dataset.has_queries() - diff_queries = self.measure.query_differences(run_1, run_2, dataset=dataset) + diff_queries, qid2diff, metric_name = self.measure.query_differences(run_1, run_2, dataset=dataset) # _logger.info(diff_queries) - diff_query_objects = self.create_query_objects(run_1, run_2, diff_queries, dataset) + diff_query_objects = self.create_query_objects(run_1, run_2, diff_queries, qid2diff, metric_name, dataset) doc_objects = self.create_doc_objects(diff_query_objects, dataset) return json.dumps( diff --git a/diffir/templates/template.html b/diffir/templates/template.html index 0a5e06e..af461c2 100644 --- a/diffir/templates/template.html +++ b/diffir/templates/template.html @@ -8,6 +8,7 @@ href="https://previews.123rf.com/images/antonshaparenko/antonshaparenko2003/antonshaparenko200300235/143437440-information-retrieval-icon-simple-element-from-business-intelligence-collection-filled-information-r.jpg"> + diffir: IR model comparision