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/TextAttackOverview
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> --interactivelets you type inputs and watch the perturbation happen live — useful for quickly demoing a jailbreak/evasion technique.- Custom
GoalFunction+Constraints+Transformationcombos 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> --interactivepermet 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+Transformationpermettent 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