# # Pyserini: Reproducible IR research with sparse and dense representations # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # import os import unittest from shutil import rmtree from random import randint from integrations.utils import run_command, parse_score class TestMsmarcoPassageIrst(unittest.TestCase): def setUp(self): curdir = os.getcwd() if curdir.endswith('sparse'): self.pyserini_root = '../..' else: self.pyserini_root = '.' self.tmp = f'tmp{randint(0, 10000)}' if os.path.isdir(self.tmp): rmtree(self.tmp) os.mkdir(self.tmp) self.dl19_pass = 'dl19-passage' self.dl20 = 'dl20' def test_sum_aggregation_dl19_passage(self): # dl19 passage sum topic = 'dl19-passage' os.system(f'python -m pyserini.search.lucene.irst \ --topics {self.dl19_pass} \ --index msmarco-v1-passage \ --output {self.tmp}/regression_test_sum.{topic}.txt \ --alpha 0.1 ') score_cmd = f'python -m pyserini.eval.trec_eval \ -c -m map -m ndcg_cut.10 -l 2 {topic} {self.tmp}/regression_test_sum.{topic}.txt' status = os.system(score_cmd) stdout, stderr = run_command(score_cmd) map_score = parse_score(stdout, "map") ndcg_score = parse_score(stdout, "ndcg") self.assertEqual(status, 0) self.assertEqual(stderr, '') self.assertEqual(map_score, 0.3281) self.assertEqual(ndcg_score, 0.5260) def test_sum_aggregation_dl20_passage(self): # dl20 passage sum topic = 'dl20-passage' os.system(f'python -m pyserini.search.lucene.irst \ --topics {self.dl20} \ --index msmarco-v1-passage \ --output {self.tmp}/regression_test_sum.{topic}.txt \ --alpha 0.1 ') score_cmd = f'python -m pyserini.eval.trec_eval \ -c -m map -m ndcg_cut.10 -l 2 {topic} {self.tmp}/regression_test_sum.{topic}.txt' status = os.system(score_cmd) stdout, stderr = run_command(score_cmd) map_score = parse_score(stdout, "map") ndcg_score = parse_score(stdout, "ndcg") self.assertEqual(status, 0) self.assertEqual(stderr, '') self.assertEqual(map_score, 0.3520) self.assertEqual(ndcg_score, 0.5578) def test_max_aggregation_dl19(self): # dl19 passage max topic = 'dl19-passage' os.system(f'python -m pyserini.search.lucene.irst \ --topics {self.dl19_pass} \ --index msmarco-v1-passage \ --output {self.tmp}/regression_test_max.{topic}.txt \ --alpha 0.3 \ --max-sim ') score_cmd = f'python -m pyserini.eval.trec_eval \ -c -m map -m ndcg_cut.10 -l 2 {topic} {self.tmp}/regression_test_max.{topic}.txt' status = os.system(score_cmd) stdout, stderr = run_command(score_cmd) map_score = parse_score(stdout, "map") ndcg_score = parse_score(stdout, "ndcg") self.assertEqual(status, 0) self.assertEqual(stderr, '') self.assertEqual(map_score, 0.3286) self.assertEqual(ndcg_score, 0.5371) def test_max_aggregation_dl20_passage(self): # dl20 passage max topic = 'dl20-passage' os.system(f'python -m pyserini.search.lucene.irst \ --topics {self.dl20} \ --index msmarco-v1-passage \ --output {self.tmp}/regression_test_max.{topic}.txt \ --alpha 0.3 \ --max-sim') score_cmd = f'python -m pyserini.eval.trec_eval \ -c -m map -m ndcg_cut.10 -l 2 {topic} {self.tmp}/regression_test_max.{topic}.txt' status = os.system(score_cmd) stdout, stderr = run_command(score_cmd) map_score = parse_score(stdout, "map") ndcg_score = parse_score(stdout, "ndcg") self.assertEqual(status, 0) self.assertEqual(stderr, '') self.assertEqual(map_score, 0.3357) self.assertEqual(ndcg_score, 0.5469) def tearDown(self): rmtree(self.tmp) class TestMsmarcoDocumentIrst(unittest.TestCase): def setUp(self): curdir = os.getcwd() if curdir.endswith('sparse'): self.pyserini_root = '../..' else: self.pyserini_root = '.' self.tmp = f'tmp{randint(0, 10000)}' if os.path.isdir(self.tmp): rmtree(self.tmp) os.mkdir(self.tmp) self.dl19_doc = 'dl19-doc' self.dl20 = 'dl20' def test_sum_aggregation_dl19_doc(self): # dl19-doc-sum topic = 'dl19-doc' os.system(f'python -m pyserini.search.lucene.irst \ --topics {self.dl19_doc} \ --index msmarco-v1-doc \ --output {self.tmp}/regression_test_sum.{topic}.txt \ --alpha 0.3') score_cmd = f'python -m pyserini.eval.trec_eval \ -c -m map -m ndcg_cut.10 -M 100 {topic} {self.tmp}/regression_test_sum.{topic}.txt' status = os.system(score_cmd) stdout, stderr = run_command(score_cmd) map_score = parse_score(stdout, "map") ndcg_score = parse_score(stdout, "ndcg") self.assertEqual(status, 0) self.assertEqual(stderr, '') self.assertEqual(map_score, 0.2524) self.assertEqual(ndcg_score, 0.5494) def test_sum_aggregation_dl20_doc(self): # dl20-doc-sum topic = 'dl20-doc' os.system(f'python -m pyserini.search.lucene.irst \ --topics {self.dl20} \ --index msmarco-v1-doc \ --output {self.tmp}/regression_test_sum.{topic}.txt \ --alpha 0.3 ') score_cmd = f'python -m pyserini.eval.trec_eval \ -c -m map -m ndcg_cut.10 -M 100 {topic} {self.tmp}/regression_test_sum.{topic}.txt' status = os.system(score_cmd) stdout, stderr = run_command(score_cmd) map_score = parse_score(stdout, "map") ndcg_score = parse_score(stdout, "ndcg") self.assertEqual(status, 0) self.assertEqual(stderr, '') self.assertEqual(map_score, 0.3825) self.assertEqual(ndcg_score, 0.5559) def test_max_aggregation_dl19_doc(self): # dl19-doc-max topic = 'dl19-doc' os.system(f'python -m pyserini.search.lucene.irst \ --topics {self.dl19_doc} \ --index msmarco-v1-doc \ --output {self.tmp}/regression_test_max.{topic}.txt \ --alpha 0.3 \ --max-sim') score_cmd = f'python -m pyserini.eval.trec_eval \ -c -m map -m ndcg_cut.10 -M 100 {topic} {self.tmp}/regression_test_max.{topic}.txt' status = os.system(score_cmd) stdout, stderr = run_command(score_cmd) map_score = parse_score(stdout, "map") ndcg_score = parse_score(stdout, "ndcg") self.assertEqual(status, 0) self.assertEqual(stderr, '') self.assertEqual(map_score, 0.2205) self.assertEqual(ndcg_score, 0.4917) def test_max_aggregation_dl20_doc(self): # dl20-doc-max topic = 'dl20-doc' os.system(f'python -m pyserini.search.lucene.irst \ --topics {self.dl20} \ --index msmarco-v1-doc \ --output {self.tmp}/regression_test_max.{topic}.txt \ --alpha 0.3 \ --max-sim') score_cmd = f'python -m pyserini.eval.trec_eval \ -c -m map -m ndcg_cut.10 -M 100 {topic} {self.tmp}/regression_test_max.{topic}.txt' status = os.system(score_cmd) stdout, stderr = run_command(score_cmd) map_score = parse_score(stdout, "map") ndcg_score = parse_score(stdout, "ndcg") self.assertEqual(status, 0) self.assertEqual(stderr, '') self.assertEqual(map_score, 0.3373) self.assertEqual(ndcg_score, 0.5015) def tearDown(self): rmtree(self.tmp) class TestMsmarcoDocumentSegIrst(unittest.TestCase): def setUp(self): curdir = os.getcwd() if curdir.endswith('sparse'): self.pyserini_root = '../..' else: self.pyserini_root = '.' self.tmp = f'tmp{randint(0, 10000)}' if os.path.isdir(self.tmp): rmtree(self.tmp) os.mkdir(self.tmp) self.dl19_doc = 'dl19-doc' self.dl20 = 'dl20' def test_sum_aggregation_dl19_doc_seg(self): # dl19-doc-seg-sum topic = 'dl19-doc' os.system(f'python -m pyserini.search.lucene.irst \ --topics {self.dl19_doc} \ --index msmarco-v1-doc-segmented \ --output {self.tmp}/regression_test_sum.{topic}.txt \ --hits 10000 --segments \ --alpha 0.3') score_cmd = f'python -m pyserini.eval.trec_eval \ -c -m map -m ndcg_cut.10 -M 100 {topic} {self.tmp}/regression_test_sum.{topic}.txt' status = os.system(score_cmd) stdout, stderr = run_command(score_cmd) map_score = parse_score(stdout, "map") ndcg_score = parse_score(stdout, "ndcg") self.assertEqual(status, 0) self.assertEqual(stderr, '') self.assertEqual(map_score, 0.2711) self.assertEqual(ndcg_score, 0.5596) def test_sum_aggregation_dl20_doc_seg(self): # dl20-doc-seg-sum topic = 'dl20-doc' os.system(f'python -m pyserini.search.lucene.irst \ --topics {self.dl20} \ --index msmarco-v1-doc-segmented \ --output {self.tmp}/regression_test_sum.{topic}.txt \ --hits 10000 --segments \ --alpha 0.3 ') score_cmd = f'python -m pyserini.eval.trec_eval \ -c -m map -m ndcg_cut.10 -M 100 {topic} {self.tmp}/regression_test_sum.{topic}.txt' status = os.system(score_cmd) stdout, stderr = run_command(score_cmd) map_score = parse_score(stdout, "map") ndcg_score = parse_score(stdout, "ndcg") self.assertEqual(status, 0) self.assertEqual(stderr, '') self.assertEqual(map_score, 0.3759) self.assertEqual(ndcg_score, 0.5343) def test_max_aggregation_dl19_doc_seg(self): # dl19-doc-seg-max topic = 'dl19-doc' os.system(f'python -m pyserini.search.lucene.irst \ --topics {self.dl19_doc} \ --index msmarco-v1-doc-segmented \ --output {self.tmp}/regression_test_max.{topic}.txt \ --alpha 0.3 \ --hits 10000 --segments \ --max-sim') score_cmd = f'python -m pyserini.eval.trec_eval \ -c -m map -m ndcg_cut.10 -M 100 {topic} {self.tmp}/regression_test_max.{topic}.txt' status = os.system(score_cmd) stdout, stderr = run_command(score_cmd) map_score = parse_score(stdout, "map") ndcg_score = parse_score(stdout, "ndcg") self.assertEqual(status, 0) self.assertEqual(stderr, '') self.assertEqual(map_score, 0.2425) self.assertEqual(ndcg_score, 0.5193) def test_max_aggregation_dl20_doc_seg(self): # dl20-doc-seg-max topic = 'dl20-doc' os.system(f'python -m pyserini.search.lucene.irst \ --topics {self.dl20} \ --index msmarco-v1-doc-segmented \ --output {self.tmp}/regression_test_max.{topic}.txt \ --alpha 0.3 \ --hits 10000 --segments \ --max-sim') score_cmd = f'python -m pyserini.eval.trec_eval \ -c -m map -m ndcg_cut.10 -M 100 {topic} {self.tmp}/regression_test_max.{topic}.txt' status = os.system(score_cmd) stdout, stderr = run_command(score_cmd) map_score = parse_score(stdout, "map") ndcg_score = parse_score(stdout, "ndcg") self.assertEqual(status, 0) self.assertEqual(stderr, '') self.assertEqual(map_score, 0.3496) self.assertEqual(ndcg_score, 0.5089) def tearDown(self): rmtree(self.tmp) if __name__ == '__main__': unittest.main()