def build(model): transformation = CompositeTransformation([ WordSwapExtend(), WordSwapContract(), WordSwapChangeName(), WordSwapChangeNumber(), WordSwapChangeLocation(), ]) # Need this constraint to prevent extend and contract modifying each others' changes and forming infinite loop constraints = [RepeatModification()] # Untargeted attack & GreedySearch goal_function = UntargetedClassification(model) search_method = GreedySearch() return Attack(goal_function, constraints, transformation, search_method)
def __init__(self, **kwargs): from textattack.transformations import ( CompositeTransformation, WordSwapChangeLocation, WordSwapChangeName, WordSwapChangeNumber, WordSwapContract, WordSwapExtend, ) transformation = CompositeTransformation([ WordSwapChangeNumber(), WordSwapChangeLocation(), WordSwapChangeName(), WordSwapExtend(), WordSwapContract(), ]) constraints = [DEFAULT_CONSTRAINTS[0]] super().__init__(transformation, constraints=constraints, **kwargs)