File size: 1,540 Bytes
4943752 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
"""
AttackCommand class
===========================
"""
from argparse import ArgumentDefaultsHelpFormatter, ArgumentParser
from textattack import Attacker, CommandLineAttackArgs, DatasetArgs, ModelArgs
from textattack.commands import TextAttackCommand
class AttackCommand(TextAttackCommand):
"""The TextAttack attack module:
A command line parser to run an attack from user specifications.
"""
def run(self, args):
attack_args = CommandLineAttackArgs(**vars(args))
dataset = DatasetArgs._create_dataset_from_args(attack_args)
if attack_args.interactive:
model_wrapper = ModelArgs._create_model_from_args(attack_args)
attack = CommandLineAttackArgs._create_attack_from_args(
attack_args, model_wrapper
)
Attacker.attack_interactive(attack)
else:
model_wrapper = ModelArgs._create_model_from_args(attack_args)
attack = CommandLineAttackArgs._create_attack_from_args(
attack_args, model_wrapper
)
attacker = Attacker(attack, dataset, attack_args)
attacker.attack_dataset()
@staticmethod
def register_subcommand(main_parser: ArgumentParser):
parser = main_parser.add_parser(
"attack",
help="run an attack on an NLP model",
formatter_class=ArgumentDefaultsHelpFormatter,
)
parser = CommandLineAttackArgs._add_parser_args(parser)
parser.set_defaults(func=AttackCommand())
|