class_docstr: Unsupervised ASR model.
  
  The source code is from FAIRSEQ:
  https://github.com/facebookresearch/fairseq/tree/main/examples/wav2vec/unsupervised
code: def __init__(
      self,
      frontend: Optional[AbsFrontend],
      segmenter: Optional[AbsSegmenter],
      generator: AbsGenerator,
      discriminator: AbsDiscriminator,
      losses: Dict[str, AbsUASRLoss],
      kenlm_path: Optional[str],
      token_list: Optional[list],
      max_epoch: Optional[int],
      vocab_size: int,
      cfg: Optional[Dict] = None,
      pad: int = 1,
      sil_token: str = "<SIL>",
      sos_token: str = "<s>",
      eos_token: str = "</s>",
      skip_softmax: str2bool = False,
      use_gumbel: str2bool = False,
      use_hard_gumbel: str2bool = True,
      min_temperature: float = 0.1,
      max_temperature: float = 2.0,
      decay_temperature: float = 0.99995,
      use_collected_training_feats: str2bool = False,
  ):
      assert check_argument_types()
  
      super().__init__()
      # note that eos is the same as sos (equivalent ID)
      self.frontend = frontend
      self.segmenter = segmenter
      self.use_segmenter = True if segmenter is not None else False
      self.generator = generator
      self.discriminator = discriminator
      self.pad = pad
      if cfg is not None:
          cfg = argparse.Namespace(**cfg)
          self.skip_softmax = cfg.no_softmax
          self.use_gumbel = cfg.gumbel
          self.use_hard_gumbel = cfg.hard_gumbel
      else:
          self.skip_softmax = skip_softmax
          self.use_gumbel = use_gumbel
          self.use_hard_gumbel = use_hard_gumbel
  
      self.use_collected_training_feats = use_collected_training_feats
  
      self.min_temperature = min_temperature
      self.max_temperature = max_temperature
      self.decay_temperature = decay_temperature
      self.current_temperature = max_temperature
      self._number_updates = 0
      self._number_epochs = 0
  
      self.max_epoch = max_epoch
      # for loss registration
      self.losses = torch.nn.ModuleDict(losses)
  
      # for validation
      self.vocab_size = vocab_size
      self.token_list = token_list
      self.token_id_converter = TokenIDConverter(token_list=token_list)
      self.sil = self.token_id_converter.tokens2ids([sil_token])[0]
      self.sos = self.token_id_converter.tokens2ids([sos_token])[0]
      self.eos = self.token_id_converter.tokens2ids([eos_token])[0]
  
      self.kenlm = None
      assert (
          kenlm is not None
      ), "kenlm is not installed, please install from tools/installers"
      if kenlm_path:
          self.kenlm = kenlm.Model(kenlm_path)
  
imports: import argparse
  import logging
  from contextlib import contextmanager
  from typing import Dict, Optional, Tuple
  import editdistance
  import torch
  import torch.nn.functional
  from packaging.version import parse
  from typeguard import check_argument_types
  from espnet2.asr.frontend.abs_frontend import AbsFrontend
  from espnet2.text.token_id_converter import TokenIDConverter
  from espnet2.torch_utils.device_funcs import force_gatherable
  from espnet2.train.abs_espnet_model import AbsESPnetModel
  from espnet2.uasr.discriminator.abs_discriminator import AbsDiscriminator
  from espnet2.uasr.generator.abs_generator import AbsGenerator
  from espnet2.uasr.loss.abs_loss import AbsUASRLoss
  from espnet2.uasr.segmenter.abs_segmenter import AbsSegmenter
  from espnet2.utils.types import str2bool
  from espnet.nets.pytorch_backend.nets_utils import make_pad_mask
label_desc: Use image node_id 1 to create a new ESPnetUASRModel object from inherited base classes: AbsESPnetModel with example: obj = ESPnetUASRModel(frontend, segmenter, generator, discriminator, losses, kenlm_path, token_list, max_epoch, vocab_size, cfg, pad, sil_token, sos_token, eos_token, skip_softmax, use_gumbel, use_hard_gumbel, min_temperature, max_temperature, decay_temperature, use_collected_training_feats)