class_docstr: Task class for text sequence to sequence.
class_docstr_tok: ["Task","class","for","text","sequence","to","sequence","."]
docstr: Get shapes for feature.
docstr_tok: ["Get","shapes","for","feature","."]
code: def feature_spec(self):
      """Get shapes for feature."""
      if not self.infer_without_label:
          feature_shapes = [
              (
                  tf.TensorShape([tf.Dimension(None)]),
                  tf.TensorShape([]),
                  tf.TensorShape([tf.Dimension(None)]),
                  tf.TensorShape([]),
              )
          ]
          feature_shapes.append(tf.TensorShape([tf.Dimension(None)]))
      else:
          feature_shapes = [
              (tf.TensorShape([tf.Dimension(None)]), tf.TensorShape([]))
          ]
      if len(feature_shapes) == 1:
          return feature_shapes[0]
      return tuple(feature_shapes)
  
imports: import collections
  import os
  import delta.compat
  from absl import logging
  from delta import utils
  from delta.data.preprocess.text_ops import tokenize_sentence
  from delta.data.preprocess.utils import load_vocab_dict
  from delta.data.task.base_text_task import TextTask
  from delta.data.preprocess.text_ops import load_textline_dataset
  from delta.data.utils.common_utils import get_file_len
  from delta.layers.utils import compute_sen_lens
  from delta.utils.register import registers
label_desc: Use image node_id 6 for calling the TextS2STask obj's underlying member method code with example usage: obj.feature_spec() and returns: tuple, feature_shapes