code: def __init__(
      self,
      vocabulary_size: int,
      embedding_size: int,
      dropout_rate: float,
      subtoken_combination_kind: str,
      use_dense_output: bool = True,
  ):
      super().__init__()
      assert subtoken_combination_kind in {"mean", "max", "sum"}
      self.__subtoken_combination_kind = subtoken_combination_kind
      self.__embeddings = nn.Embedding(
          num_embeddings=vocabulary_size, embedding_dim=embedding_size
      )
      nn.init.uniform_(self.__embeddings.weight)
      if use_dense_output:
          self.__out_layer = nn.Linear(
              embedding_size, embedding_size, bias=False
          )
          nn.init.xavier_uniform_(self.__out_layer.weight)
      else:
          self.__out_layer = None
  
      self.__dropout_layer = nn.Dropout(p=dropout_rate)
  
imports: from typing_extensions import Final, Literal
  import logging
  import math
  import numpy
  import torch
  import torch.nn
  from dpu_utils.codeutils import split_identifier_into_parts
  from dpu_utils.mlutils import BpeVocabulary, CharTensorizer, Vocabulary
  from typing import Any, Counter, Dict, List, NamedTuple, Optional, Union
  from ptgnn.baseneuralmodel import AbstractNeuralModel
  from ptgnn.neuralmodels.gnn.structs import AbstractNodeEmbedder
label_desc: Use image node_id 1 to create a new SubtokenUnitEmbedder object from inherited base classes: nn with example: obj = SubtokenUnitEmbedder(vocabulary_size, embedding_size, dropout_rate, subtoken_combination_kind, use_dense_output)