class_docstr: Processes the output of both `SparseArch` (sparse_features) and `DenseArch`
  (dense_features). Returns the output of the nn.transformerencoder,
  that takes the combined values of both sparse features and the output of the dense layer,
  and the dense layer itself (i.e. concat(dense layer output, transformer encoder output).
  Note: This model is for benchmarking purposes only, i.e. to measure the performance of transformer + embeddings using the dlrm models.
  It is not intended to increase model convergence metrics.
  Implemented TE as described here:
  https://pytorch.org/docs/stable/generated/torch.nn.TransformerEncoder.html?highlight=transformer+encoder#torch.nn.TransformerEncoder
  BERT Transformer Paper: https://arxiv.org/abs/1810.04805
  Attention is All you Need: https://arxiv.org/abs/1706.03762
  
  
  .. note::
      The dimensionality of the `dense_features` (D) is expected to match the
      dimensionality of the `sparse_features` so that the dot products between them
      can be computed.
  Args:
      num_sparse_features (int): F.
      embedding_dim: int,
      nhead: int, #number of attention heads
      ntransformer_layers: int, #number of transformer layers.
  Example::
      D = 8   #must divisible by number of transformer heads
      B = 10
      keys = ["f1", "f2"]
      F = len(keys)
      inter_arch = InteractionTransormerArch(num_sparse_features=len(keys))
      dense_features = torch.rand((B, D))
      sparse_features = torch.rand((B, F, D))
      #  B X (D * (F + 1))
      concat_dense = inter_arch(dense_features, sparse_features)
code: def __init__(
      self,
      num_sparse_features: int,
      embedding_dim: int,
      nhead: int = 8,
      ntransformer_layers: int = 4,
  ) -> None:
      super().__init__()
      self.F: int = num_sparse_features
      self.nhead = nhead
      self.ntransformer_layers = ntransformer_layers
      transformer_encoder_layer = nn.TransformerEncoderLayer(
          d_model=embedding_dim,
          nhead=self.nhead,
      )
      self.interarch_TE = nn.TransformerEncoder(
          transformer_encoder_layer, num_layers=self.ntransformer_layers
      )
  
file_path: torchrec/torchrec/models/experimental/transformerdlrm.py
imports: from typing import List, Optional
  import torch
  from torch import nn
  from torchrec.models.dlrm import DLRM, OverArch
  from torchrec.modules.embedding_modules import EmbeddingBagCollection
label_desc: Use image node_id 1 to create a new InteractionTransformerArch object from inherited base classes: nn with example: obj = InteractionTransformerArch(num_sparse_features, embedding_dim, nhead, ntransformer_layers)