|
""" |
|
|
|
Particle Swarm Optimization |
|
================================== |
|
|
|
(Word-level Textual Adversarial Attacking as Combinatorial Optimization) |
|
|
|
""" |
|
from textattack import Attack |
|
from textattack.constraints.pre_transformation import ( |
|
InputColumnModification, |
|
RepeatModification, |
|
StopwordModification, |
|
) |
|
from textattack.goal_functions import UntargetedClassification |
|
from textattack.search_methods import ParticleSwarmOptimization |
|
from textattack.transformations import WordSwapHowNet |
|
|
|
from .attack_recipe import AttackRecipe |
|
|
|
|
|
class PSOZang2020(AttackRecipe): |
|
"""Zang, Y., Yang, C., Qi, F., Liu, Z., Zhang, M., Liu, Q., & Sun, M. |
|
(2019). |
|
|
|
Word-level Textual Adversarial Attacking as Combinatorial Optimization. |
|
|
|
https://www.aclweb.org/anthology/2020.acl-main.540.pdf |
|
|
|
Methodology description quoted from the paper: |
|
|
|
"We propose a novel word substitution-based textual attack model, which reforms |
|
both the aforementioned two steps. In the first step, we adopt a sememe-based word |
|
substitution strategy, which can generate more candidate adversarial examples with |
|
better semantic preservation. In the second step, we utilize particle swarm optimization |
|
(Eberhart and Kennedy, 1995) as the adversarial example searching algorithm." |
|
|
|
And "Following the settings in Alzantot et al. (2018), we set the max iteration time G to 20." |
|
""" |
|
|
|
@staticmethod |
|
def build(model_wrapper): |
|
|
|
|
|
|
|
transformation = WordSwapHowNet() |
|
|
|
|
|
|
|
constraints = [RepeatModification(), StopwordModification()] |
|
|
|
|
|
|
|
|
|
|
|
input_column_modification = InputColumnModification( |
|
["premise", "hypothesis"], {"premise"} |
|
) |
|
constraints.append(input_column_modification) |
|
|
|
|
|
|
|
goal_function = UntargetedClassification(model_wrapper) |
|
|
|
|
|
|
|
search_method = ParticleSwarmOptimization(pop_size=60, max_iters=20) |
|
|
|
return Attack(goal_function, constraints, transformation, search_method) |
|
|