code: def bleu_metric(self, data, eval_dial_list=None):
      gen, truth = [], []
      for row in data:
          if (
              eval_dial_list
              and row["dial_id"] + ".json" not in eval_dial_list
          ):
              continue
          gen.append(row["resp_gen"])
          truth.append(row["resp"])
      wrap_generated = [[_] for _ in gen]
      wrap_truth = [[_] for _ in truth]
      if gen and truth:
          sc = self.bleu_scorer.score(zip(wrap_generated, wrap_truth))
      else:
          sc = 0.0
      return sc
  
imports: import math, logging, copy, json
  from collections import Counter, OrderedDict
  from nltk.util import ngrams
  from .None import ontology
  from .clean_dataset import clean_slot_values
label_desc: Use image node_id 8 for calling the MultiWozEvaluator obj's underlying member method code with example usage: obj.bleu_metric(data, eval_dial_list) and returns: sc