code: def get_batch(sentences,
                    token_dict,
                    ignore_case=False,
                    unk_index=1,
                    eos_index=2):
          
          batch_size = len(sentences)
          max_sentence_len = max(map(len, sentences))
          inputs = [[0] * max_sentence_len for _ in range(batch_size)]
          outputs_forward = [[0] * max_sentence_len for _ in range(batch_size)]
          outputs_backward = [[0] * max_sentence_len for _ in range(batch_size)]
          for i, sentence in enumerate(sentences):
              outputs_forward[i][len(sentence) - 1] = eos_index
              outputs_backward[i][0] = eos_index
              for j, token in enumerate(sentence):
                  if ignore_case:
                      index = token_dict.get(token.lower(), unk_index)
                  else:
                      index = token_dict.get(token, unk_index)
                  inputs[i][j] = index
                  if j - 1 >= 0:
                      outputs_forward[i][j - 1] = index
                  if j + 1 < len(sentence):
                      outputs_backward[i][j + 1] = index
          outputs_forward = np.expand_dims(np.asarray(outputs_forward), axis=-1)
          outputs_backward = np.expand_dims(np.asarray(outputs_backward), axis=-1)
          return np.asarray(inputs), [outputs_forward, outputs_backward]
docs: Get a batch of inputs and outputs from given sentences.
  
          :param sentences: A list of list of tokens.
          :param token_dict: The dict that maps a token to an integer. `<UNK>` and `<EOS>` should be preserved.
          :param ignore_case: Whether ignoring the case of the token.
          :param unk_index: The index for unknown token.
          :param eos_index: The index for ending of sentence.
  
          :return inputs, outputs: The inputs and outputs of the batch.