Генерирование состязательных примеров для моделей НЛП
[Документация TextAttack на ReadThedocs]
О • настройке • Использование • Дизайн
TextAttack - это рамка Python для состязательных атак, увеличения данных и обучения модели в НЛП.
Если вы ищете информацию о зверине TextAttack о предварительно обученных моделях, вам может понадобиться страница зоопарка TextAttack.
Для получения помощи и обновлений в реальном времени, связанных с TextAttack, пожалуйста, присоединяйтесь к Slack TextAttack!
Есть много причин для использования TextAttack:
Вы должны запустить Python 3.6+, чтобы использовать этот пакет. CUDA-совместимый GPU является необязательным, но значительно улучшит скорость кода. TextAttack доступна через PIP:
pip install textattack После установки TextAttack вы можете запустить ее через командную строку ( textattack ... ) или через модуль Python ( python -m textattack ... ).
Совет : TextAttack загружает файлы на
~/.cache/textattack/по умолчанию. Это включает в себя предварительные модели, образцы набора данных и файл конфигурацииconfig.yaml. Чтобы изменить путь кэша, установите переменную средыTA_CACHE_DIR. (Например:TA_CACHE_DIR=/tmp/ textattack attack ...).
textattack --help Основные функции TextAttack можно получить с помощью команды textattack . Две очень распространенные команды - это textattack attack <args> , а textattack augment <args> . Вы можете увидеть больше информации обо всех командах, использующих
textattack --helpили конкретная команда, использующая, например,
textattack attack --help examples/ папка включает в себя сценарии, показывающие общее использование текстовых аттаков для обучающих моделей, бегущих атак и дополнения файла CSV.
Веб -сайт документации содержит пошаговые инструкции, объясняющие базовое использование текстовой атаки, включая создание пользовательского преобразования и нестандартное ограничение.
textattack attack --help Самый простой способ попробовать атаку-через интерфейс командной строки, textattack attack .
Совет: если у вашей машины есть несколько графических процессоров, вы можете распространять атаку через них, используя вариант
--parallel. Для некоторых атак это может действительно помочь производительности. (Если вы хотите атаковать модели Keras параллельно, пожалуйста, ознакомьтесь сexamples/attack/attack_keras_parallel.pyвместо этого)
Вот несколько конкретных примеров:
TextFooler на BERT обучен наборе данных классификации MR настроения :
textattack attack --recipe textfooler --model bert-base-uncased-mr --num-examples 100DeepWordBug на дистильберте, обученном набору данных идентификации вопросов Quora Pares :
textattack attack --model distilbert-base-uncased-cola --recipe deepwordbug --num-examples 100Поиск луча с шириной 4 и внедрением слова преобразования и нецелевой целевой функции на LSTM :
textattack attack --model lstm-mr --num-examples 20
--search-method beam-search^beam_width=4 --transformation word-swap-embedding
--constraints repeat stopword max-words-perturbed^max_num_words=2 embedding^min_cos_sim=0.8 part-of-speech
--goal-function untargeted-classificationСовет
--interactive
textattack attack --recipe [recipe_name] Мы включаем рецепты атаки, которые реализуют атаки из литературы. Вы можете перечислить рецепты атаки с использованием textattack list attack-recipes .
Чтобы запустить рецепт атаки: textattack attack --recipe [recipe_name]

| Название рецепта атаки | Целевая функция | Ограничения | Трансформация | Метод поиска | Основная идея |
|---|---|---|---|---|---|
| Атаки на задачи классификации, такие как классификация настроений и въезд: | |||||
a2t | НЕПРАВИЛЬНО | Процент слов, возмущенных, расстояние встраивания слов, предложение Дистильберта, кодируя косинусное сходство, консистенция части речи | Прогнозирование токенов с подключенным к встроенным слову (OR) Bert Masked Masked Masked | Жадный-вир (градиент) | от ([«к улучшению состязательного обучения моделей NLP» (Yoo et al., 2021)] (https://arxiv.org/abs/2109.00544))) |
alzantot | НЕПРАВИЛЬНО | Процент слов, возмущенных, языковая модель, недоумение, расстояние встроенного слова | Слово-встраиваемое обмен | Генетический алгоритм | от ([«генерирование примеров состязания естественного языка» (Alzantot et al., 2018)] (https://arxiv.org/abs/1804.07998))) |
bae | Непознанная классификация | Используйте предложение, кодирующее сходство косинуса | Берт замаскированный прогноз токенов | Жадный-вир | Берт маскированная атака трансформации языка из (["BAE: BERT на основе состязательных примеров для классификации текста" (Garg & Ramakrishnan, 2019)] (https://arxiv.org/abs/2004.01970)). |
bert-attack | Непознанная классификация | Используйте предложение, кодирующее сходство косинуса, максимальное количество слов, возмущенных | Прогноз токенов Bert Masked (с расширением подносов) | Жадный-вир | (["Берт-Атака: состязательная атака на Берта с использованием Берта" (Li et al., 2020)] (https://arxiv.org/abs/2004.09984))) |
checklist | {Untargeted, Targeted} Классификация | Контрольный список расстояние | договоры, расширить и заменить имени объекты | Жадный-вир | Тестирование инвариантности реализовано в контрольном списке. ([«За пределами точности: поведенческое тестирование моделей NLP с контрольным списком» (Ribeiro et al., 2020)] (https://arxiv.org/abs/2005.04118))) |
clare | НЕПРАВИЛЬНО | Используйте предложение, кодирующее сходство косинуса | Роберта маскировала прогноз для обмена токенами, вставки и слияния | Жадный | ["Контекстуализированное возмущение для текстовой состязательной атаки" (Li et al., 2020)] (https://arxiv.org/abs/2009.07502))) |
deepwordbug | {Untargeted, Targeted} Классификация | Levenshtein Редактировать расстояние | {Вставка символов, удаление символов, соседнее совокупность символов, замена символов} | Жадный-вир | Жадный замену-1 оценка и много трансформационная атака символов («[« Генерация черных ящиков состязательных текстовых последовательностей, чтобы уклониться от классификаторов глубокого обучения »(Gao et al., 2018)] (https://arxiv.org/abs/1801.04354) |
faster-alzantot | НЕПРАВИЛЬНО | Процент слов, возмущенных, языковая модель, недоумение, расстояние встроенного слова | Слово-встраиваемое обмен | Генетический алгоритм | Модифицированная, более быстрая версия Alzantot et al. Генетический алгоритм, от ([«Сертифицированная надежность к состязательным словам слова» (Jia et al., 2019)] (https://arxiv.org/abs/1909.00986))) |
hotflip (слов обмен) | Непознанная классификация | Слово встроено косинус сходство, совпадение с речью, количество нарушенных слов | Основанный на градиентном обмен | Лучший поиск | ([«Hotflip: состязательные примеры белой коробки для классификации текста» (Ebrahimi et al., 2017)] (https://arxiv.org/abs/1712.06751)) |
iga | НЕПРАВИЛЬНО | Процент слов, возмущенных, расстояние встроенного слова | Слово-встраиваемое обмен | Генетический алгоритм | Улучшенная замена слов на основе генетического алгоритма из ("[" Атаки и защиту состязания естественного языка на уровне слов (Wang et al., 2019) "] (https://arxiv.org/abs/1909.06723) |
input-reduction | Входное сокращение | Удаление слов | Жадный-вир | Жадная атака с ранжированием важности слова, уменьшая ввод при поддержании прогнозирования посредством ранжирования важности слова ([«Патологии нейронных моделей затрудняют интерпретацию» (Feng et al., 2018)] (https://arxiv.org/pdf/1804.07781.pdf))) | |
kuleshov | Непознанная классификация | Векторное векторное кодирование косинуса, вероятность сходства языков модели | Слово-встраиваемое обмен | Жадный обмен словом | ([«Адверские примеры задач классификации естественного языка» (Kuleshov et al., 2018)] (https://openreview.net/pdf?id=r1qz3zbaz))) |
pruthi | Непознанная классификация | Минимальная длина слова, максимальное количество слов, возмущенных | {Соседний своп символов, удаление символов, вставка символов, своп символов на основе клавиатуры} | Жадный поиск | Совредоножается общими опечатками ([«Борьба с состязательными ошибками с надежным распознаванием слов» (Pruthi et al., 2019)] (https://arxiv.org/abs/1905.11268) |
pso | Непознанная классификация | Hownet Word Swap | Оптимизация роя частиц | (["Текстовое состязательное нападение на уровне слов как комбинаторная оптимизация" (Zang et al., 2020)] (https://www.aclweb.org/anthology/2020.Acl-main.540/))) | |
pwws | Непознанная классификация | Wordnet Synonym Swap | Жадный-Wir (значимость) | Жадная атака с рейтингом важности слов на основе значимости слова и оценки свопа синонимов ([«Генерация примеров состязания естественного языка посредством вероятности взвешенных слов» (Ren et al., 2019)] (https://www.aclweb.org/anthology/p19-1103/))))) | |
textbugger : (черный короб) | Непознанная классификация | Используйте предложение, кодирующее сходство косинуса | {Вставка символов, удаление символов, соседнее совокупность символов, замена символов} | Жадный-вир | ([[[«TextBugger: генерирование состязательного текста против реальных приложений» (Li et al., 2018)] (https://arxiv.org/abs/1812.05271)). |
textfooler | НЕПРАВИЛЬНО | Расстояние встраивания слов, совпадение с речью, использование предложения, кодирующих косинусное сходство | Слово-встраиваемое обмен | Жадный-вир | Жадная атака с оценкой важности ([«[" Действительно ли Берт устойчив? "(Jin et al., 2019)] (https://arxiv.org/abs/1907.11932))) |
| Атаки на модели последовательности к последовательности: | |||||
morpheus | Минимальный бал Bleu | Перегиб слов обмен | Жадный поиск | Жадный, чтобы заменить слова своими перегибами с целью минимизации результатов BLEU ([«Это морфиновое время! Борьба с лингвистической дискриминацией с помощью инфляционных возмущений»] (https://www.aclweb.org/anthology/2020.acl-main.263.pdf) | |
seq2sick : (черный ящик) | Непересекающийся выход | Слово-встраиваемое обмен | Жадный-вир | Жадная атака с целью изменения каждого слова в выводе перевода. В настоящее время реализовано как черный ящик с планами перехода на белую коробку, как это сделано в бумаге ([«SEQ2SICK: оценка надежности моделей последовательности-последовательности с состязательными примерами» (Cheng et al., 2018)] (https://arxiv.org/abs/1803.01128))) | |
Вот несколько примеров тестирования атак из литературы из командной линии:
Textfooler против Bert Fine-Tuned на SST-2:
textattack attack --model bert-base-uncased-sst2 --recipe textfooler --num-examples 10SEQ2SICK (черный ящик) против T5, настраиваемый для английского языка-германского перевода:
textattack attack --model t5-en-de --recipe seq2sick --num-examples 100textattack augment Многие из компонентов текстовой атаки полезны для увеличения данных. Класс textattack.Augmenter использует преобразование и список ограничений для увеличения данных. Мы также предлагаем встроенные рецепты для увеличения данных:
wordnet дополняет текст, заменив слова на синонимы Wordnetembedding увеличение текста путем замены слов соседями в контр-встроенное пространство с ограничением, чтобы гарантировать, что их сходство косинуса не менее 0,8charswap увеличивает текст путем замены, удаления, вставки и обмена соседними символамиeda дополняет текст комбинацией вставки, замены и удалений.checklist увеличивает текст по сокращению/расширению и заменить имена, местоположения, номера.clare дополняет текст, заменяя, вставляя и слиять с предварительно обученной моделью маскированного языка.back_trans дополняет текст с помощью подхода BackTranslation.back_transcription дополняет текст по подходу к транскрипции. Самый простой способ использования наших инструментов для увеличения данных - с помощью textattack augment <args> . textattack augment принимает входной файл CSV и текстовый столбец для увеличения, а также количество слов для изменения за увеличение и количество увеличений на входной пример. Он выводит CSV в одном и том же формате со всеми примерами увеличения, соответствующими соответствующим столбцам.
Например, учитывая следующее в качестве examples.csv :
"text",label
"the rock is destined to be the 21st century's new conan and that he's going to make a splash even greater than arnold schwarzenegger , jean- claud van damme or steven segal.", 1
"the gorgeously elaborate continuation of 'the lord of the rings' trilogy is so huge that a column of words cannot adequately describe co-writer/director peter jackson's expanded vision of j . r . r . tolkien's middle-earth .", 1
"take care of my cat offers a refreshingly different slice of asian cinema .", 1
"a technically well-made suspenser . . . but its abrupt drop in iq points as it races to the finish line proves simply too discouraging to let slide .", 0
"it's a mystery how the movie could be released in this condition .", 0
Команда
textattack augment --input-csv examples.csv --output-csv output.csv --input-column text --recipe embedding --pct-words-to-swap .1 --transformations-per-example 2 --exclude-original Будет увеличить text столбец, изменяя 10% слов каждого примера, генерируя вдвое больше увеличений, чем исходные входы, и исключить исходные входы из выходного CSV. (Все это будет сохранено до augment.csv по умолчанию.)
Совет: так же, как бегущие атаки интерактивно, вы также можете пройти
--interactive, чтобы увеличить образцы, введенные пользователем, чтобы быстро опробовать различные рецепты увеличения!
После увеличения, вот содержимое augment.csv :
text,label
"the rock is destined to be the 21st century's newest conan and that he's gonna to make a splashing even stronger than arnold schwarzenegger , jean- claud van damme or steven segal.",1
"the rock is destined to be the 21tk century's novel conan and that he's going to make a splat even greater than arnold schwarzenegger , jean- claud van damme or stevens segal.",1
the gorgeously elaborate continuation of 'the lord of the rings' trilogy is so huge that a column of expression significant adequately describe co-writer/director pedro jackson's expanded vision of j . rs . r . tolkien's middle-earth .,1
the gorgeously elaborate continuation of 'the lordy of the piercings' trilogy is so huge that a column of mots cannot adequately describe co-novelist/director peter jackson's expanded vision of j . r . r . tolkien's middle-earth .,1
take care of my cat offerings a pleasantly several slice of asia cinema .,1
taking care of my cat offers a pleasantly different slice of asiatic kino .,1
a technically good-made suspenser . . . but its abrupt drop in iq points as it races to the finish bloodline proves straightforward too disheartening to let slide .,0
a technically well-made suspenser . . . but its abrupt drop in iq dot as it races to the finish line demonstrates simply too disheartening to leave slide .,0
it's a enigma how the film wo be releases in this condition .,0
it's a enigma how the filmmaking wo be publicized in this condition .,0
В рецепте увеличения «встраивания» используется противоположное встраиваемое встраивание ближайших к соседям для увеличения данных.
В дополнение к интерфейсу командной строки, вы можете динамически увеличить текст, импортируя Augmenter в свой собственный код. Все объекты Augmenter реализуют augment и augment_many для генерации увеличения строки или списка строк. Вот пример того, как использовать EmbeddingAugmenter в сценарии Python:
> >> from textattack . augmentation import EmbeddingAugmenter
> >> augmenter = EmbeddingAugmenter ()
> >> s = 'What I cannot create, I do not understand.'
> >> augmenter . augment ( s )
[ 'What I notable create, I do not understand.' , 'What I significant create, I do not understand.' , 'What I cannot engender, I do not understand.' , 'What I cannot creating, I do not understand.' , 'What I cannot creations, I do not understand.' , 'What I cannot create, I do not comprehend.' , 'What I cannot create, I do not fathom.' , 'What I cannot create, I do not understanding.' , 'What I cannot create, I do not understands.' , 'What I cannot create, I do not understood.' , 'What I cannot create, I do not realise.' ] Вы также можете создать свой собственный акцент с нуля, импортируя преобразования/ограничения из textattack.transformations и textattack.constraints . Вот пример, который генерирует увеличение строки с использованием WordSwapRandomCharacterDeletion :
> >> from textattack . transformations import WordSwapRandomCharacterDeletion
> >> from textattack . transformations import CompositeTransformation
> >> from textattack . augmentation import Augmenter
> >> transformation = CompositeTransformation ([ WordSwapRandomCharacterDeletion ()])
> >> augmenter = Augmenter ( transformation = transformation , transformations_per_example = 5 )
> >> s = 'What I cannot create, I do not understand.'
> >> augmenter . augment ( s )
[ 'What I cannot creae, I do not understand.' , 'What I cannot creat, I do not understand.' , 'What I cannot create, I do not nderstand.' , 'What I cannot create, I do nt understand.' , 'Wht I cannot create, I do not understand.' ] В дополнение к увеличению регулярного текста вы можете увеличить подсказки, а затем генерировать ответы на дополненные подсказки с использованием большой языковой модели (LLMS). Увеличение выполняется с использованием того же Augmenter , что и выше. Для создания ответов вы можете использовать свой собственный LLM, LLM Huggingface или Openai LLM. Вот пример с использованием предварительно проведенного LLM:
> >> from textattack . augmentation import EmbeddingAugmenter
> >> from transformers import AutoModelForSeq2SeqLM , AutoTokenizer
> >> from textattack . llms import HuggingFaceLLMWrapper
> >> from textattack . prompt_augmentation import PromptAugmentationPipeline
> >> augmenter = EmbeddingAugmenter ( transformations_per_example = 3 )
> >> model = AutoModelForSeq2SeqLM . from_pretrained ( "google/flan-t5-small" )
> >> tokenizer = AutoTokenizer . from_pretrained ( "google/flan-t5-small" )
> >> model_wrapper = HuggingFaceLLMWrapper ( model , tokenizer )
> >> pipeline = PromptAugmentationPipeline ( augmenter , model_wrapper )
> >> pipeline ( "Classify the following piece of text as `positive` or `negative`: This movie is great!" )
[( 'Classify the following piece of text as `positive` or `negative`: This film is great!' , [ 'positive' ]), ( 'Classify the following piece of text as `positive` or `negative`: This movie is fabulous!' , [ 'positive' ]), ( 'Classify the following piece of text as `positive` or `negative`: This movie is wonderful!' , [ 'positive' ])]textattack train Наш код обучения модели доступен через textattack train , чтобы помочь вам обучить модели LSTM, CNN и transformers с использованием TextAttack вне коробки. Наборы данных автоматически загружаются с помощью пакета datasets .
Обучите наш LSTM по умолчанию для 50 эпох на наборе данных полярности Yelp:
textattack train --model-name-or-path lstm --dataset yelp_polarity --epochs 50 --learning-rate 1e-5 BERT- bert-base с тонкой настройкой на набор данных CoLA для 5 эпох *:
textattack train --model-name-or-path bert-base-uncased --dataset glue^cola --per-device-train-batch-size 8 --epochs 5textattack peek-dataset Чтобы поближе познакомиться с набором данных, используйте textattack peek-dataset . TextAttack напечатает некоторые беглые статистики о входах и выходах из набора данных. Например,
textattack peek-dataset --dataset-from-huggingface snliпокажет информацию о наборе данных SNLI из пакета NLP.
textattack list В TextAttack есть много частей, и может быть трудно отслеживать их все. Вы можете использовать textattack list для перечисления компонентов, например, предварительных моделей ( textattack list models ) или доступных методов поиска ( textattack list search-methods ).
TextAttack-это модель! Вы можете использовать TextAttack для анализа любой модели, которая выводит идентификаторы, тензоры или строки. Чтобы помочь пользователям, TextAttack включает предварительно обученные модели для различных общих задач NLP. Это позволяет пользователям начать работу с TextAttack. Это также обеспечивает более справедливое сравнение атак из литературы.
TextAttack также поставляется встроенными с моделями и наборами данных. Наш интерфейс командной строки автоматически соответствует правильному набору данных с правильной моделью. Мы включаем 82 различных (октябрь 2020 г.) предварительно обученные модели для каждой из девяти задач клей, а также некоторые общие наборы данных для классификации, перевода и суммирования.
Список доступных предварительных моделей и их точности проверки доступны в TextAttack/Models/readme.md. Вы также можете просмотреть полный список предоставленных моделей и наборов данных с помощью textattack attack --help .
Вот пример использования одной из встроенных моделей (набор данных SST-2 автоматически загружается):
textattack attack --model roberta-base-sst2 --recipe textfooler --num-examples 10transformers и datasets данных наборов данных Мы также предоставляем встроенную поддержку для transformers моделей и наборов данных из пакета datasets ! Вот пример загрузки и атаки предварительно обученной модели и набора данных:
textattack attack --model-from-huggingface distilbert-base-uncased-finetuned-sst-2-english --dataset-from-huggingface glue^sst2 --recipe deepwordbug --num-examples 10 Вы можете изучить другие предварительно обученные модели, используя аргумент --model-from-huggingface или другие наборы данных, изменяя --dataset-from-huggingface .
Вы можете легко попробовать атаку на локальную модель или образец набора данных. Чтобы атаковать предварительно обученную модель, создайте короткий файл, который загружает их как model переменных и tokenizer . tokenizer должен быть в состоянии преобразовать входы строк в списки или тензоры идентификаторов, используя метод, называемый encode() . Модель должна принимать входные данные с помощью метода __call__ .
Чтобы экспериментировать с моделью, которую вы прошли, вы можете создать следующий файл и назвать его my_model.py :
model = load_your_model_with_custom_code () # replace this line with your model loading code
tokenizer = load_your_tokenizer_with_custom_code () # replace this line with your tokenizer loading code Затем запустите атаку с аргументом --model-from-file my_model.py . Модель и токенизатор будут загружены автоматически.
Загрузка набора данных из файла очень похожа на загрузку модели из файла. «Набор данных» - это любой иерный (input, output) пары. Следующий пример будет загружать набор данных классификации настроений из файла my_dataset.py :
dataset = [( 'Today was....' , 1 ), ( 'This movie is...' , 0 ), ...] Затем вы можете запустить атаки на образцах из этого набора данных, добавив аргумент --dataset-from-file my_dataset.py .
import textattack
my_dataset = [( "text" , label ),....]
new_dataset = textattack . datasets . Dataset ( my_dataset ) Чтобы разрешить замену слова после того, как последовательность была токенизирована, мы включаем объект AttackedText , который поддерживает как список токенов, так и исходный текст, с пунктуацией. Мы используем этот объект в пользу списка слов или просто необработанного текста.
Мы сформулируем атаку как состоящую из четырех компонентов: целевой функции , которая определяет, преуспела ли атака, ограничения, определяющие, какие возмущения действительны, преобразование , которое генерирует потенциальные изменения с учетом ввода, и метод поиска , который проходит через пространство поиска возможных возмущений. Атака пытается нарушить входной текст таким образом, чтобы выход модели выполнял целевую функцию (то есть, указывая, является ли атака успешной), а возмущение придерживается набора ограничений (например, ограничение грамматики, ограничение семантического сходства). Метод поиска используется для поиска последовательности преобразований, которые дают успешный состязательный пример.
Эта модульная конструкция объединяет методы состязательной атаки в одну систему, позволяет нам легко собирать атаки из литературы при повторном использовании компонентов, которые разделяются по атакам. Мы предоставляем чистые, читаемые реализации 16 рецептов состязательной атаки из литературы (см. Таблицу выше). Впервые эти атаки можно сравнить, сравнить и проанализировать в стандартизированной настройке.
TextAttack является модельной агрессией - это означает, что он может запускать атаки на модели, реализованные в любой структуре глубокого обучения. Объекты модели должны быть в состоянии взять строку (или список строк) и вернуть вывод, который может быть обработан функцией цели. Например, модели машинного перевода берут список строк в качестве ввода и создают список строк в качестве вывода. Классификация и модели въезда возвращают массив баллов. Пока модель пользователя соответствует этой спецификации, модель подходит для использования с TextAttack.
GoalFunction принимает в качестве входного объекта AttackedText , оценивает его и определяет, была ли атака успешная, возвращая GoalFunctionResult .
Constraint принимает в качестве ввода текущего AttackedText и список преобразованных AttackedText S. Для каждой преобразованной опции он возвращает логическое, представляющее, соблюдается ли ограничение.
Transformation принимает в качестве ввода AttackedText и возвращает список возможных преобразованных AttackedText S. Например, преобразование может вернуть все возможные замены синонима.
SearchMethod принимает вход в качестве начального GoalFunctionResult и возвращает конечную GoalFunctionResult , и поиск предоставляется доступ к функции get_transformations , которая принимает входной объект AttackedText и выводит список возможных преобразований, отфильтрованных путем выполнения всех ограничений атаки. Поиск состоит из последовательных вызовов get_transformations до тех пор, пока поиск не будет успешным (определяется с использованием get_goal_results ) или исчерпан.
См. Наш аналитический документ: Поиск метода поиска: Алгоритмы поиска сравнительного анализа для создания примеров состязания NLP в EMNLP Blackboxnlp.
Как мы подчеркивали в приведенной выше статье, мы не рекомендуем напрямую сравнивать рецепты атаки из коробки.
Этот комментарий связан с тем, что рецепты атаки в недавней литературе использовали разные способы или пороговые значения при настройке своих ограничений. Без постоянного пространства ограничения, увеличение уровня успеха атаки может исходить из -за улучшенного метода поиска или преобразования или менее ограничительного пространства поиска.
Наш GitHub на сценариях и результатах сравнительного анализа: TextAttack-Search-Benchmark GitHub
См. Пример кода: https://github.com/qdata/textattack/blob/master/examples/attack/attack_camembert.py для использования нашей структуры для атаки French-Bert.
См. Учебная записная книжка: https://textattack.readthedocs.io/en/latest/2notebook/example_4_camembert.html для использования нашей структуры для атаки Французского Берта.
Смотрите readme_zh.md для нашего Readme на китайском языке
Мы приветствуем предложения и вклад! Отправьте проблему или запрос на то, и мы сделаем все возможное, чтобы своевременно ответить. TextAttack в настоящее время находится на стадии «альфа», на которой мы работаем над улучшением его возможностей и дизайна.
См. Appling.md для получения подробной информации о взносе.
Если вы используете TextAttack для своего исследования, пожалуйста, цитируйте TextAttack: основа для состязательных атак, увеличение данных и тренировку состязания в НЛП.
@inproceedings { morris2020textattack ,
title = { TextAttack: A Framework for Adversarial Attacks, Data Augmentation, and Adversarial Training in NLP } ,
author = { Morris, John and Lifland, Eli and Yoo, Jin Yong and Grigsby, Jake and Jin, Di and Qi, Yanjun } ,
booktitle = { Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing: System Demonstrations } ,
pages = { 119--126 } ,
year = { 2020 }
}