class_docstr: This ``SpanConstituencyParser`` simply encodes a sequence of text
  with a stacked ``Seq2SeqEncoder``, extracts span representations using a
  ``SpanExtractor``, and then predicts a label for each span in the sequence.
  These labels are non-terminal nodes in a constituency parse tree, which we then
  greedily reconstruct.
  
  Parameters
  ----------
  vocab : ``Vocabulary``, required
      A Vocabulary, required in order to compute sizes for input/output projections.
  text_field_embedder : ``TextFieldEmbedder``, required
      Used to embed the ``tokens`` ``TextField`` we get as input to the model.
  span_extractor : ``SpanExtractor``, required.
      The method used to extract the spans from the encoded sequence.
  encoder : ``Seq2SeqEncoder``, required.
      The encoder that we will use in between embedding tokens and
      generating span representations.
  feedforward : ``FeedForward``, required.
      The FeedForward layer that we will use in between the encoder and the linear
      projection to a distribution over span labels.
  pos_tag_embedding : ``Embedding``, optional.
      Used to embed the ``pos_tags`` ``SequenceLabelField`` we get as input to the model.
  initializer : ``InitializerApplicator``, optional (default=``InitializerApplicator()``)
      Used to initialize the model parameters.
  regularizer : ``RegularizerApplicator``, optional (default=``None``)
      If provided, will be used to calculate the regularization penalty during training.
  evalb_directory_path : ``str``, optional (default=``DEFAULT_EVALB_DIR``)
      The path to the directory containing the EVALB executable used to score
      bracketed parses. By default, will use the EVALB included with allennlp,
      which is located at allennlp/tools/EVALB . If ``None``, EVALB scoring
      is not used.
class_docstr_tok: ["This","``","SpanConstituencyParser","``","simply","encodes","a","sequence","of","text","with","a","stacked","``","Seq2SeqEncoder","``",",","extracts","span","representations","using","a","``","SpanExtractor","``",",","and","then","predicts","a","label","for","each","span","in","the","sequence",".","These","labels","are","non-terminal","nodes","in","a","constituency","parse","tree",",","which","we","then","greedily","reconstruct",".","Parameters","--","--","--","--","--","vocab",":","``","Vocabulary","``",",","required","A","Vocabulary",",","required","in","order","to","compute","sizes","for","input\/output","projections",".","text_field_embedder",":","``","TextFieldEmbedder","``",",","required","Used","to","embed","the","``","tokens","``","``","TextField","``","we","get","as","input","to","the","model",".","span_extractor",":","``","SpanExtractor","``",",","required",".","The","method","used","to","extract","the","spans","from","the","encoded","sequence",".","encoder",":","``","Seq2SeqEncoder","``",",","required",".","The","encoder","that","we","will","use","in","between","embedding","tokens","and","generating","span","representations",".","feedforward",":","``","FeedForward","``",",","required",".","The","FeedForward","layer","that","we","will","use","in","between","the","encoder","and","the","linear","projection","to","a","distribution","over","span","labels",".","pos_tag_embedding",":","``","Embedding","``",",","optional",".","Used","to","embed","the","``","pos_tags","``","``","SequenceLabelField","``","we","get","as","input","to","the","model",".","initializer",":","``","InitializerApplicator","``",",","optional","(","default=","``","InitializerApplicator","(",")","``",")","Used","to","initialize","the","model","parameters",".","regularizer",":","``","RegularizerApplicator","``",",","optional","(","default=","``","None","``",")","If","provided",",","will","be","used","to","calculate","the","regularization","penalty","during","training",".","evalb_directory_path",":","``","str","``",",","optional","(","default=","``","DEFAULT_EVALB_DIR","``",")","The","path","to","the","directory","containing","the","EVALB","executable","used","to","score","bracketed","parses",".","By","default",",","will","use","the","EVALB","included","with","allennlp",",","which","is","located","at","allennlp\/tools\/EVALB",".","If","``","None","``",",","EVALB","scoring","is","not","used","."]
docstr: Constructs an NLTK ``Tree`` given the scored spans. We also switch to exclusive
  span ends when constructing the tree representation, because it makes indexing
  into lists cleaner for ranges of text, rather than individual indices.
  
  Finally, for batch prediction, we will have padded spans and class probabilities.
  In order to make this less confusing, we remove all the padded spans and
  distributions from ``spans`` and ``class_probabilities`` respectively.
docstr_tok: ["Constructs","an","NLTK","``","Tree","``","given","the","scored","spans",".","We","also","switch","to","exclusive","span","ends","when","constructing","the","tree","representation",",","because","it","makes","indexing","into","lists","cleaner","for","ranges","of","text",",","rather","than","individual","indices",".","Finally",",","for","batch","prediction",",","we","will","have","padded","spans","and","class","probabilities",".","In","order","to","make","this","less","confusing",",","we","remove","all","the","padded","spans","and","distributions","from","``","spans","``","and","``","class_probabilities","``","respectively","."]
code: def decode(self, output_dict):
      """
      Constructs an NLTK ``Tree`` given the scored spans. We also switch to exclusive
      span ends when constructing the tree representation, because it makes indexing
      into lists cleaner for ranges of text, rather than individual indices.
  
      Finally, for batch prediction, we will have padded spans and class probabilities.
      In order to make this less confusing, we remove all the padded spans and
      distributions from ``spans`` and ``class_probabilities`` respectively.
      """
      all_predictions = output_dict["class_probabilities"].cpu().data
      all_spans = output_dict["spans"].cpu().data
  
      all_sentences = output_dict["tokens"]
      all_pos_tags = (
          output_dict["pos_tags"]
          if all(output_dict["pos_tags"])
          else None
      )
      num_spans = output_dict["num_spans"].data
      trees = self.construct_trees(
          all_predictions,
          all_spans,
          num_spans,
          all_sentences,
          all_pos_tags,
      )
  
      batch_size = all_predictions.size(0)
      output_dict["spans"] = [
          all_spans[i, : num_spans[i]] for i in range(batch_size)
      ]
      output_dict["class_probabilities"] = [
          all_predictions[i, : num_spans[i], :]
          for i in range(batch_size)
      ]
  
      output_dict["trees"] = trees
      return output_dict
  
imports: from __future__ import absolute_import
  import torch
  from torch.nn.modules.linear import Linear
  from nltk import Tree
  from allennlp.common.checks import check_dimensions_match
  from allennlp.data import Vocabulary
  from allennlp.modules import Seq2SeqEncoder, TimeDistributed, TextFieldEmbedder, FeedForward
  from allennlp.modules.token_embedders import Embedding
  from allennlp.modules.span_extractors.span_extractor import SpanExtractor
  from allennlp.models.model import Model
  from allennlp.nn import InitializerApplicator, RegularizerApplicator
  from allennlp.nn.util import get_text_field_mask, sequence_cross_entropy_with_logits
  from allennlp.nn.util import last_dim_softmax, get_lengths_from_binary_sequence_mask
  from allennlp.training.metrics import CategoricalAccuracy
  from allennlp.training.metrics import EvalbBracketingScorer, DEFAULT_EVALB_DIR
  from allennlp.common.checks import ConfigurationError
label_desc: Use image node_id 3 for calling the SpanConstituencyParser obj's underlying member method code with example usage: obj.decode(output_dict) and returns: output_dict