code: def _add_answer_batch_stats(self, m_input, m_labels, **contexts):
      # For BERT, doc_tokens = concatenated tokens from question and document.
      doc_tokens = m_input[0][0]
      ans_list = []
      ans_starts_list = []
      ans_ends_list = []
      for m_labels, tokens, doc_str in zip(
          m_labels,
          doc_tokens,
          contexts[self.DOC_COLUMN],
      ):
          ans, ans_starts, ans_ends = self._unnumberize(
              m_labels, tokens.tolist(), doc_str
          )
          ans_list.append(ans)
          ans_starts_list.append(ans_starts)
          ans_ends_list.append(ans_ends)
  
      return ans_list, ans_starts_list, ans_ends_list
  
imports: import re
  import string
  from typing import Dict, List, Set, Tuple, Union
  import numpy
  from pytext.common.constants import Stage
  from pytext.metric_reporters.channel import Channel, ConsoleChannel, FileChannel
  from pytext.metric_reporters.metric_reporter import MetricReporter
  from pytext.metrics.squad_metrics import SquadMetrics
  from pytext.utils.data import merge_token_labels_to_slot, parse_slot_string, Slot
  from scipy.optimize import linear_sum_assignment
label_desc: Use image node_id 4 for calling the MultiSpanQAMetricReporter obj's underlying member method code with example usage: obj._add_answer_batch_stats(m_input, m_labels) and returns: ans_list,  ans_starts_list,  ans_ends_list