Spaces:
Runtime error
Runtime error
| """ | |
| Improved Genetic Algorithm | |
| ============================= | |
| (Natural Language Adversarial Attacks and Defenses in Word Level) | |
| """ | |
| from textattack import Attack | |
| from textattack.constraints.overlap import MaxWordsPerturbed | |
| from textattack.constraints.pre_transformation import StopwordModification | |
| from textattack.constraints.semantics import WordEmbeddingDistance | |
| from textattack.goal_functions import UntargetedClassification | |
| from textattack.search_methods import ImprovedGeneticAlgorithm | |
| from textattack.transformations import WordSwapEmbedding | |
| from .attack_recipe import AttackRecipe | |
| class IGAWang2019(AttackRecipe): | |
| """Xiaosen Wang, Hao Jin, Kun He (2019). | |
| Natural Language Adversarial Attack and Defense in Word Level. | |
| http://arxiv.org/abs/1909.06723 | |
| """ | |
| def build(model_wrapper): | |
| # | |
| # Swap words with their embedding nearest-neighbors. | |
| # Embedding: Counter-fitted Paragram Embeddings. | |
| # Fix the hyperparameter value to N = Unrestricted (50)." | |
| # | |
| transformation = WordSwapEmbedding(max_candidates=50) | |
| # | |
| # Don't modify the stopwords | |
| # | |
| constraints = [StopwordModification()] | |
| # | |
| # Maximum words perturbed percentage of 20% | |
| # | |
| constraints.append(MaxWordsPerturbed(max_percent=0.2)) | |
| # | |
| # Maximum word embedding euclidean distance δ of 0.5. | |
| # | |
| constraints.append( | |
| WordEmbeddingDistance(max_mse_dist=0.5, compare_against_original=False) | |
| ) | |
| # | |
| # Goal is untargeted classification | |
| # | |
| goal_function = UntargetedClassification(model_wrapper) | |
| # | |
| # Perform word substitution with an improved genetic algorithm. | |
| # Fix the hyperparameter values to S = 60, M = 20, λ = 5." | |
| # | |
| search_method = ImprovedGeneticAlgorithm( | |
| pop_size=60, | |
| max_iters=20, | |
| max_replace_times_per_index=5, | |
| post_crossover_check=False, | |
| ) | |
| return Attack(goal_function, constraints, transformation, search_method) | |