code: def _get_idf(self, references: List[List[str]]):
      self.refs = [
          _multiprocess_batch_extract_n_grams(
              r,
              n=self.n,
              n_workers=self.n_workers,
              verbose=self.verbose,
          )
          for r in references
      ]
      for cur_refs in zip(*self.refs):
          for ngram in set(
              ngram for r in cur_refs for ngram, c in r.items()
          ):
              self.doc_freq[ngram] += 1
  
file_path: vizseq/vizseq/scorers/_cider/__init__.py
imports: from typing import List, Dict, Tuple
  from collections import defaultdict
  import math
  from concurrent.futures import ProcessPoolExecutor, as_completed
  import numpy
  from tqdm import tqdm
label_desc: Use image node_id 4 for calling the _CIDErScorer obj's underlying member method code with example usage: obj._get_idf(references) without return types