class_docstr: kws solver
class_docstr_tok: ["kws","solver"]
code: def process_config(self, config):
      data_conf = config["data"]
      class_vocab = data_conf["task"]["classes"]["vocab"]
      assert len(class_vocab) == data_conf["task"]["classes"]["num"]
  
      # add revere_vocab, positive_id
      reverse_vocab = {val: key for key, val in class_vocab.items()}
      data_conf["task"]["classes"]["reverse_vocab"] = reverse_vocab
  
      # add feature shape, without batch_size
      feat_dim = data_conf["task"]["audio"]["feat_dim"]
      if data_conf["task"]["audio"]["splice_frame"]:
          feat_dim = feat_dim * (
              data_conf["task"]["audio"]["left_context"]
              + 1
              + data_conf["task"]["audio"]["right_context"]
          )
      final_feat_dim = feat_dim * (
          data_conf["task"]["audio"]["delta_order"] + 1
      )
      window_len = data_conf["task"]["audio"]["window_len"]
      feature_shape = [window_len, final_feat_dim]
      data_conf["task"]["audio"]["feature_shape"] = feature_shape
      return config
  
file_path: delta/delta/utils/solver/kws_solver.py
imports: import delta.compat
  from delta.utils import metrics
  from delta.utils.register import registers
  from delta.utils.solver.estimator_solver import EstimatorSolver
label_desc: Use image node_id 2 for calling the KwsSolver obj's underlying member method code with example usage: obj.process_config(config) and returns: config