Spaces:
Runtime error
Runtime error
| """ | |
| Seq2Sick | |
| ================================================ | |
| (Seq2Sick: Evaluating the Robustness of Sequence-to-Sequence Models with Adversarial Examples) | |
| """ | |
| 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 | |
| class Seq2SickCheng2018BlackBox(AttackRecipe): | |
| """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. | |
| """ | |
| 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) | |