class_docstr: Cheng, Minhao, et al.
  
  Seq2Sick: Evaluating the Robustness of Sequence-to-Sequence Models with
  Adversarial Examples
  
  https://arxiv.org/abs/1803.01128
  
  This is a greedy re-implementation of the seq2sick attack method. It does
  not use gradient descent.
code: def build(model_wrapper, goal_function="non_overlapping"):
      #
      # Goal is non-overlapping output.
      #
      goal_function = NonOverlappingOutput(model_wrapper)
      transformation = WordSwapEmbedding(max_candidates=50)
      #
      # Don't modify the same word twice or stopwords
      #
      constraints = [RepeatModification(), StopwordModification()]
      #
      # In these experiments, we hold the maximum difference
      # on edit distance (ϵ) to a constant 30 for each sample.
      #
      constraints.append(LevenshteinEditDistance(30))
      #
      # Greedily swap words with "Word Importance Ranking".
      #
      search_method = GreedyWordSwapWIR(wir_method="unk")
  
      return Attack(
          goal_function, constraints, transformation, search_method
      )
  
file_path: TextAttack/textattack/attack_recipes/seq2sick_cheng_2018_blackbox.py
imports: from textattack import Attack
  from textattack.constraints.overlap import LevenshteinEditDistance
  from textattack.constraints.pre_transformation import RepeatModification, StopwordModification
  from textattack.goal_functions import NonOverlappingOutput
  from textattack.search_methods import GreedyWordSwapWIR
  from textattack.transformations import WordSwapEmbedding
  from .attack_recipe import AttackRecipe
label_desc: Use image node_id 1 for calling the Seq2SickCheng2018BlackBox obj's underlying member method code with example usage: obj.build(model_wrapper, goal_function) and returns: Attack