Menghasilkan contoh permusuhan untuk model NLP
[Dokumentasi TextAttack di ReadThedocs]
Tentang • Pengaturan • Penggunaan • Desain
TextAttack adalah kerangka kerja Python untuk serangan permusuhan, augmentasi data, dan pelatihan model di NLP.
Jika Anda mencari informasi tentang Menagerie TextAck dari model yang terlatih, Anda mungkin menginginkan halaman Zoo Model TextAttack.
Untuk bantuan dan pembaruan realtime yang terkait dengan TextAttack, silakan bergabung dengan TextAttack Slack!
Ada banyak alasan untuk menggunakan TextAttack:
Anda harus menjalankan Python 3.6+ untuk menggunakan paket ini. GPU yang kompatibel dengan CUDA adalah opsional tetapi akan sangat meningkatkan kecepatan kode. TextAttack tersedia melalui PIP:
pip install textattack Setelah TextAttack diinstal, Anda dapat menjalankannya melalui baris perintah ( textattack ... ) atau melalui Modul Python ( python -m textattack ... ).
Tip : TextAttack mengunduh file ke
~/.cache/textattack/secara default. Ini termasuk model pretrained, sampel dataset, dan configuration fileconfig.yaml. Untuk mengubah jalur cache, atur variabel lingkunganTA_CACHE_DIR. (Misalnya:TA_CACHE_DIR=/tmp/ textattack attack ...).
textattack --help Fitur utama TextAttack semuanya dapat diakses melalui perintah textattack . Dua perintah yang sangat umum adalah textattack attack <args> , dan textattack augment <args> . Anda dapat melihat informasi lebih lanjut tentang semua perintah yang digunakan
textattack --helpatau perintah khusus menggunakan, misalnya,
textattack attack --help examples/ folder termasuk skrip yang menunjukkan penggunaan TextAttack umum untuk model pelatihan, menjalankan serangan, dan menambah file CSV.
Situs web dokumentasi berisi walkthrough yang menjelaskan penggunaan dasar TextAttack, termasuk membangun transformasi khusus dan kendala khusus ..
textattack attack --help Cara termudah untuk mencoba serangan adalah melalui antarmuka baris perintah, textattack attack .
Kiat: Jika mesin Anda memiliki banyak GPU, Anda dapat mendistribusikan serangan di seluruh mereka menggunakan opsi
--parallel. Untuk beberapa serangan, ini benar -benar dapat membantu kinerja. (Jika Anda ingin menyerang model keras secara paralel, silakan periksaexamples/attack/attack_keras_parallel.pysebagai gantinya)
Berikut adalah beberapa contoh konkret:
TextFooler di Bert dilatih pada dataset klasifikasi sentimen MR :
textattack attack --recipe textfooler --model bert-base-uncased-mr --num-examples 100Deepwordbug di Distilbert Dilatih pada Dataset Quora Quora Pairs Paraphrase Identification :
textattack attack --model distilbert-base-uncased-cola --recipe deepwordbug --num-examples 100Pencarian balok dengan lebar balok 4 dan transformasi penyematan kata dan fungsi tujuan yang tidak ditargetkan pada 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-classificationKiat: Alih -alih menentukan dataset dan jumlah contoh, Anda dapat lulus
--interactiveuntuk menyerang sampel yang dimasukkan oleh pengguna.
textattack attack --recipe [recipe_name] Kami menyertakan resep serangan yang menerapkan serangan dari literatur. Anda dapat mendaftar resep serangan menggunakan textattack list attack-recipes .
Untuk menjalankan resep serangan: textattack attack --recipe [recipe_name]

| Nama resep serangan | Fungsi tujuan | Kendala yang dikuatkan | Transformasi | Metode pencarian | Ide utama |
|---|---|---|---|---|---|
| Serangan pada tugas klasifikasi, seperti klasifikasi sentimen dan ikut: | |||||
a2t | Untargeted {classification, quips} | Persentase kata terganggu, jarak embedding kata, kalimat disilbert yang mengkode kesamaan kosinus, konsistensi bagian-dari-ucapan | Kata embedding kata swap (or) Bert prediksi token bertopeng | Wir-greedy (gradien) | dari (["Menuju peningkatan pelatihan permusuhan model NLP" (Yoo et al., 2021)] (https://arxiv.org/abs/2109.00544))) |
alzantot | Untargeted {classification, quips} | Persentase kata yang terganggu, model bahasa kebingungan, jarak embedding kata | Pertukaran embedding kata berlawanan | Algoritma genetika | dari (["Menghasilkan Contoh Perselisihan Bahasa Alami" (Alzantot et al., 2018)] (https://arxiv.org/abs/1804.07998)))))))))))))))))))))))))))))))))))))))))))) |
bae | Klasifikasi yang tidak ditargetkan | Gunakan kalimat yang menyandikan kesamaan kosinus | Prediksi token bertopeng Bert | War serakah | Serangan transformasi model bahasa bertopeng Bert dari (["BAE: Contoh-contoh permusuhan berbasis Bert untuk klasifikasi teks" (Garg & Ramakrishnan, 2019)] (https://arxiv.org/abs/2004.01970)). |
bert-attack | Klasifikasi yang tidak ditargetkan | Gunakan kalimat yang mengkode kesamaan kosinus, jumlah kata maksimum yang terganggu | Prediksi Bert Masked Token (dengan Ekspansi Subword) | War serakah | (["Bert-Attack: serangan permusuhan terhadap Bert menggunakan Bert" (Li et al., 2020)] (https://arxiv.org/abs/2004.09984))))))))))))))))))))))))))))))))))) |
checklist | {Klasifikasi} yang tidak ditargetkan, ditargetkan | jarak daftar periksa | Kontrak, Perpanjakan, dan menggantikan entitas nama | War serakah | Pengujian invarian diterapkan dalam daftar periksa. (["Di luar akurasi: pengujian perilaku model NLP dengan daftar periksa" (Ribeiro et al., 2020)] (https://arxiv.org/abs/2005.04118))) |
clare | Untargeted {classification, quips} | Gunakan kalimat yang menyandikan kesamaan kosinus | Roberta Prediksi bertopeng untuk Token Swap, Insert and Gabungkan | Tamak | ["Gangguan kontekstual untuk serangan permusuhan tekstual" (Li et al., 2020)] (https://arxiv.org/abs/2009.07502)))) |
deepwordbug | {Klasifikasi} yang tidak ditargetkan, ditargetkan | Levenshtein mengedit jarak | {Penyisipan karakter, penghapusan karakter, pertukaran karakter tetangga, substitusi karakter} | War serakah | Serakah ganti-1 skor dan multi-transformasi Karakter-SWAP Attack (["Generasi Black-Box dari urutan teks permusuhan untuk menghindari pengklasifikasi pembelajaran yang mendalam" (Gao et al., 2018)] (https://arxiv.org/abs/1801.04354) |
faster-alzantot | Untargeted {classification, quips} | Persentase kata yang terganggu, model bahasa kebingungan, jarak embedding kata | Pertukaran embedding kata berlawanan | Algoritma genetika | Versi Alzantot et al yang dimodifikasi dan lebih cepat. Algoritma Genetika, dari (["ketahanan bersertifikat untuk substitusi kata permusuhan" (Jia et al., 2019)] (https://arxiv.org/abs/1909.00986))) |
hotflip (Word Swap) | Klasifikasi yang tidak ditargetkan | Kata penyembatan kemiripan kosinus, pencocokan bagian-of-speech, jumlah kata yang terganggu | Swap Word berbasis gradien | Pencarian balok | (["Hotflip: Contoh permusuhan kotak putih untuk klasifikasi teks" (Ebrahimi et al., 2017)] (https://arxiv.org/abs/1712.06751)))) |
iga | Untargeted {classification, quips} | Persentase kata terganggu, jarak embedding kata | Pertukaran embedding kata berlawanan | Algoritma genetika | Algoritma genetika yang ditingkatkan -substitusi kata berbasis dari (["Serangan Perselisihan Bahasa Alami dan Pertahanan di Level Kata (Wang et al., 2019)"] (https://arxiv.org/abs/1909.06723) |
input-reduction | Pengurangan input | Penghapusan kata | War serakah | Serangan serakah dengan peringkat penting kata, mengurangi input sambil mempertahankan prediksi melalui peringkat penting kata (["patologi model saraf membuat interpretasi menjadi sulit" (Feng et al., 2018)] (https://arxiv.org/pdf/1804.07781.pdf)))) | |
kuleshov | Klasifikasi yang tidak ditargetkan | Pemikiran vektor mengkode kesamaan kosinus, probabilitas kesamaan model bahasa | Pertukaran embedding kata berlawanan | Pertukaran kata yang serakah | (["Contoh permusuhan untuk masalah klasifikasi bahasa alami" (Kuleshov et al., 2018)] (https://openreview.net/pdf?id=R1qz3zbaz)))) |
pruthi | Klasifikasi yang tidak ditargetkan | Panjang kata minimum, jumlah kata maksimum yang terganggu | {Pertukaran karakter tetangga, penghapusan karakter, penyisipan karakter, swap karakter berbasis keyboard} | Pencarian serakah | mensimulasikan kesalahan ketik umum (["Memerangi kesalahan ejaan permusuhan dengan pengenalan kata yang kuat" (Pruthi et al., 2019)] (https://arxiv.org/abs/1905.11268) |
pso | Klasifikasi yang tidak ditargetkan | Hownet Word Swap | Optimasi Partikel berkerumun | (["Serangan permusuhan tekstual tingkat kata sebagai optimasi kombinatorial" (Zang et al., 2020)] (https://www.aclweb.org/anthology/2020.acl-main.540/))) | |
pwws | Klasifikasi yang tidak ditargetkan | Pertukaran sinonim berbasis WordNet | Wir-greedy (arti-penting) | Serangan serakah dengan peringkat penting kata berdasarkan arti-penting kata dan skor swap sinonim (["Menghasilkan contoh bahasa alami melalui probabilitas kata penting kata" (Ren et al., 2019)] (https://www.aclweb.org/anthology/p1103/))) | |
textbugger : (Black-Box) | Klasifikasi yang tidak ditargetkan | Gunakan kalimat yang menyandikan kesamaan kosinus | {Penyisipan karakter, penghapusan karakter, pertukaran karakter tetangga, substitusi karakter} | War serakah | ([(["TextBugger: menghasilkan teks permusuhan terhadap aplikasi dunia nyata" (Li et al., 2018)] (https://arxiv.org/abs/1812.05271)). |
textfooler | Untargeted {classification, quips} | Jarak embedding kata, pencocokan bagian-of-speech, gunakan kalimat yang mengkode kesamaan kosinus | Pertukaran embedding kata berlawanan | War serakah | Serangan Serakah dengan Peringkat Penting Kata (["Apakah Bert benar -benar kuat?" (Jin et al., 2019)] (https://arxiv.org/abs/1907.11932))) |
| Serangan pada model urutan-ke-urutan: | |||||
morpheus | Skor Bleu Minimum | Pertukaran kata infleksi | Pencarian serakah | Serakah untuk menggantikan kata-kata dengan infleksi mereka dengan tujuan meminimalkan skor bleu (["Ini Morphin 'Time! Memerangi diskriminasi linguistik dengan gangguan infleksional"] (https://www.aclweb.org/anthology/2020.acl-main.263.pdf) | |
seq2sick : (Black-Box) | Output yang tidak tumpang tindih | Pertukaran embedding kata berlawanan | War serakah | Serangan serakah dengan tujuan mengubah setiap kata dalam terjemahan output. Saat ini diimplementasikan sebagai Black-Box dengan rencana untuk berubah menjadi kotak putih seperti yang dilakukan dalam kertas (["SEQ2SICK: mengevaluasi ketahanan model urutan-ke-urutan dengan contoh-contoh permusuhan" (Cheng et al., 2018)] (https://arxiv.org/abs/1803.01128))))))))) | |
Berikut adalah beberapa contoh serangan pengujian dari literatur dari baris perintah:
TextFooler Against Bert disesuaikan di SST-2:
textattack attack --model bert-base-uncased-sst2 --recipe textfooler --num-examples 10SEQ2SICK (Black-Box) Melawan T5 Fine-Tuned untuk Terjemahan Bahasa Inggris-Jerman:
textattack attack --model t5-en-de --recipe seq2sick --num-examples 100textattack augment Banyak komponen TextAttack berguna untuk augmentasi data. Kelas textattack.Augmenter menggunakan transformasi dan daftar kendala untuk menambah data. Kami juga menawarkan resep bawaan untuk augmentasi data:
wordnet menambah teks dengan mengganti kata -kata dengan sinonim WordNetembedding menambah teks dengan mengganti kata-kata dengan tetangga di ruang embedding yang dilengkapi dengan kendala, dengan kendala untuk memastikan kesamaan kosinus mereka setidaknya 0,8charswap menambah teks dengan mengganti, menghapus, memasukkan, dan menukar karakter yang berdekataneda menambah teks dengan kombinasi penyisipan kata, substitusi dan penghapusan.checklist menambah teks berdasarkan kontraksi/ekstensi dan dengan mengganti nama, lokasi, angka.clare menambah teks dengan mengganti, memasukkan, dan menggabungkan dengan model bahasa bertopeng pra-terlatih.back_trans menambah teks dengan pendekatan latar belakang.back_transcription menambah teks dengan pendekatan transkripsi belakang. Cara termudah untuk menggunakan alat augmentasi data kami adalah dengan textattack augment <args> . textattack augment mengambil file input CSV dan kolom teks untuk augment, bersama dengan jumlah kata untuk diubah per augmentasi dan jumlah augmentasi per contoh input. Ini menghasilkan CSV dalam format yang sama dengan semua contoh augmentasi yang sesuai dengan kolom yang tepat.
Misalnya, mengingat yang berikut sebagai 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
Perintah
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 Akan menambah kolom text dengan mengubah 10% dari kata -kata masing -masing contoh, menghasilkan augmentasi dua kali lebih banyak dari input asli, dan mengecualikan input asli dari CSV output. (Semua ini akan disimpan ke augment.csv secara default.)
Kiat: Sama seperti menjalankan serangan secara interaktif, Anda juga dapat lulus
--interactiveuntuk menambah sampel yang dimasukkan oleh pengguna untuk dengan cepat mencoba resep augmentasi yang berbeda!
Setelah augmentasi, berikut adalah isi 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
Resep augmentasi 'embedding' menggunakan embedding tetangga terdekat untuk menambah data.
Selain antarmuka baris perintah, Anda dapat menambah teks secara dinamis dengan mengimpor Augmenter dalam kode Anda sendiri. Semua objek Augmenter menerapkan augment dan augment_many untuk menghasilkan augmentasi string atau daftar string. Berikut adalah contoh cara menggunakan EmbeddingAugmenter dalam skrip 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.' ] Anda juga dapat membuat augmenter Anda sendiri dari awal dengan mengimpor transformasi/kendala dari textattack.transformations dan textattack.constraints . Berikut adalah contoh yang menghasilkan augmentasi string menggunakan 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.' ] Sebagai tambahan untuk augmentasi teks reguler, Anda dapat menambah petunjuk dan kemudian menghasilkan respons terhadap prompt augmented menggunakan model bahasa besar (LLMS). Augmentasi dilakukan dengan menggunakan Augmenter yang sama seperti di atas. Untuk menghasilkan tanggapan, Anda dapat menggunakan LLM Anda sendiri, LLM Huggingface, atau Openai LLM. Berikut contoh menggunakan llm pelukan pretrained
> >> 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 Kode pelatihan model kami tersedia melalui textattack train untuk membantu Anda melatih model LSTM, CNNs, dan transformers menggunakan TextAttack out-of-the-box. Dataset secara otomatis dimuat menggunakan paket datasets .
Latih LSTM default kami untuk 50 zaman di dataset Yelp Polarity:
textattack train --model-name-or-path lstm --dataset yelp_polarity --epochs 50 --learning-rate 1e-5 Fine-tune bert-base pada dataset CoLA untuk 5 zaman *:
textattack train --model-name-or-path bert-base-uncased --dataset glue^cola --per-device-train-batch-size 8 --epochs 5textattack peek-dataset Untuk melihat lebih dekat pada dataset, gunakan textattack peek-dataset . TextAttack akan mencetak beberapa statistik sepintas tentang input dan output dari dataset. Misalnya,
textattack peek-dataset --dataset-from-huggingface snliakan menampilkan informasi tentang dataset SNLI dari paket NLP.
textattack list Ada banyak bagian di TextAttack, dan mungkin sulit untuk melacak semuanya. Anda dapat menggunakan textattack list untuk daftar komponen, misalnya, model pretrained ( textattack list models ) atau metode pencarian yang tersedia ( textattack list search-methods ).
TextAttack adalah model-agnostik! Anda dapat menggunakan TextAttack untuk menganalisis model apa pun yang mengeluarkan ID, tensor, atau string. Untuk membantu pengguna, TextAttack termasuk model pra-terlatih untuk berbagai tugas NLP umum. Ini memudahkan pengguna untuk memulai dengan TextAttack. Ini juga memungkinkan perbandingan serangan yang lebih adil dari literatur.
TextAttack juga hadir dengan model dan set data. Antarmuka baris perintah kami akan secara otomatis cocok dengan dataset yang benar dengan model yang benar. Kami memasukkan 82 model pra-terlatih yang berbeda (Oktober 2020) untuk masing-masing dari sembilan tugas lem, serta beberapa set data umum untuk klasifikasi, terjemahan, dan peringkasan.
Daftar model pretrained yang tersedia dan akurasi validasinya tersedia di TextAttack/Model/ReadMe.md. Anda juga dapat melihat daftar lengkap model & dataset yang disediakan melalui textattack attack --help .
Berikut adalah contoh menggunakan salah satu model bawaan (dataset SST-2 secara otomatis dimuat):
textattack attack --model roberta-base-sst2 --recipe textfooler --num-examples 10transformers dan datasets Dataset Kami juga memberikan dukungan bawaan untuk model dan dataset pretrain transformers dari paket datasets ! Berikut adalah contoh memuat dan menyerang model dan dataset pra-terlatih:
textattack attack --model-from-huggingface distilbert-base-uncased-finetuned-sst-2-english --dataset-from-huggingface glue^sst2 --recipe deepwordbug --num-examples 10 Anda dapat menjelajahi model pra-terlatih lainnya menggunakan argumen --model-from-huggingface , atau dataset lain dengan mengubah --dataset-from-huggingface .
Anda dapat dengan mudah mencoba serangan pada model lokal atau sampel dataset. Untuk menyerang model pra-terlatih, buat file pendek yang memuatnya sebagai model variabel dan tokenizer . tokenizer harus dapat mengubah input string ke daftar atau tensor ID menggunakan metode yang disebut encode() . Model harus mengambil input melalui metode __call__ .
Untuk bereksperimen dengan model yang telah Anda latih, Anda dapat membuat file berikut dan menamainya 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 Kemudian, jalankan serangan dengan argumen --model-from-file my_model.py . Model dan tokenizer akan dimuat secara otomatis.
Memuat dataset dari file sangat mirip dengan memuat model dari file. A 'dataset' adalah pasangan yang dapat diulang (input, output) . Contoh berikut akan memuat dataset klasifikasi sentimen dari file my_dataset.py :
dataset = [( 'Today was....' , 1 ), ( 'This movie is...' , 0 ), ...] Anda kemudian dapat menjalankan serangan pada sampel dari dataset ini dengan menambahkan argumen --dataset-from-file my_dataset.py .
import textattack
my_dataset = [( "text" , label ),....]
new_dataset = textattack . datasets . Dataset ( my_dataset ) Untuk memungkinkan penggantian kata setelah urutan telah ditoklokkan, kami menyertakan objek AttackedText yang memelihara daftar token dan teks asli, dengan tanda baca. Kami menggunakan objek ini demi daftar kata atau hanya teks mentah.
Kami merumuskan serangan yang terdiri dari empat komponen: fungsi tujuan yang menentukan apakah serangan telah berhasil, kendala yang mendefinisikan gangguan mana yang valid, transformasi yang menghasilkan modifikasi potensial yang diberikan input, dan metode pencarian yang melintasi melalui ruang pencarian kemungkinan gangguan. Serangan berusaha mengganggu teks input sehingga output model memenuhi fungsi tujuan (yaitu, menunjukkan apakah serangan itu berhasil) dan gangguan mematuhi himpunan kendala (misalnya, kendala tata bahasa, kendala kemiripan semantik). Metode pencarian digunakan untuk menemukan urutan transformasi yang menghasilkan contoh permusuhan yang berhasil.
Desain modular ini menyatukan metode serangan permusuhan menjadi satu sistem, memungkinkan kita untuk dengan mudah mengumpulkan serangan dari literatur sambil menggunakan kembali komponen yang dibagikan di seluruh serangan. Kami menyediakan implementasi yang bersih dan dapat dibaca dari 16 resep serangan permusuhan dari literatur (lihat tabel di atas). Untuk pertama kalinya, serangan ini dapat dibandingkan, dibandingkan, dan dianalisis dalam pengaturan standar.
TextAttack adalah model -agnostik - artinya dapat menjalankan serangan pada model yang diimplementasikan dalam kerangka pembelajaran yang mendalam. Objek model harus dapat mengambil string (atau daftar string) dan mengembalikan output yang dapat diproses berdasarkan fungsi tujuan. Misalnya, model terjemahan mesin mengambil daftar string sebagai input dan menghasilkan daftar string sebagai output. Model klasifikasi dan ikut mengembalikan serangkaian skor. Selama model pengguna memenuhi spesifikasi ini, model ini cocok untuk digunakan dengan TextAttack.
GoalFunction mengambil sebagai memasukkan objek AttackedText , mencetak gol, dan menentukan apakah serangan telah berhasil, mengembalikan GoalFunctionResult .
Constraint membutuhkan input A AttackedText saat ini, dan daftar Transformed AttackedText s. Untuk setiap opsi yang diubah, ia mengembalikan boolean yang mewakili apakah kendala dipenuhi.
Transformation mengambil sebagai masukan AttackedText dan mengembalikan daftar kemungkinan AttackedText yang ditransformasikan s. Misalnya, transformasi mungkin mengembalikan semua penggantian sinonim yang mungkin.
SearchMethod mengambil sebagai memasukkan GoalFunctionResult awal dan mengembalikan final GoalFunctionResult Pencarian diberikan akses ke fungsi get_transformations , yang dianggap sebagai input objek AttackedText dan menghasilkan daftar kemungkinan transformasi yang disaring dengan memenuhi semua kendala serangan. Pencarian terdiri dari panggilan berturut -turut untuk get_transformations sampai pencarian berhasil (ditentukan menggunakan get_goal_results ) atau kelelahan.
Lihat Makalah Analisis Kami: Mencari Metode Pencarian: Algoritma Pencarian Benchmarking Untuk Menghasilkan Contoh Persegi NLP di EMNLP BlackboxNLP.
Seperti yang kami tekankan dalam makalah di atas, kami tidak merekomendasikan untuk secara langsung membandingkan resep serangan di luar kotak.
Komentar ini disebabkan oleh resep serangan dalam literatur baru -baru ini menggunakan berbagai cara atau ambang batas dalam mengatur kendala mereka. Tanpa ruang kendala tetap konstan, peningkatan tingkat keberhasilan serangan dapat berasal dari metode pencarian atau transformasi yang lebih baik atau ruang pencarian yang kurang ketat.
GitHub On Benchmarking Script dan Hasil kami: TextAttack-Search-Benchmark GitHub
Lihat Contoh Kode: https://github.com/qdata/textattack/blob/master/examples/attack/attack_camembert.py karena menggunakan kerangka kerja kami untuk menyerang French-bert.
Lihat Tutorial Notebook: https://textattack.readthedocs.io/en/latest/2notebook/example_4_camembert.html untuk menggunakan kerangka kerja kami untuk menyerang Prancis-GERT.
Lihat readme_zh.md untuk readme kami dalam bahasa Cina
Kami menyambut saran dan kontribusi! Kirimkan permintaan atau permintaan tarik dan kami akan melakukan yang terbaik untuk merespons tepat waktu. TextAttack saat ini berada dalam tahap "alpha" di mana kami bekerja untuk meningkatkan kemampuan dan desainnya.
Lihat Kontribusi.MD untuk informasi terperinci tentang kontribusi.
Jika Anda menggunakan TextAttack untuk penelitian Anda, silakan kutip TextAttack: Kerangka kerja untuk serangan permusuhan, augmentasi data, dan pelatihan permusuhan di NLP.
@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 }
}