Nlp trec eval如何计算地图?

Nlp trec eval如何计算地图?,nlp,information-retrieval,Nlp,Information Retrieval,我在tensorflow中有这段代码,它编译成功了。 submission.txt中的数据如下:(以qid as 33.1为例) gold.txt中的数据如下所示:(以qid为33.1为例) 33.1 0 12 1 三十三点一零一三一 三十三点一零一四一 三十三点一零一五一 三十三点一零一六零 三十三点一零一七零 33.1 0 18 0 我认为MAP结果应该这样计算: 首先,根据分数(即“sim”)及其标签对预测进行排序。 因此,排序后的输出应该是:(仅保留小数点后的2-3位,以便清除,模式以{

我在tensorflow中有这段代码,它编译成功了。 submission.txt中的数据如下:(以qid as 33.1为例)

gold.txt中的数据如下所示:(以qid为33.1为例)

33.1 0 12 1
三十三点一零一三一
三十三点一零一四一
三十三点一零一五一
三十三点一零一六零
三十三点一零一七零
33.1 0 18 0

我认为MAP结果应该这样计算: 首先,根据分数(即“sim”)及其标签对预测进行排序。 因此,排序后的输出应该是:(仅保留小数点后的2-3位,以便清除,模式以{score,label}样式给出)

0.29 1

0.27 1

0.264 0

0.262 1

0.24 1

0.23 0

0.00

所以我认为MAP应该是:(1/1+2/2+3/4+4/5)/5=0.71


但在submission.txt.treceval中,它表示0.8875,我不知道它是如何得到的。

在本例中,MAP的计算公式为(1/1+2/2+3/4+4/5)/4。 这是因为一般来说,你应该把p@(i)的总和除以相关文档的总数,而不是最大i的值。

在这种情况下,MAP计算为(1/1+2/2+3/4+4/5)/4。 这是因为一般来说,你应该把p@(i)的总和除以相关文档的总数,而不是最大i的值。

print "Running trec_eval script..."
N = len(y_pred_test)
df_submission = pd.DataFrame(index=numpy.arange(N), columns=['qid', 'iter', 'docno', 'rank', 'sim', 'run_id'])
df_submission['qid'] = qids_test
df_submission['iter'] = 0
df_submission['docno'] = numpy.arange(N)
df_submission['rank'] = 0
df_submission['sim'] = y_pred_test
df_submission['run_id'] = 'nnet'
df_submission.to_csv(os.path.join(output_dir, 'submission.txt'), header=False, index=False, sep=' ')
df_gold = pd.DataFrame(index=numpy.arange(N), columns=['qid', 'iter', 'docno', 'rel'])
df_gold['qid'] = qids_test
df_gold['iter'] = 0
df_gold['docno'] = numpy.arange(N)
df_gold['rel'] = y_test
df_gold.to_csv(os.path.join(output_dir, 'gold.txt'), header=False, index=False, sep=' ')
subprocess.call("/bin/sh run_eval.sh '{}'".format(output_dir), shell=True)
33.1 0 12 0 0.27250546217 nnet
33.1 0 13 0 0.262122750282 nnet
33.1 0 14 0 0.292897969484 nnet
33.1 0 15 0 0.244421452284 nnet
33.1 0 16 0 0.00145227077883 nnet
33.1 0 17 0 0.264055848122 nnet
33.1 0 18 0 0.235591337085 nnet