class_docstr: This is a classification model that selects the best heteronym option out of possible dictionary entries.
  Supports only heteronyms, no OOV.
code: def make_step(self, batch):
      logits = self.forward(
          input_ids=batch["input_ids"],
          attention_mask=batch["attention_mask"],
          token_type_ids=torch.zeros_like(batch["input_ids"]),
      )
  
      if "targets" in batch:
          loss = self.loss(logits=logits, labels=batch["targets"])
      else:
          # skip loss calculation for inference
          loss = None
      return loss, logits
  
imports: import json
  import os
  from typing import List, Optional
  import torch
  from hydra.utils import instantiate
  from omegaconf import DictConfig
  from pytorch_lightning import Trainer
  from nemo.collections.common.losses import CrossEntropyLoss
  from nemo.collections.nlp.metrics.classification_report import ClassificationReport
  from nemo.collections.nlp.modules.common import TokenClassifier
  from nemo.collections.nlp.parts.utils_funcs import tensor2list
  from nemo.collections.tts.g2p.data.heteronym_classification import HeteronymClassificationDataset
  from nemo.collections.tts.g2p.utils import get_heteronym_spans, get_wordid_to_phonemes, read_wordids
  from nemo.core.classes.common import PretrainedModelInfo
  from nemo.utils import logging
label_desc: Use image node_id 3 for calling the HeteronymClassificationModel obj's underlying member method code with example usage: obj.make_step(batch) and returns: loss,  logits