class_docstr: bilstmcrf class for sequence labeling.
code: def call(self, inputs, training=None, mask=None):
      input_x = inputs["input_x"]
      # [batch_size, max_len]
      input_x_lens = compute_sen_lens(
          input_x, padding_token=self.padding_token
      )
      # [batch_size, max_len, 1]
      mask = tf.expand_dims(
          tf.sequence_mask(
              input_x_lens, self.max_len, dtype=tf.float32
          ),
          axis=-1,
      )
      # [batch_size, max_len, embed_len]
      out = self.embed(input_x)
      # [batch_size, features]
      out = self.embed_dropout(out, training=training)
      out = self.bi_rnn(out)
      intent_out = self.attention(out, mask=mask)
      intent_out = self.dropout(intent_out)
      intent_out = self.intent_dense(intent_out)
      intent_out = tf.identity(intent_out, name="intent_logits")
      slots_out = self.dropout(out)
      slots_out = self.slots_dense(slots_out)
      slots_out = tf.identity(slots_out, name="slots_logits")
      return intent_out, slots_out
  
file_path: delta/delta/models/text_nlu_joint_model.py
imports: import pickle
  import delta.compat
  from absl import logging
  import delta.utils
  from delta.layers.recurrent import BiRnn
  from delta.layers.attention import HanAttention
  from delta.layers.utils import compute_sen_lens
  from delta.models.text_cls_model import TextClassModel
  from delta.utils.register import registers
label_desc: Use image node_id 2 for calling the JointBilstmCrfModel obj's underlying member method code with example usage: obj.call(inputs, training, mask) and returns: intent_out,  slots_out