code: def call(self, inputs, training=False):
      (
          i_user_id,
          i_item_id,
          i_user_rating,
          i_user_review,
          i_user_num_reviews,
          i_item_rating,
          i_item_review,
          i_item_num_reviews,
      ) = inputs
      user_review_h = self.user_text_processor(
          self.l_user_review_embedding(i_user_review), training=training
      )
      item_review_h = self.item_text_processor(
          self.l_item_review_embedding(i_item_review), training=training
      )
      user_rating_h = self.l_user_mlp(i_user_rating)
      item_rating_h = self.l_item_mlp(i_item_rating)
      a_user = self.a_user(
          tf.multiply(user_review_h, tf.expand_dims(user_rating_h, 1))
      )
      a_user_masking = tf.expand_dims(
          tf.sequence_mask(
              tf.reshape(i_user_num_reviews, [-1]),
              maxlen=i_user_review.shape[1],
          ),
          -1,
      )
      user_attention = self.user_attention(a_user, a_user_masking)
      a_item = self.a_item(
          tf.multiply(item_review_h, tf.expand_dims(item_rating_h, 1))
      )
      a_item_masking = tf.expand_dims(
          tf.sequence_mask(
              tf.reshape(i_item_num_reviews, [-1]),
              maxlen=i_item_review.shape[1],
          ),
          -1,
      )
      item_attention = self.item_attention(a_item, a_item_masking)
      ou = tf.multiply(user_attention, user_review_h)
      ou = tf.reduce_sum(ou, 1)
      if training:
          ou = self.ou_dropout(ou, training=training)
      ou = self.ou(ou)
      oi = tf.multiply(item_attention, item_review_h)
      oi = tf.reduce_sum(oi, 1)
      if training:
          oi = self.oi_dropout(oi, training=training)
      oi = self.oi(oi)
      pu = tf.concat(
          [user_rating_h, ou, self.l_user_embedding(i_user_id)], axis=-1
      )
      qi = tf.concat(
          [item_rating_h, oi, self.l_item_embedding(i_item_id)], axis=-1
      )
      h0 = tf.multiply(pu, qi)
      r = self.add_global_bias(
          tf.add_n(
              [
                  self.W1(h0),
                  self.user_bias(i_user_id),
                  self.item_bias(i_item_id),
              ]
          )
      )
      return r
  
file_path: cornac/cornac/models/hrdr/hrdr.py
imports: import numpy
  import tensorflow
  from tensorflow import keras
  from tensorflow.keras import layers, initializers
  from tensorflow.python.keras.preprocessing.sequence import pad_sequences
  from ...utils import get_rng
  from ...utils.init_utils import uniform
  from ..narre.narre import TextProcessor, AddGlobalBias
label_desc: Use image node_id 2 for calling the Model obj's underlying member method code with example usage: obj.call(inputs, training) and returns: r