Spaces:
Runtime error
Runtime error
""" | |
PWWS | |
======= | |
(Generating Natural Language Adversarial Examples through Probability Weighted Word Saliency) | |
""" | |
from textattack import Attack | |
from textattack.constraints.pre_transformation import ( | |
RepeatModification, | |
StopwordModification, | |
) | |
from textattack.goal_functions import UntargetedClassification | |
from textattack.search_methods import GreedyWordSwapWIR | |
from textattack.transformations import WordSwapWordNet | |
from .attack_recipe import AttackRecipe | |
class PWWSRen2019(AttackRecipe): | |
"""An implementation of Probability Weighted Word Saliency from "Generating | |
Natural Language Adversarial Examples through Probability Weighted Word | |
Saliency", Ren et al., 2019. | |
Words are prioritized for a synonym-swap transformation based on | |
a combination of their saliency score and maximum word-swap effectiveness. | |
Note that this implementation does not include the Named | |
Entity adversarial swap from the original paper, because it requires | |
access to the full dataset and ground truth labels in advance. | |
https://www.aclweb.org/anthology/P19-1103/ | |
""" | |
def build(model_wrapper): | |
transformation = WordSwapWordNet() | |
constraints = [RepeatModification(), StopwordModification()] | |
goal_function = UntargetedClassification(model_wrapper) | |
# search over words based on a combination of their saliency score, and how efficient the WordSwap transform is | |
search_method = GreedyWordSwapWIR("weighted-saliency") | |
return Attack(goal_function, constraints, transformation, search_method) | |