← retour aux outils back to tools

# TextAttack

Framework Python pour générer des attaques adverses contre des modèles NLP via substitution de synonymes, paraphrase et perturbations au niveau des caractères, avec de nombreuses recettes de recherche pré-construites. Python framework for generating adversarial attacks against NLP models via synonym substitution, paraphrasing, and character-level perturbations, with many pre-built research recipes.

↗ https://github.com/QData/TextAttack

## Overview

TextAttack is a framework for adversarial attacks, data augmentation, and adversarial training on NLP models. It composes attacks from four building blocks — goal function, constraints, transformation, and search method — and ships dozens of pre-built “recipes” that replicate published attacks (TextFooler, BERT-Attack, DeepWordBug), so you can benchmark a text classifier or LLM-based filter against known adversarial techniques without reimplementing them.

## Installation

    pip install textattack

## CLI: Attacking a Model

Run the TextFooler recipe against a HF sentiment model on a dataset split

    textattack attack --recipe textfooler \
      --model bert-base-uncased-imdb \
      --num-examples 100

Try a specific recipe against a locally fine-tuned model

    textattack attack --recipe deepwordbug \
      --model-from-file my_model.py \
      --dataset-from-file my_dataset.py

## Python API: Custom Attack

    import textattack
    from textattack.attack_recipes import TextFoolerJin2019
    from textattack.models.wrappers import HuggingFaceModelWrapper

    # Wrap any HF model/tokenizer pair for attack compatibility
    model_wrapper = HuggingFaceModelWrapper(model, tokenizer)

    # Build the recipe attack against the wrapped model
    attack = TextFoolerJin2019.build(model_wrapper)

    # Run against a single input and inspect the perturbed result
    result = attack.attack("This movie was absolutely fantastic.", 1)  # ground-truth label
    print(result.perturbed_text())

## Data Augmentation (defensive use)

    from textattack.augmentation import EasyDataAugmenter

    # Generate paraphrased variants for adversarial training
    augmenter = EasyDataAugmenter()
    augmented = augmenter.augment("The quick brown fox jumps over the lazy dog.")

## Tips

- `textattack attack --recipe <name> --interactive` lets you type inputs and watch the perturbation happen live — useful for quickly demoing a jailbreak/evasion technique.
- Custom `GoalFunction` + `Constraints` + `Transformation` combos let you target LLM classifiers (e.g. a prompt-injection detector) instead of just sentiment/topic models.

Help / Man page

    textattack attack --recipe <name> --model <model> [--num-examples N] [--interactive]
    textattack augment --input-csv <file> --recipe <name>
    textattack train --model <model> --dataset <dataset>
    textattack list recipes | models | datasets

    RECIPES (subset):
      textfooler         Word-level synonym substitution (TextFooler, Jin et al. 2019)
      bert-attack         Contextual BERT-based word substitution
      deepwordbug         Character-level perturbations
      pwws                Word saliency + synonym swap
      hotflip             Gradient-guided character/token flips
      checklist           Behavioral/invariance testing

    model wrappers: HuggingFaceModelWrapper, PyTorchModelWrapper, sklearnModelWrapper

## Vue d’ensemble

TextAttack est un framework pour les attaques adverses, l’augmentation de données et l’entraînement adverse sur des modèles NLP. Il compose des attaques à partir de quatre briques : goal function, constraints, transformation, et search method, et fournit des dizaines de “recettes” pré-construites qui reproduisent des attaques publiées (TextFooler, BERT-Attack, DeepWordBug), permettant de comparer un classifieur de texte ou un filtre basé sur un LLM à des techniques adverses connues sans avoir à les réimplémenter.

## Installation

    pip install textattack

## CLI : attaquer un modèle

    # Lancer la recette TextFooler contre un modèle de sentiment HF sur un split de dataset
    textattack attack --recipe textfooler \
      --model bert-base-uncased-imdb \
      --num-examples 100

    # Essayer une recette spécifique contre un modèle fine-tuné localement
    textattack attack --recipe deepwordbug \
      --model-from-file my_model.py \
      --dataset-from-file my_dataset.py

## API Python : attaque personnalisée

    import textattack
    from textattack.attack_recipes import TextFoolerJin2019
    from textattack.models.wrappers import HuggingFaceModelWrapper

    # Encapsuler n'importe quelle paire modèle/tokenizer HF pour la compatibilité avec l'attaque
    model_wrapper = HuggingFaceModelWrapper(model, tokenizer)

    # Construire l'attaque de la recette contre le modèle encapsulé
    attack = TextFoolerJin2019.build(model_wrapper)

    # Lancer contre une seule entrée et inspecter le résultat perturbé
    result = attack.attack("This movie was absolutely fantastic.", 1)  # étiquette de vérité terrain
    print(result.perturbed_text())

## Augmentation de données (usage défensif)

    from textattack.augmentation import EasyDataAugmenter

    # Générer des variantes paraphrasées pour l'entraînement adverse
    augmenter = EasyDataAugmenter()
    augmented = augmenter.augment("The quick brown fox jumps over the lazy dog.")

## Conseils

- `textattack attack --recipe <name> --interactive` permet de saisir des entrées et d’observer la perturbation en direct : utile pour démontrer rapidement une technique de jailbreak/évasion.
- Des combinaisons personnalisées de `GoalFunction` + `Constraints` + `Transformation` permettent de cibler des classifieurs LLM (par exemple un détecteur d’injection de prompt) plutôt que de simples modèles de sentiment/sujet.

Aide / Page de manuel

    textattack attack --recipe <name> --model <model> [--num-examples N] [--interactive]
    textattack augment --input-csv <file> --recipe <name>
    textattack train --model <model> --dataset <dataset>
    textattack list recipes | models | datasets

    RECIPES (subset):
      textfooler         Word-level synonym substitution (TextFooler, Jin et al. 2019)
      bert-attack         Contextual BERT-based word substitution
      deepwordbug         Character-level perturbations
      pwws                Word saliency + synonym swap
      hotflip             Gradient-guided character/token flips
      checklist           Behavioral/invariance testing

    model wrappers: HuggingFaceModelWrapper, PyTorchModelWrapper, sklearnModelWrapper