docstr: Computes f1 score between prediction and ground truth 
docstr_tok: ["Computes","f1","score","between","prediction","and","ground","truth"]
code: def get_one_f1(prediction: str, ground_truth: str):
      """Computes f1 score between prediction and ground truth"""
  
      prediction_tokens = QAMetrics._get_normalized_tokens(prediction)
      ground_truth_tokens = QAMetrics._get_normalized_tokens(
          ground_truth
      )
      common = collections.Counter(
          prediction_tokens
      ) & collections.Counter(ground_truth_tokens)
      num_same = sum(common.values())
  
      # If either is no-answer, then F1 is 1 if they agree, 0 otherwise
      if len(ground_truth_tokens) == 0 or len(prediction_tokens) == 0:
          return int(ground_truth_tokens == prediction_tokens)
      if num_same == 0:
          return 0
  
      precision = 1.0 * num_same / len(prediction_tokens)
      recall = 1.0 * num_same / len(ground_truth_tokens)
      f1 = (2 * precision * recall) / (precision + recall)
  
      return f1
  
imports: import collections
  import json
  import re
  import string
  import torch
  from tqdm import tqdm
  from nemo.collections.nlp.parts.utils_funcs import tensor2list
  from nemo.utils import logging
label_desc: Use image node_id 6 for calling the QAMetrics obj's underlying member method code with example usage: obj.get_one_f1(prediction, ground_truth) and returns: f1, int, int