توليد أمثلة عدوانية لنماذج NLP
[توثيق TextAttack على readthedocs]
حول • الإعداد • الاستخدام • التصميم
TextAttack هو إطار Python لهجمات الخصومة ، وزيادة البيانات ، والتدريب النموذجي في NLP.
إذا كنت تبحث عن معلومات حول Menagerie من TextAttack من النماذج التي تم تدريبها مسبقًا ، فقد ترغب في صفحة حديقة حيوانات TextAttAck Model.
للحصول على المساعدة والتحديثات في الوقت الفعلي المتعلقة بـ TextAttack ، يرجى الانضمام إلى TextAttack Slack!
هناك الكثير من الأسباب لاستخدام TextAttack:
يجب أن تقوم بتشغيل Python 3.6+ لاستخدام هذه الحزمة. يعد وحدة معالجة الرسومات المتوافقة مع CUDA اختياريًا ولكنها ستحسن سرعة الكود بشكل كبير. 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 ، بما في ذلك بناء تحول مخصص وقيود مخصصة ..
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 على Distilbert المدرب على أسئلة Quora أسئلة Pairs إعادة صياغة التعريف مجموعة البيانات :
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 | غير مستهدف {التصنيف ، الاستنتاجات} | النسبة المئوية للكلمات المضطربة ، مسافة تضمين الكلمات ، جملة Distilbert تشفر تشابه جيب التمام ، اتساق جزء من الكلام | مبادلة تضمين الكلمات المجهزة | الجشع (التدرج) | من ("نحو تحسين التدريب العدائي لنماذج NLP" (Yoo et al. ، 2021)] (https://arxiv.org/abs/2109.00544))) |
alzantot | غير مستهدف {التصنيف ، الاستنتاجات} | النسبة المئوية للكلمات المضطربة ، حير النموذج اللغوي ، مسافة تضمين الكلمات | مبادلة تضمين الكلمات المجهزة | خوارزمية وراثية | من ("توليد أمثلة عدوانية اللغة الطبيعية" (Alzantot et al. ، 2018)] (https://arxiv.org/abs/1804.07998)) |
bae | تصنيف غير مستهدف | استخدم الجملة التي تشفر تشابه جيب التمام | بيرت التنبؤ المميز | الجشع | Bert Masked Glanation Model Transformation Attack من (["BAE: أمثلة عدوانية قائمة على Bert لتصنيف النص" (Garg & Ramakrishnan ، 2019)] (https://arxiv.org/abs/2004.01970). |
bert-attack | تصنيف غير مستهدف | استخدم الجملة التي تشفر تشابه جيب التمام ، وأقصى عدد من الكلمات المضطربة | التنبؤ الرمزي المقنع بيرت (مع توسع الكلمات الفرعية) | الجشع | (["Bert-untack: هجوم عدواني ضد Bert باستخدام Bert" (Li et al. ، 2020)] (https://arxiv.org/abs/2004.09984))) |
checklist | {تصنيف غير مستهدف ، مستهدف} | مسافة قائمة المراجعة | العقد ، تمديد ، وبدائل كيانات الأسماء | الجشع | اختبار الثبات المنفذ في قائمة المراجعة. (["ما وراء الدقة: الاختبار السلوكي لنماذج NLP مع قائمة المراجعة" (Ribeiro et al. ، 2020)] (https://arxiv.org/abs/2005.04118))) |
clare | غير مستهدف {التصنيف ، الاستنتاجات} | استخدم الجملة التي تشفر تشابه جيب التمام | قام روبرتا بإلغاء التنبؤ بمبادلة الرمز المميز ، وإدراج ودمج | طماع | ["الاضطراب السياقي للهجوم العدائي النصي" (Li et al. ، 2020)] (https://arxiv.org/abs/2009.07502)) |
deepwordbug | {تصنيف غير مستهدف ، مستهدف} | Levenshtein تحرير المسافة | {إدراج الشخصية ، حذف الأحرف ، مبادلة الأحرف المجاورة ، استبدال الأحرف} | الجشع | Greedy Replace-1 التهديف والهجوم متعدد التحويلات-SWAP ("[" توليد صناديق أسود من تسلسل النص العددي للتهرب من مصنفات التعلم العميق "(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 | تحسين سرب الجسيمات | (["هجوم نصي نصي على مستوى الكلمات كتحسين التوافقي" (Zang et al. ، 2020)] (https://www.aclweb.org/anthology/2020.acl-main.540/)) | |
pwws | تصنيف غير مستهدف | تبادل مرادف القائم على WordNet | الجشع (الملاءمة) | هجوم الجشع مع ترتيب أهمية الكلمة استنادًا إلى درجات Word Word ودرجات تبادل المرادف (["توليد أمثلة عدوانية اللغة الطبيعية من خلال ملاءمة كلمة مرجحة" (Ren et al. ، 2019)] (https://www.aclweb.org/anthology/p19-1103/)) | |
textbugger : (صندوق أسود) | تصنيف غير مستهدف | استخدم الجملة التي تشفر تشابه جيب التمام | {إدراج الشخصية ، حذف الأحرف ، مبادلة الأحرف المجاورة ، استبدال الأحرف} | الجشع | ([(["TextBugger: إنشاء نص عدواني مقابل تطبيقات العالم الحقيقي" (Li et al. ، 2018)] (https://arxiv.org/abs/1812.05271)). |
textfooler | غير مستهدف {التصنيف ، الاستنتاجات} | مسافة تضمين الكلمات ، مطابقة جزء من الكلام ، استخدم الجملة التي تشفر تشابه جيب التمام | مبادلة تضمين الكلمات المجهزة | الجشع | هجوم الجشع مع ترتيب أهمية الكلمة (["هل بيرت قوي حقًا؟" (جين وآخرون ، 2019)] (https://arxiv.org/abs/1907.11932))) |
| الهجمات على نماذج التسلسل إلى التسلسل: | |||||
morpheus | الحد الأدنى لدرجة بليو | تبادل كلمة الانعكاس | البحث الجشع | الجشع لاستبدال الكلمات مع انحرافاتها بهدف التقليل من درجة 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 تم ضبطه على 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 مفيدة لزيادة البيانات. تستخدم فئة textattack.Augmenter تحويلًا وقائمة من القيود لزيادة البيانات. نقدم أيضًا وصفات مدمجة لزيادة البيانات:
wordnet يعزز النص عن طريق استبدال الكلمات مع مرادفات WordNetembedding يعزز النص من خلال استبدال الكلمات بالجيران في مساحة التضمين المجهزة ، مع قيود لضمان أن تشابه جيب التمام الخاص بهم لا يقل عن 0.8charswap يعزز النص عن طريق استبدال وحذف وإدخال وتبديل الشخصيات المجاورةeda يعزز النص مع مجموعة من إدخال الكلمات والبدائل والحذف.checklist تعزز النص عن طريق الانكماش/التمديد وباستبدال الأسماء والمواقع والأرقام.clare يعزز النص عن طريق استبدال وإدخال ودمج نموذج لغة مقنعة تدريب مسبقًا.back_trans يعزز النص من خلال نهج الترسل الخلفي.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.' ] يمكنك أيضًا إنشاء upmenter الخاص بك من نقطة الصفر من خلال استيراد التحولات/القيود من 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 LLM ، أو Openai LLM. إليك مثالًا باستخدام 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 لمساعدتك في تدريب نماذج LSTMS و CNNs و transformers باستخدام TextAttack خارج الصندوق. يتم تحميل مجموعات البيانات تلقائيًا باستخدام حزمة datasets .
قم بتدريب LSTM الافتراضي لـ 50 عصرًا على مجموعة بيانات Polarity Yelp:
textattack train --model-name-or-path lstm --dataset yelp_polarity --epochs 50 --learning-rate 1e-5 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 هناك الكثير من القطع في Textatchack ، وقد يكون من الصعب تتبعها جميعًا. يمكنك استخدام textattack list لسرد المكونات ، على سبيل المثال ، النماذج المسبقة ( textattack list models ) أو أساليب البحث المتاحة (Methods textattack list search-methods ).
TextAttack هو النموذج العظم! يمكنك استخدام TextAttack لتحليل أي نموذج يقوم بإخراج IDS أو Tensors أو Strings. لمساعدة المستخدمين ، يتضمن 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 هو النموذج غير المنسق - مما يعني أنه يمكن أن يدير هجمات على النماذج التي تم تنفيذها في أي إطار تعليمي عميق. يجب أن تكون كائنات النموذج قادرة على أخذ سلسلة (أو قائمة بالسلاسل) وإرجاع الإخراج الذي يمكن معالجته بواسطة وظيفة الهدف. على سبيل المثال ، تأخذ نماذج الترجمة الآلية قائمة من الأوتار كمدخلات وتنتج قائمة من السلاسل كإخراج. نماذج التصنيف والاستنزاف تُرجع مجموعة من الدرجات. طالما أن نموذج المستخدم يلبي هذه المواصفات ، فإن النموذج مناسب للاستخدام مع TextAntack.
يأخذ GoalFunction كإدخال كائن AttackedText ، ويسجله ، ويحدد ما إذا كان الهجوم قد نجح ، وإعادة GoalFunctionResult .
يأخذ Constraint كمدخلات AttackedText حالي ، وقائمة من AttackedText المحول. لكل خيار تم تحويله ، فإنه يعيد منطقية تمثل ما إذا كان قد تم استيفاء القيد.
يأخذ Transformation كمدخلات AttackedText ويعيد قائمة من AttackedText المحول المحتملة. على سبيل المثال ، قد يؤدي التحول إلى إرجاع جميع بدائل المرادفات الممكنة.
يأخذ SearchMethod كمدخلات هدف أولي GoalFunctionResult ويعيد GoalFunctionResult نهائيًا ، يتم إعطاء البحث الوصول إلى وظيفة get_transformations ، والتي تأخذ ككائن AttackedText ويخرج قائمة بالتحولات الممكنة التي تمت ترشيحها عن طريق تلبية جميع قيود الهجوم. يتكون البحث من مكالمات متتالية إلى get_transformations حتى ينجح البحث (تم تحديده باستخدام get_goal_results ) أو يتم استنفاده.
انظر ورقة التحليل الخاصة بنا: البحث عن طريقة البحث: خوارزميات البحث القياسية لإنشاء أمثلة NLP للمادي في EMNLP Blackboxnlp.
كما أكدنا في الورقة أعلاه ، لا نوصي بمقارنة وصفات الهجوم مباشرة خارج الصندوق.
يرجع هذا التعليق إلى وصفات الهجوم في الأدبيات الحديثة التي استخدمت طرقًا أو عتبات مختلفة في إنشاء قيودها. بدون وجود مساحة للقيود ثابتة ، يمكن أن تأتي زيادة معدل نجاح الهجوم من طريقة بحث أو تحويل محسّنة أو مساحة بحث أقل تقييدًا.
github لدينا على برامج النصوص والنتائج القياسية: TextAttack-search-bickmark github
انظر رمز المثال: https://github.com/qdata/textattack/blob/master/examples/attack/attack_camembert.py لاستخدام إطار عملنا لمهاجمة الفرنسية.
انظر دفتر ملاحظات البرنامج التعليمي: https://textattack.readthedocs.io/en/latest/2notebook/example_4_camembert.html لاستخدام إطار عملنا لمهاجمة الفرنسية.
انظر readme_zh.md للحصول على قراءتنا باللغة الصينية
نرحب بالاقتراحات والمساهمات! إرسال مشكلة أو طلب سحب وسنبذل قصارى جهدنا للرد في الوقت المناسب. يوجد TextAttack حاليًا في مرحلة "ألفا" التي نعمل فيها على تحسين قدراتها وتصميمها.
انظر المساهمة. md للحصول على معلومات مفصلة عن المساهمة.
إذا كنت تستخدم TextAttack لبحثك ، فيرجى الاستشهاد بـ Textatchack: إطار لهجمات الخصومة ، وتكبير البيانات ، والتدريب العددي في 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 }
}