class_docstr: FISM is an item-based model for generating top-N recommendations that learns the
  item-item similarity matrix as the product of two low dimensional latent factor matrices.
  These matrices are learned using a structural equation modeling approach, where in the
  value being estimated is not used for its own estimation.
class_docstr_tok: ["FISM","is","an","item-based","model","for","generating","top-N","recommendations","that","learns","the","item-item","similarity","matrix","as","the","product","of","two","low","dimensional","latent","factor","matrices",".","These","matrices","are","learned","using","a","structural","equation","modeling","approach",",","where","in","the","value","being","estimated","is","not","used","for","its","own","estimation","."]
code: def __init__(self, config, dataset):
      super(FISM, self).__init__(config, dataset)
  
      # load dataset info
      self.LABEL = config["LABEL_FIELD"]
      # get all users' history interaction information.the history item
      # matrix is padding by the maximum number of a user's interactions
      (
          self.history_item_matrix,
          self.history_lens,
          self.mask_mat,
      ) = self.get_history_info(dataset)
  
      # load parameters info
      self.embedding_size = config["embedding_size"]
      self.reg_weights = config["reg_weights"]
      self.alpha = config["alpha"]
      self.split_to = config["split_to"]
  
      # split the too large dataset into the specified pieces
      if self.split_to > 0:
          self.group = torch.chunk(
              torch.arange(self.n_items).to(self.device), self.split_to
          )
      else:
          self.logger.warning(
              "Pay Attetion!! the `split_to` is set to 0. If you catch a OMM error in this case, "
              + "you need to increase it \n\t\t\tuntil the error disappears. For example, "
              + "you can append it in the command line such as `--split_to=5`"
          )
  
      # define layers and loss
      # construct source and destination item embedding matrix
      self.item_src_embedding = nn.Embedding(
          self.n_items, self.embedding_size, padding_idx=0
      )
      self.item_dst_embedding = nn.Embedding(
          self.n_items, self.embedding_size, padding_idx=0
      )
      self.user_bias = nn.Parameter(torch.zeros(self.n_users))
      self.item_bias = nn.Parameter(torch.zeros(self.n_items))
      self.bceloss = nn.BCEWithLogitsLoss()
  
      # parameters initialization
      self.apply(self._init_weights)
  
file_path: RecBole/recbole/model/general_recommender/fism.py
imports: import torch
  import torch.nn
  from torch.nn.init import normal_
  from recbole.model.abstract_recommender import GeneralRecommender
  from recbole.utils import InputType
label_desc: Use image node_id 1 to create a new FISM object from inherited base classes: GeneralRecommender with example: obj = FISM(config, dataset)