def compute_metrics(sess, logits_op, placeholders, data_file, exporter=None):
"""Compute metrics MAP and MRR over a dataset.
:param sess: TensorFlow session
:param logits_op: an operation that returns the scores for a given set of
sentences
:param placeholders: placeholders defined for `logits_op`
:data_file: a HDF5 file object holding the dataset
:returns: the values of MAP and MRR as a tuple: (MAP, MRR)
"""
questions_ph, sentences_ph, keep_prob_ph = placeholders
if exporter is None:
exporter = dataio.no_op()
next(exporter) # priming the coroutine
total_avep = 0.0
total_mrr = 0.0
n_questions = 0
for batch in dataio.question_batches(data_file):
feed_dict = {
questions_ph: batch.questions,
sentences_ph: batch.sentences,
keep_prob_ph: 1.0
}
scores = logits_op.eval(session=sess, feed_dict=feed_dict)
exporter.send(scores)
n_questions += 1
avep = average_precision(batch.labels, scores)
total_avep += avep
mrr = mean_reciprocal_rank(batch.labels, scores)
total_mrr += mrr
exporter.close()
mean_avep = total_avep / n_questions
mean_mrr = total_mrr / n_questions
return mean_avep, mean_mrr
评论列表
文章目录