def compute_f1(a_gold, a_pred):
  """Compute word level F1 score between gold and predicted output."""
  gold_toks = get_tokens(a_gold)
  pred_toks = get_tokens(a_pred)
  common = collections.Counter(gold_toks) & collections.Counter(pred_toks)
  num_same = sum(common.values())
  if (not gold_toks) or (not pred_toks):
    # If either is no-answer, then F1 is 1 if they agree, 0 otherwise
    return int(gold_toks == pred_toks)
  if num_same == 0:
    return 0
  precision = 1.0 * num_same / len(pred_toks)
  recall = 1.0 * num_same / len(gold_toks)
  f1 = (2 * precision * recall) / (precision + recall)
  return f1
Compute word level F1 score between gold and predicted output.
language/bert_extraction/steal_bert_qa/utils/evaluate_squad_2.py