class_docstr: Base class for seq2seq models with embeddings
    
code: def _build(self, features, labels, params):
      # Pre-process features and labels
      features, labels = self._preprocess(features, labels)
  
      encoder_output = self.encode(features, labels)
      (
          decoder_output,
          _,
      ) = self.decode(encoder_output, features, labels)
  
      if self.mode == tf.contrib.learn.ModeKeys.INFER:
          predictions = self._create_predictions(
              decoder_output=decoder_output,
              features=features,
              labels=labels,
          )
          loss = None
          train_op = None
      else:
          losses, loss = self.compute_loss(
              decoder_output, features, labels
          )
  
          train_op = None
          if self.mode == tf.contrib.learn.ModeKeys.TRAIN:
              train_op = self._build_train_op(loss)
  
          predictions = self._create_predictions(
              decoder_output=decoder_output,
              features=features,
              labels=labels,
              losses=losses,
          )
  
      # We add "useful" tensors to the graph collection so that we
      # can easly find them in our hooks/monitors.
      graph_utils.add_dict_to_collection(predictions, "predictions")
  
      return predictions, loss, train_op
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  from __future__ import unicode_literals
  import collections
  import tensorflow
  from seq2seq import graph_utils
  from seq2seq import losses
  from seq2seq.contrib.seq2seq.decoder import _transpose_batch_time
  from seq2seq.data import vocab
  from seq2seq.graph_utils import templatemethod
  from seq2seq.decoders.beam_search_decoder import BeamSearchDecoder
  from seq2seq.inference import beam_search
  from seq2seq.models.model_base import ModelBase, _flatten_dict
label_desc: Use image node_id 14 for calling the Seq2SeqModel obj's underlying member method code with example usage: obj._build(features, labels, params) and returns: predictions,  loss,  train_op