Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
OpenAttack — Пакет с открытым исходным кодом для текстовой состязательной атаки. | Kitploit
Инструменты/GitHubGitHub/thunlp/openattack
Машинное ОбучениеСтатьи и ИсследованияОбучение и ОбразованиеБезопасность ИИСостязательная Атака
GitHubthunlp/openattack

OpenAttack

Пакет с открытым исходным кодом для текстовой состязательной атаки.

Репозиторий
7781274 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Сайт

Логотип OpenAttack

Статус покрытия Github Runner Статус ReadTheDoc Версия PyPI Релиз GitHub (последний по дате) Лицензия GitHub PR приветствуются

Документация • Возможности и применение • Примеры использования • Модели атак • Дизайн инструментария

OpenAttack — это инструментарий для текстовых состязательных атак с открытым исходным кодом на Python, который охватывает весь процесс текстовой состязательной атаки, включая предобработку текста, доступ к модели-жертве, генерацию состязательных примеров и оценку.

Возможности и применение

OpenAttack обладает следующими возможностями:

⭐️ Поддержка всех типов атак. OpenAttack поддерживает все типы атак, включая возмущения на уровне предложений/слов/символов и модели атак на основе градиентов/оценок/решений/слепые;

⭐️ Многоязычность. OpenAttack в настоящее время поддерживает английский и китайский языки. Его расширяемая архитектура позволяет быстро добавить поддержку других языков;

⭐️ Параллельная обработка. OpenAttack обеспечивает поддержку многопроцессорного запуска моделей атак для повышения эффективности атаки;

⭐️ Совместимость с 🤗 Hugging Face. OpenAttack полностью интегрирован с библиотеками 🤗 Transformers и Datasets;

⭐️ Большая расширяемость. Вы можете легко атаковать настраиваемую модель-жертву на любом настраиваемом наборе данных или разработать и оценить настраиваемую модель атаки.

OpenAttack имеет широкий спектр применения, включая:

✅ Предоставление различных удобных базовых линий для моделей атак;

✅ Всестороннее оценивание моделей атак с использованием тщательных метрик оценки;

✅ Помощь в быстрой разработке новых моделей атак с помощью общих компонентов атак;

✅ Оценку устойчивости модели машинного обучения к различным состязательным атакам;

✅ Проведение состязательного обучения для повышения устойчивости модели машинного обучения путём обогащения обучающих данных сгенерированными состязательными примерами.

Установка

1. Использование pip (рекомендуется)```bash

pip install OpenAttack

root@kitploit:~
#### 2. Клонирование этого репозитория```bash
git clone https://github.com/thunlp/OpenAttack.git
cd OpenAttack
python setup.py install

После установки вы можете попробовать запустить demo.py, чтобы проверить, работает ли OpenAttack корректно:``` python demo.py

root@kitploit:~
![demo](https://assets.kitploit.com/production/public/readmes/4421/8322af527eba3c3dcd09c66e50aa3a1229ca0f529018fa6d08b6d8349eb0a51f.gif)
## Примеры использования

#### Атака на встроенные модели-жертвы

OpenAttack включает в себя некоторые часто используемые NLP-модели, такие как BERT ([Devlin et al. 2018](https://arxiv.org/abs/1810.04805)) и RoBERTa ([Liu et al. 2019](https://arxiv.org/abs/1907.11692)), которые были дообучены на популярных датасетах (например, [SST-2](https://nlp.stanford.edu/sentiment/treebank.html)). Вы можете без труда проводить состязательные атаки на эти встроенные модели-жертвы.

Следующий фрагмент кода показывает, как использовать PWWS — модель атаки на основе жадного алгоритма ([Ren et al., 2019](https://www.aclweb.org/anthology/P19-1103.pdf)) — для атаки на BERT на датасете SST-2 (полный исполняемый код находится [здесь](https://github.com/thunlp/openattack/blob/HEAD/examples/workflow.py)).```python
import OpenAttack as oa
import datasets # use the Hugging Face's datasets library
# change the SST dataset into 2-class
def dataset_mapping(x):
    return {
        "x": x["sentence"],
        "y": 1 if x["label"] > 0.5 else 0,
    }
# choose a trained victim classification model
victim = oa.DataManager.loadVictim("BERT.SST")
# choose 20 examples from SST-2 as the evaluation data 
dataset = datasets.load_dataset("sst", split="train[:20]").map(function=dataset_mapping)
# choose PWWS as the attacker and initialize it with default parameters
attacker = oa.attackers.PWWSAttacker()
# prepare for attacking
attack_eval = OpenAttack.AttackEval(attacker, victim)
# launch attacks and print attack results 
attack_eval.eval(dataset, visualize=True)
Настраиваемая модель жертвы

Следующий фрагмент кода показывает, как использовать PWWS для атаки на настроенную модель анализа тональности (статистическую модель, построенную в NLTK) на SST-2 (полный исполняемый код находится здесь).```python import OpenAttack as oa import numpy as np import datasets import nltk from nltk.sentiment.vader import SentimentIntensityAnalyzer

configure access interface of the customized victim model by extending OpenAttack.Classifier.

class MyClassifier(oa.Classifier): def init(self): # nltk.sentiment.vader.SentimentIntensityAnalyzer is a traditional sentiment classification model. nltk.download('vader_lexicon') self.model = SentimentIntensityAnalyzer()

root@kitploit:~
def get_pred(self, input_):
    return self.get_prob(input_).argmax(axis=1)

# access to the classification probability scores with respect input sentences
def get_prob(self, input_):
    ret = []
    for sent in input_:
        # SentimentIntensityAnalyzer calculates scores of “neg” and “pos” for each instance
        res = self.model.polarity_scores(sent)

        # we use 𝑠𝑜𝑐𝑟𝑒_𝑝𝑜𝑠 / (𝑠𝑐𝑜𝑟𝑒_𝑛𝑒𝑔 + 𝑠𝑐𝑜𝑟𝑒_𝑝𝑜𝑠) to represent the probability of positive sentiment
        # Adding 10^−6 is a trick to avoid dividing by zero.
        prob = (res["pos"] + 1e-6) / (res["neg"] + res["pos"] + 2e-6)

        ret.append(np.array([1 - prob, prob]))
    
    # The get_prob method finally returns a np.ndarray of shape (len(input_), 2). See Classifier for detail.
    return np.array(ret)
Многопроцессорная обработка

OpenAttack предоставляет удобную многопроцессорную обработку для ускорения процесса состязательных атак. Следующий фрагмент кода показывает, как использовать многопроцессорную обработку в состязательных атаках с помощью Genetic (Alzantot et al. 2018), модели атаки на основе генетического алгоритма (полный исполняемый код находится здесь).```python import OpenAttack as oa import datasets

def dataset_mapping(x): return { "x": x["sentence"], "y": 1 if x["label"] > 0.5 else 0, }

victim = oa.loadVictim("BERT.SST") dataset = datasets.load_dataset("sst", split="train[:20]").map(function=dataset_mapping) attacker = oa.attackers.GeneticAttacker() attack_eval = oa.AttackEval(attacker, victim)

Using multiprocessing simply by specify num_workers

attack_eval.eval(dataset, visualize=True, num_workers=4)

root@kitploit:~
</details>

<details>
<summary><strong>Китайская атака</strong></summary>

OpenAttack теперь поддерживает adversarial-атаки на английские и китайские модели-жертвы. [Здесь](https://github.com/thunlp/openattack/blob/HEAD/examples/chinese.py) приведён пример кода для проведения adversarial-атаки на китайскую модель классификации отзывов с использованием PWWS.
</details>

<details>
<summary><strong>Пользовательская модель атаки</strong></summary>

OpenAttack включает множество удобных компонентов, которые можно легко собрать в новые модели атак. [Здесь](https://github.com/thunlp/openattack/blob/HEAD/examples/custom_attacker.py) приведён пример того, как спроектировать простую модель атаки, перемешивающую токены в исходном предложении.
</details>

<details>
<summary><strong>Adversarial-обучение</strong></summary>

OpenAttack может легко генерировать adversarial-примеры, атакуя экземпляры из обучающего набора, которые можно добавить к исходному обучающему набору для переобучения более устойчивой модели-жертвы, т.е. adversarial-обучение. [Здесь](https://github.com/thunlp/openattack/blob/HEAD/examples/adversarial_training.py) приведён пример того, как проводить adversarial-обучение с помощью OpenAttack.
</details>

<details>
<summary><strong>Больше примеров</strong></summary>

- Атака на модели классификации пар предложений. В дополнение к моделям классификации одиночных предложений, OpenAttack поддерживает атаки на модели классификации пар предложений. [Здесь](https://github.com/thunlp/openattack/blob/HEAD/examples/nli_attack.py) приведён пример кода для проведения adversarial-атаки на модель NLI с помощью OpenAttack.

- Пользовательская метрика оценки. OpenAttack поддерживает создание собственной метрики оценки adversarial-атак. [Здесь](https://github.com/thunlp/openattack/blob/HEAD/examples/custom_eval.py) приведён пример того, как добавить пользовательскую метрику оценки и использовать её для оценки adversarial-атак.

</details>

## Модели атак

В зависимости от уровня возмущений, вносимых в исходный ввод, модели текстовых adversarial-атак можно разделить на атаки на уровне предложений, на уровне слов и на уровне символов.

В зависимости от доступности модели-жертвы, модели текстовых adversarial-атак можно разделить на атаки на основе `градиента`, `оценки`, `решения` и `слепые` атаки.

> [TAADPapers](https://github.com/thunlp/TAADpapers) — это список статей, в котором собраны практически все работы, касающиеся текстовых adversarial-атак и защиты. Вы можете ознакомиться с этим списком, чтобы найти больше моделей атак.

В настоящее время OpenAttack включает 15 типичных моделей атак на модели классификации текста, которые покрывают **все** типы атак.

Вот список текущих моделей атак.

- Уровень предложений
  - (SEA) **Semantically Equivalent Adversarial Rules for Debugging NLP Models**. *Marco Tulio Ribeiro, Sameer Singh, Carlos Guestrin*. ACL 2018. `decision` [[pdf](https://aclweb.org/anthology/P18-1079)] [[code](https://github.com/marcotcr/sears)]
  - (SCPN) **Adversarial Example Generation with Syntactically Controlled Paraphrase Networks**. *Mohit Iyyer, John Wieting, Kevin Gimpel, Luke Zettlemoyer*. NAACL-HLT 2018. `blind` [[pdf](https://www.aclweb.org/anthology/N18-1170)] [[code&data](https://github.com/miyyer/scpn)]
  - (GAN) **Generating Natural Adversarial Examples**. *Zhengli Zhao, Dheeru Dua, Sameer Singh*. ICLR 2018. `decision` [[pdf](https://arxiv.org/pdf/1710.11342.pdf)] [[code](https://github.com/zhengliz/natural-adversary)]
- Уровень слов
  - (TextFooler) **Is BERT Really Robust? A Strong Baseline for Natural Language Attack on Text Classification and Entailment**. *Di Jin, Zhijing Jin, Joey Tianyi Zhou, Peter Szolovits*. AAAI-20. `score` [[pdf](https://arxiv.org/pdf/1907.11932v4)] [[code](https://github.com/wqj111186/TextFooler)]
  - (PWWS) **Generating Natural Language Adversarial Examples through Probability Weighted Word Saliency**. *Shuhuai Ren, Yihe Deng, Kun He, Wanxiang Che*. ACL 2019. `score` [[pdf](https://www.aclweb.org/anthology/P19-1103.pdf)] [[code](https://github.com/JHL-HUST/PWWS/)]
  - (Genetic) **Generating Natural Language Adversarial Examples**. *Moustafa Alzantot, Yash Sharma, Ahmed Elgohary, Bo-Jhang Ho, Mani Srivastava, Kai-Wei Chang*. EMNLP 2018. `score` [[pdf](https://www.aclweb.org/anthology/D18-1316)] [[code](https://github.com/nesl/nlp_adversarial_examples)]
  - (SememePSO) **Word-level Textual Adversarial Attacking as Combinatorial Optimization**. *Yuan Zang, Fanchao Qi, Chenghao Yang, Zhiyuan Liu, Meng Zhang, Qun Liu and Maosong Sun*. ACL 2020. `score` [[pdf](https://www.aclweb.org/anthology/2020.acl-main.540.pdf)] [[code](https://github.com/thunlp/SememePSO-Attack)]
  - (BERT-ATTACK) **BERT-ATTACK: Adversarial Attack Against BERT Using BERT**. *Linyang Li, Ruotian Ma, Qipeng Guo, Xiangyang Xue, Xipeng Qiu*. EMNLP 2020. `score` [[pdf](https://www.aclweb.org/anthology/2020.emnlp-main.500.pdf)] [[code](https://github.com/LinyangLee/BERT-Attack)]
  - (BAE) **BAE: BERT-based Adversarial Examples for Text Classification**. *Siddhant Garg, Goutham Ramakrishnan. EMNLP 2020*. `score` [[pdf](https://www.aclweb.org/anthology/2020.emnlp-main.498.pdf)] [[code](https://github.com/QData/TextAttack/blob/master/textattack/attack_recipes/bae_garg_2019.py)]
  - (FD) **Crafting Adversarial Input Sequences For Recurrent Neural Networks**. *Nicolas Papernot, Patrick McDaniel, Ananthram Swami, Richard Harang*. MILCOM 2016. `gradient` [[pdf](https://arxiv.org/pdf/1604.08275.pdf)]
- Уровень слов/символов
  - (TextBugger) **TEXTBUGGER: Generating Adversarial Text Against Real-world Applications**. *Jinfeng Li, Shouling Ji, Tianyu Du, Bo Li, Ting Wang*. NDSS 2019. `gradient` `score` [[pdf](https://arxiv.org/pdf/1812.05271.pdf)]
  - (UAT) **Universal Adversarial Triggers for Attacking and Analyzing NLP.** *Eric Wallace, Shi Feng, Nikhil Kandpal, Matt Gardner, Sameer Singh*. EMNLP-IJCNLP 2019. `gradient` [[pdf](https://arxiv.org/pdf/1908.07125.pdf)] [[code](https://github.com/Eric-Wallace/universal-triggers)] [[website](http://www.ericswallace.com/triggers)]
  - (HotFlip) **HotFlip: White-Box Adversarial Examples for Text Classification**. *Javid Ebrahimi, Anyi Rao, Daniel Lowd, Dejing Dou*. ACL 2018. `gradient` [[pdf](https://www.aclweb.org/anthology/P18-2006)] [[code](https://github.com/AnyiRao/WordAdver)]
- Уровень символов
  - (VIPER) **Text Processing Like Humans Do: Visually Attacking and Shielding NLP Systems**. *Steffen Eger, Gözde Gül ¸Sahin, Andreas Rücklé, Ji-Ung Lee, Claudia Schulz, Mohsen Mesgar, Krishnkant Swarnkar, Edwin Simpson, Iryna Gurevych*. NAACL-HLT 2019. `score` [[pdf](https://www.aclweb.org/anthology/N19-1165)] [[code&data](https://github.com/UKPLab/naacl2019-like-humans-visual-attacks)]
  - (DeepWordBug) **Black-box Generation of Adversarial Text Sequences to Evade Deep Learning Classifiers**. *Ji Gao, Jack Lanchantin, Mary Lou Soffa, Yanjun Qi*. IEEE SPW 2018. `score` [[pdf](https://ieeexplore.ieee.org/document/8424632)] [[code](https://github.com/QData/deepWordBug)]

В следующей таблице показано сравнение моделей атак.

|    Модель    |  Доступность  | Возмущение | Основная идея                                        |
| :---------: | :-------------: | :----------: | :-------------------------------------------------- |
|     SEA     |    Решение     |   Предложение   | Перифразирование на основе правил                             |
|    SCPN     |      Слепая      |   Предложение   | Перифразирование                                        |
|     GAN     |    Решение     |   Предложение   | Генерация текста с помощью кодер-декодер                  |
| TextFooler  |      Оценка      |     Слово     | Жадная замена слов                            |
|    PWWS     |      Оценка      |     Слово     | Жадная замена слов                            |
|   Genetic   |      Оценка      |     Слово     | Замена слов на основе генетического алгоритма           |
|  SememePSO  |      Оценка      |     Слово     | Замена слов на основе роя частиц |
|  BERT-ATTACK  |      Оценка      |     Слово     | Жадная контекстуализированная замена слов |
|  BAE  |      Оценка      |     Слово     | Жадная контекстуализированная замена и вставка слов |
|     FD      |    Градиент     |     Слово     | Замена слов на основе градиента                    |
| TextBugger  | Градиент, Оценка |  Слово+Символ   | Жадная замена слов и манипуляция символами |
|     UAT     |    Градиент     |  Слово, Символ  | Манипуляция словами или символами на основе градиента       |
|   HotFlip   |    Градиент     |  Слово, Символ  | Замена слов или символов на основе градиента       |
|    VIPER    |      Слепая      |     Символ     | Замена символов визуально похожими             |
| DeepWordBug |      Оценка      |     Символ     | Жадная манипуляция символами                       |

## Дизайн набора инструментов

Учитывая значительные различия между разными моделями атак, мы оставляем значительную свободу для проектирования каркаса моделей атак и больше сосредотачиваемся на упрощении общей обработки adversarial-атак и общих компонентов, используемых в моделях атак.

OpenAttack имеет 7 основных модулей:

<img src="https://assets.kitploit.com/production/public/readmes/4421/3c70579cf4ea406c82bd3bf407eb9c1e1e8b8ffb3b3c4eede4fe2812ff76eebf.png" alt="toolkit_framework" style="zoom:40%;" />

* **TextProcessor**: обработка исходной текстовой последовательности для помощи моделям атак в генерации adversarial-примеров;
* **Victim**: обёртка моделей-жертв;
* **Attacker**: содержит различные модели атак;
* **AttackAssist**: включает различные методы замены слов/символов, используемые в атаках на уровне слов/символов, и некоторые другие компоненты, используемые в атаках на уровне предложений, такие как модель перифразирования;
* **Metric**: предоставляет несколько метрик качества adversarial-примеров, которые могут служить как ограничениями на adversarial-примеры во время атаки, так и оценочными метриками для оценки adversarial-атак;
* **AttackEval**: оценивает текстовые adversarial-атаки с точки зрения эффективности атаки, качества adversarial-примеров и эффективности атаки;
* **DataManager**: управляет всеми данными и сохранёнными моделями, которые используются в других модулях.

## Цитирование

Пожалуйста, цитируйте нашу [статью](https://aclanthology.org/2021.acl-demo.43.pdf), если вы используете этот набор инструментов:```
@inproceedings{zeng2020openattack,
  title={{Openattack: An open-source textual adversarial attack toolkit}},
  author={Zeng, Guoyang and Qi, Fanchao and Zhou, Qianrui and Zhang, Tingji and Hou, Bairu and Zang, Yuan and Liu, Zhiyuan and Sun, Maosong},
  booktitle={Proceedings of the 59th Annual Meeting of the Association for Computational Linguistics and the 11th International Joint Conference on Natural Language Processing: System Demonstrations},
  pages={363--371},
  year={2021},
  url={https://aclanthology.org/2021.acl-demo.43},
  doi={10.18653/v1/2021.acl-demo.43}
}
Скачать инструмент

def dataset_mapping(x): return { "x": x["sentence"], "y": 1 if x["label"] > 0.5 else 0, }

load some examples of SST-2 for evaluation

dataset = datasets.load_dataset("sst", split="train[:20]").map(function=dataset_mapping)

choose the costomized classifier as the victim model

victim = MyClassifier()

choose PWWS as the attacker and initialize it with default parameters

attacker = oa.attackers.PWWSAttacker()

prepare for attacking

attack_eval = oa.AttackEval(attacker, victim)

launch attacks and print attack results

attack_eval.eval(dataset, visualize=True)

root@kitploit:~
</details>


<details>
<summary><strong>Пользовательский набор данных</strong></summary>

Следующий фрагмент кода показывает, как использовать PWWS для атаки на существующую тонко настроенную модель анализа тональности на **пользовательском** наборе данных (полный исполняемый код находится [здесь](https://github.com/thunlp/openattack/blob/HEAD/examples/custom_dataset.py)).```python
import OpenAttack as oa
import transformers
import datasets

# load a fine-tuned sentiment analysis model from Transformers (you can also use our fine-tuned Victim.BERT.SST)
tokenizer = transformers.AutoTokenizer.from_pretrained("echarlaix/bert-base-uncased-sst2-acc91.1-d37-hybrid")
model = transformers.AutoModelForSequenceClassification.from_pretrained("echarlaix/bert-base-uncased-sst2-acc91.1-d37-hybrid", num_labels=2, output_hidden_states=False)
victim = oa.classifiers.TransformersClassifier(model, tokenizer, model.bert.embeddings.word_embeddings)

# choose PWWS as the attacker and initialize it with default parameters
attacker = oa.attackers.PWWSAttacker()

# create your customized dataset
dataset = datasets.Dataset.from_dict({
    "x": [
        "I hate this movie.",
        "I like this apple."
    ],
    "y": [
        0, # 0 for negative
        1, # 1 for positive
    ]
})

# prepare for attacking
attack_eval = oa.AttackEval(attacker, victim, metrics = [oa.metric.EditDistance(), oa.metric.ModificationRate()])
# launch attacks and print attack results
attack_eval.eval(dataset, visualize=True)

Участники

Мы благодарим всех участников этого проекта. И новые вклады очень приветствуются.