code: def _add_decoded_answer_batch_stats(self, m_input, preds, **contexts):
      # For BERT, doc_tokens = concatenated tokens from question and document.
      doc_tokens = m_input[0]
      starts, ends, _ = preds
      pred_answers, pred_starts, pred_ends = list(
          zip(
              *[
                  self._unnumberize(
                      start, end, tokens.tolist(), doc_str
                  )
                  for tokens, start, end, doc_str in zip(
                      doc_tokens,
                      starts,
                      ends,
                      contexts[self.DOC_COLUMN],
                  )
              ]
          )
      )
      self.aggregate_data(self.all_start_pos_preds, list(pred_starts))
      self.aggregate_data(self.all_end_pos_preds, list(pred_ends))
      self.aggregate_data(self.all_pred_answers, list(pred_answers))
  
imports: import re
  import string
  from collections import Counter
  from itertools import zip_longest
  from typing import Dict, List
  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 import compute_classification_metrics, LabelPrediction
  from pytext.metrics.squad_metrics import SquadMetrics
label_desc: Use image node_id 4 for calling the SquadMetricReporter obj's underlying member method code with example usage: obj._add_decoded_answer_batch_stats(m_input, preds) without return types