@register_metric("rank_response")
def rank_response(y_true, y_pred):
num_examples = float(len(y_pred))
predictions = np.array(y_pred)
predictions = np.flip(np.argsort(predictions, -1), -1)
rank_tot = 0
for el in predictions:
for i, x in enumerate(el):
if x == 0:
rank_tot += i
break
return float(rank_tot)/num_examples
@register_metric("r@1_insQA")
def r_at_1_insQA(y_true, y_pred):
return recall_at_k_insQA(y_true, y_pred, k=1)