class_docstr: Align text to audio using CTC segmentation.
  
  Usage:
      Initialize with given ASR model and parameters.
      If needed, parameters for CTC segmentation can be set with ``set_config(·)``.
      Then call the instance as function to align text within an audio file.
  
  Example:
      >>> # example file included in the ESPnet repository
      >>> import soundfile
      >>> speech, fs = soundfile.read("test_utils/ctc_align_test.wav")
      >>> # load an ASR model
      >>> from espnet_model_zoo.downloader import ModelDownloader
      >>> d = ModelDownloader()
      >>> wsjmodel = d.download_and_unpack( "kamo-naoyuki/wsj" )
      >>> # Apply CTC segmentation
      >>> aligner = CTCSegmentation( **wsjmodel )
      >>> text=["utt1 THE SALE OF THE HOTELS", "utt2 ON PROPERTY MANAGEMENT"]
      >>> aligner.set_config( gratis_blank=True )
      >>> segments = aligner( speech, text, fs=fs )
      >>> print( segments )
      utt1 utt 0.27 1.72 -0.1663 THE SALE OF THE HOTELS
      utt2 utt 4.54 6.10 -4.9646 ON PROPERTY MANAGEMENT
  
  On multiprocessing:
      To parallelize the computation with multiprocessing, these three steps
      can be separated:
      (1) ``get_lpz``: obtain the lpz,
      (2) ``prepare_segmentation_task``: prepare the task, and
      (3) ``get_segments``: perform CTC segmentation.
      Note that the function `get_segments` is a staticmethod and therefore
      independent of an already initialized CTCSegmentation object.
  
  References:
      CTC-Segmentation of Large Corpora for German End-to-end Speech Recognition
      2020, Kürzinger, Winkelbauer, Li, Watzel, Rigoll
      https://arxiv.org/abs/2007.09127
  
  More parameters are described in https://github.com/lumaku/ctc-segmentation
docstr: Obtain CTC posterior log probabilities for given speech data.
  
  Args:
      speech: Speech audio input.
  
  Returns:
      lpz: Numpy vector with CTC log posterior probabilities.
docstr_tok: ["Obtain","CTC","posterior","log","probabilities","for","given","speech","data",".","Args",":","speech",":","Speech","audio","input",".","Returns",":","lpz",":","Numpy","vector","with","CTC","log","posterior","probabilities","."]
code: def get_lpz(self, speech: Union[torch.Tensor, np.ndarray]):
      """Obtain CTC posterior log probabilities for given speech data.
  
      Args:
          speech: Speech audio input.
  
      Returns:
          lpz: Numpy vector with CTC log posterior probabilities.
      """
      if isinstance(speech, np.ndarray):
          speech = torch.tensor(speech)
      # data: (Nsamples,) -> (1, Nsamples)
      speech = speech.unsqueeze(0).to(getattr(torch, self.dtype))
      # lengths: (1,)
      lengths = speech.new_full(
          [1], dtype=torch.long, fill_value=speech.size(1)
      )
      batch = {"speech": speech, "speech_lengths": lengths}
      batch = to_device(batch, device=self.device)
      # Encode input
      enc, _ = self.asr_model.encode(**batch)
      assert len(enc) == 1, len(enc)
      # Apply ctc layer to obtain log character probabilities
      lpz = self.ctc.log_softmax(enc).detach()
      #  Shape should be ( <time steps>, <classes> )
      lpz = lpz.squeeze(0).cpu().numpy()
      return lpz
  
imports: import argparse
  import logging
  import sys
  from pathlib import Path
  from typing import List, Optional, TextIO, Union
  import numpy
  import soundfile
  import torch
  from ctc_segmentation import CtcSegmentationParameters, ctc_segmentation, determine_utterance_segments, prepare_text, prepare_token_list
  from typeguard import check_argument_types, check_return_type
  from espnet2.tasks.asr import ASRTask
  from espnet2.torch_utils.device_funcs import to_device
  from espnet2.utils import config_argparse
  from espnet2.utils.types import str2bool, str_or_none
  from espnet.utils.cli_utils import get_commandline_args
label_desc: Use image node_id 5 for calling the CTCSegmentation obj's underlying member method code with example usage: obj.get_lpz(speech) and returns: lpz