class_docstr: The neural collaborative filtering model used for recommendation.
  
  # Arguments
  user_count: The number of users. Positive int.
  item_count: The number of classes. Positive int.
  class_num: The number of classes. Positive int.
  user_embed: Units of user embedding. Positive int. Default is 20.
  item_embed: itemEmbed Units of item embedding. Positive int. Default is 20.
  hidden_layers: Units of hidden layers for MLP. Tuple of positive int. Default is (40, 20, 10).
  include_mf: Whether to include Matrix Factorization. Boolean. Default is True.
  mf_embed: Units of matrix factorization embedding. Positive int. Default is 20.
code: def build_model(self):
      input = Input(shape=(2,))
      user_flat = Flatten()(Select(1, 0)(input))
      item_flat = Flatten()(Select(1, 1)(input))
      mlp_user_embed = Embedding(
          self.user_count + 1, self.user_embed, init="uniform"
      )(user_flat)
      mlp_item_embed = Embedding(
          self.item_count + 1, self.item_embed, init="uniform"
      )(item_flat)
      mlp_user_flat = Flatten()(mlp_user_embed)
      mlp_item_flat = Flatten()(mlp_item_embed)
      mlp_latent = merge(
          inputs=[mlp_user_flat, mlp_item_flat], mode="concat"
      )
      linear1 = Dense(self.hidden_layers[0], activation="relu")(
          mlp_latent
      )
      mlp_linear = linear1
      for ilayer in range(1, len(self.hidden_layers)):
          linear_mid = Dense(
              self.hidden_layers[ilayer], activation="relu"
          )(mlp_linear)
          mlp_linear = linear_mid
  
      if self.include_mf:
          assert self.mf_embed > 0
          mf_user_embed = Embedding(
              self.user_count + 1, self.mf_embed, init="uniform"
          )(user_flat)
          mf_item_embed = Embedding(
              self.item_count + 1, self.mf_embed, init="uniform"
          )(item_flat)
          mf_user_flatten = Flatten()(mf_user_embed)
          mf_item_flatten = Flatten()(mf_item_embed)
          mf_latent = merge(
              inputs=[mf_user_flatten, mf_item_flatten], mode="mul"
          )
          concated_model = merge(
              inputs=[mlp_linear, mf_latent], mode="concat"
          )
          linear_last = Dense(self.class_num, activation="softmax")(
              concated_model
          )
      else:
          linear_last = Dense(self.class_num, activation="softmax")(
              mlp_linear
          )
      model = Model(input, linear_last)
      return model
  
file_path: analytics-zoo/pyzoo/zoo/models/recommendation/neuralcf.py
imports: import sys
  from zoo.models.common import KerasZooModel
  from zoo.models.recommendation import Recommender
  from zoo.pipeline.api.keras.layers import *
  from zoo.pipeline.api.keras.models import *
  from zoo.common.utils import callZooFunc
label_desc: Use image node_id 2 for calling the NeuralCF obj's underlying member method code with example usage: obj.build_model() and returns: model