from textattack import Attack as TAAttack
from textattack.constraints.overlap import LevenshteinEditDistance
from textattack.constraints.pre_transformation import (
RepeatModification,
StopwordModification,
)
from textattack.goal_functions import UntargetedClassification
from textattack.search_methods import GreedyWordSwapWIR
from textattack.transformations import (
CompositeTransformation,
WordSwapNeighboringCharacterSwap,
WordSwapRandomCharacterDeletion,
WordSwapRandomCharacterInsertion,
WordSwapRandomCharacterSubstitution,
)
from abs_text_attack.core.interfaces import Attack
[документация]
class DeepWordBug(Attack):
[документация]
@staticmethod
def build(model_wrapper, kwargs = {}):
if kwargs.get("use_all_transformations", True):
transformation = CompositeTransformation(
[
WordSwapNeighboringCharacterSwap(),
WordSwapRandomCharacterSubstitution(),
WordSwapRandomCharacterDeletion(),
WordSwapRandomCharacterInsertion(),
]
)
else:
transformation = WordSwapRandomCharacterSubstitution()
constraints = [RepeatModification(), StopwordModification()]
constraints.append(LevenshteinEditDistance(kwargs.get("leven_dist", 30)))
goal_function = UntargetedClassification(model_wrapper)
search_method = GreedyWordSwapWIR()
return TAAttack(goal_function, constraints, transformation, search_method)