NLPモデルの敵対例を生成します
[readthedocsに関するTextAttackドキュメント]
について•セットアップ•使用法•設計
TextAttackは、NLPでの敵対的な攻撃、データ増強、モデルトレーニングのためのPythonフレームワークです。
TextAttackの事前に訓練されたモデルの動物園に関する情報を探している場合は、TextAttack Model Zooページが必要になる場合があります。
TextAttackに関連するヘルプとリアルタイムの更新については、TextAttack Slackに参加してください!
TextAttackを使用する理由はたくさんあります。
このパッケージを使用するには、Python 3.6+を実行する必要があります。 CUDA互換のGPUはオプションですが、コード速度を大幅に改善します。 TextAttackはPIPから入手できます。
pip install textattack TextAttackがインストールされたら、コマンドライン( textattack ... )またはPython Module( python -m textattack ... )を介して実行できます。
ヒント:TextAttackは、デフォルトで
~/.cache/textattack/にファイルをダウンロードします。これには、前処理されたモデル、データセットサンプル、および構成ファイルconfig.yamlが含まれます。キャッシュパスを変更するには、環境変数TA_CACHE_DIRを設定します。 (例:TA_CACHE_DIR=/tmp/ textattack attack ...)。
textattack --help TextAttackの主な機能はすべて、 textattackコマンドからアクセスできます。 2つの非常に一般的なコマンドは、 textattack attack <args>とtextattack augment <args>です。すべてのコマンドに関する詳細情報を使用して見ることができます
textattack --helpまたは、たとえば、使用した特定のコマンド
textattack attack --help examples/トレーニングモデル、攻撃の実行、CSVファイルの拡張のための一般的なテキストアタック使用量を示すスクリプトが含まれています。
ドキュメントウェブサイトには、カスタム変換やカスタム制約の構築など、テキストアタックの基本的な使用法を説明するウォークスルーが含まれています。
textattack attack --help攻撃を試す最も簡単な方法は、コマンドラインインターフェイスであるtextattack attack介してです。
ヒント:マシンに複数のGPUがある場合、
--parallelオプションを使用して攻撃を配布できます。一部の攻撃では、これは本当にパフォーマンスに役立ちます。 (Kerasモデルを並行して攻撃したい場合は、代わりにexamples/attack/attack_keras_parallel.pyをチェックしてください)
具体的な例をいくつか紹介します。
MR Sentiment分類データセットで訓練されたBertのTextFooler :
textattack attack --recipe textfooler --model bert-base-uncased-mr --num-examples 100DistilbertのDeepWordBug Quora質問ペアの言い換えデータセットで訓練された:
textattack attack --model distilbert-base-uncased-cola --recipe deepwordbug --num-examples 100LSTM上のビーム幅4および単語埋め込み変換とターゲット目標関数を埋め込むビーム検索:
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 | ターゲットの{分類、誘惑} | 摂動された単語の割合、埋め込み距離、コサインの類似性をコードするディスティルバート文、品物の一部 | カウンターフィットワード埋め込みスワップ(または)バートマスクトークン予測 | 貪欲なwir(勾配) | ["NLPモデルの敵対的訓練の改善に向けて"(yoo et al。、2021)](https://arxiv.org/abs/2109.00544)から) |
alzantot | ターゲットの{分類、誘惑} | 混乱した単語の割合、言語モデルの困惑、単語の埋め込み距離 | カウンターフィットワード埋め込みスワップ | 遺伝的アルゴリズム | (["自然言語の生成敵意の例"(Alzantot et al。、2018)](https://arxiv.org/abs/1804.07998)から) |
bae | ターゲット分類 | コサインの類似性をエンコードする文を使用します | バートマスクトークン予測 | 貪欲なwir | (["BAE:BER:BERTベースのテキスト分類のための敵対例"(Garg&Ramakrishnan、2019)](https://arxiv.org/abs/2004.01970)からのバートマスクされた言語モデル変換攻撃)。 |
bert-attack | ターゲット分類 | COSINEの類似性をコードする文を使用します。 | バートマスクトークン予測(サブワード拡張付き) | 貪欲なwir | (["Bert-attack:Bertを使用したBertに対する敵対的攻撃"(Li et al。、2020)](https://arxiv.org/abs/2004.09984))) |
checklist | {非標的、ターゲット}分類 | チェックリスト距離 | 契約、拡張、および代替エンティティ | 貪欲なwir | チェックリストに実装された不変テスト。 (["精度を超えて:チェックリストを使用したNLPモデルの行動テスト"(Ribeiro et al。、2020)](https://arxiv.org/abs/2005.04118))) |
clare | ターゲットの{分類、誘惑} | コサインの類似性をエンコードする文を使用します | ロバータは、トークンスワップ、挿入、マージの予測をマスクしました | よく深い | [「テキストの敵対的攻撃のための文脈化された摂動」(Li et al。、2020)](https://arxiv.org/abs/2009.07502)))) |
deepwordbug | {非標的、ターゲット}分類 | levenshtein編集距離 | {文字挿入、文字の削除、隣接する文字スワップ、文字置換} | 貪欲なwir | 貪欲な交換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 | 入力削減 | 単語削除 | 貪欲なwir | 単語の重要性ランキングでの貪欲な攻撃、単語の重要性ランキングを通じて予測を維持しながら入力を減らします([「神経モデルの病理学は解釈を困難にします」(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 | ターゲット分類 | ハウネットワードスワップ | 粒子群最適化 | (["組み合わせの最適化としての単語レベルのテキスト敵対的攻撃"(Zang et al。、2020)](https://www.aclweb.org/anthology/2020.acl-main.540/))) | |
pwws | ターゲット分類 | WordNetベースの同義語スワップ | 貪欲なwir(顕著性) | 単語の顕著性と同義語スワップスコアに基づいた単語の重要性ランキングでの貪欲な攻撃([「確率加重単語の顕著性による自然言語の敵対例を生成する」(Ren et al。、2019)](https://www.aclweb.org/anthology/p19-1103/)))))))))))) | |
textbugger :(ブラックボックス) | ターゲット分類 | コサインの類似性をエンコードする文を使用します | {文字挿入、文字の削除、隣接する文字スワップ、文字置換} | 貪欲なwir | ([[["TextBugger:実際のアプリケーションに対する敵対的なテキストの生成"(Li et al。、2018)](https://arxiv.org/abs/1812.05271)))。 |
textfooler | ターゲットの{分類、誘惑} | 単語の埋め込み距離、スピーチの一部の一致、コサインの類似性をコードする文を使用します | カウンターフィットワード埋め込みスワップ | 貪欲なwir | 単語の重要性ランキングでの貪欲な攻撃(["Bertは本当に堅牢ですか?"(Jin et al。、2019)](https://arxiv.org/abs/1907.11932))) |
シーケンスからシーケンスモデルへの攻撃: | |||||
morpheus | 最小ブルースコア | 変曲ワードスワップ | 貪欲な検索 | ブルースコアを最小化することを目標に単語を変化させることは貪欲です([「それはモルフィンタイム!屈折式の摂動との言語差別と戦う "])(https://www.aclweb.org/anthology/2020.acl-main.263.pdf) | |
seq2sick :(ブラックボックス) | 非重複出力 | カウンターフィットワード埋め込みスワップ | 貪欲なwir | 出力翻訳のすべての単語を変更することを目標とする貪欲な攻撃。現在、紙の中で行われたようにホワイトボックスに変更する計画でブラックボックスとして実装されています(["seq2sick:敵対的な例を備えたシーケンスからシーケンスモデルの堅牢性を評価する"(cheng et al。、2018)](https://arxiv.org/abs/1803.01128)))))))))))) | |
コマンドラインからの文献からのテスト攻撃の例を次に示します。
SST-2で微調整されたBertに対するTextFooler:
textattack attack --model bert-base-uncased-sst2 --recipe textfooler --num-examples 10英語とドイツの翻訳のために微調整されたT5に対するseq2sick(ブラックボックス):
textattack attack --model t5-en-de --recipe seq2sick --num-examples 100textattack augment TextAttackのコンポーネントの多くは、データの増強に役立ちます。 textattack.Augmenterクラスは、変換と制約のリストを使用してデータを拡大します。また、データ増強のための組み込みのレシピも提供しています。
wordnet 、単語をWordNet同義語に置き換えてテキストを拡張しますembedding 、コサインの類似性が少なくとも0.8であることを確実にするための制約を備えた、カウンターフィットの埋め込みスペースの隣人に単語を置き換えることにより、テキストを補強します。charswap 、隣接する文字を置き換え、削除、挿入し、交換してテキストを補強します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各例の単語の10%を変更してtext列を拡張し、元の入力の2倍の拡張を生成し、出力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を実装して、文字列または文字列のリストを生成します。 PythonスクリプトでEmbeddingAugmenter使用する方法の例は次のとおりです。
> >> 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 and textattack.constraintsから変換/制約をインポートすることにより、ゼロから独自のAugmenterを作成することもできます。 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、Huggingface LLM、またはOpenai LLMを使用できます。これは、前処理されたハグFace 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、CNNS、 transformersモデルをトレーニングするのに役立ちます。データセットは、 datasetsパッケージを使用して自動的にロードされます。
Yelp極性データセットで50エポックのデフォルトのLSTMをトレーニングします。
textattack train --model-name-or-path lstm --dataset yelp_polarity --epochs 50 --learning-rate 1e-5 5つのエポックのCoLAデータセットでbert-base微調整します*:
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 snliNLPパッケージからSNLIデータセットに関する情報を表示します。
textattack list TextAttackにはたくさんのピースがあり、それらすべてを追跡することは難しい場合があります。 textattack listを使用して、たとえば、前提型モデル( textattack list models )または使用可能な検索方法( textattack list search-methods )など、コンポーネントをリストできます。
TextAttackはモデルに依存しています! TextAttackを使用して、ID、テンソル、または文字列を出力するモデルを分析できます。ユーザーを支援するために、TextAttackには、さまざまな一般的なNLPタスクの事前に訓練されたモデルが含まれています。これにより、ユーザーがTextAttackを簡単に開始できます。また、文献からの攻撃のより公正な比較も可能になります。
TextAttackには、モデルとデータセットが組み込まれています。コマンドラインインターフェイスは、正しいデータセットを正しいモデルと自動的に一致させます。 9つの接着剤タスクのそれぞれに82の異なる(2020年10月)事前に訓練されたモデルと、分類、翻訳、要約のための一般的なデータセットが含まれます。
利用可能な前提条件のモデルとその検証精度のリストは、TextAttack/Models/readme.mdで入手できます。また、 textattack attack --helpを使用して、提供されたモデルとデータセットの完全なリストを表示することもできます。
組み込みモデルのいずれかを使用する例は次のとおりです(SST-2データセットは自動的にロードされます):
textattack attack --model roberta-base-sst2 --recipe textfooler --num-examples 10transformersモデルとdatasetsデータセットまた、 datasetsパッケージからtransformersの前提型モデルとデータセットの組み込みサポートも提供しています。事前に訓練されたモデルとデータセットを読み込んで攻撃する例は次のとおりです。
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()と呼ばれるメソッドを使用して、文字列入力をIDのリストまたはテンソルに変換できる必要があります。モデルは、 __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オブジェクトを含めます。このオブジェクトを使用して、単語のリストまたは生のテキストのリストを支持します。
4つのコンポーネントで構成される攻撃を策定します。攻撃が成功したかどうかを決定する目標関数、摂動が有効であることを定義する制約、入力を与えられた潜在的な変更を生成する変換、および可能な摂動の検索空間を通過する検索方法です。攻撃は、モデル出力が目標関数(つまり、攻撃が成功したかどうかを示す)を満たすように入力テキストを摂動させようとします。検索方法は、成功した敵対的な例を生み出す一連の変換を見つけるために使用されます。
このモジュール設計は、敵対的な攻撃方法を1つのシステムに統合し、攻撃全体で共有されるコンポーネントを再利用しながら、文献から攻撃を簡単に組み立てることができます。文献から16の敵対的な攻撃レシピのクリーンで読みやすい実装を提供します(上記の表を参照)。これらの攻撃は初めて、標準化された設定でベンチマーク、比較、分析することができます。
TextAttackはモデルに依存しない - つまり、ディープラーニングフレームワークに実装されたモデルで攻撃を実行できることを意味します。モデルオブジェクトは、文字列(または文字列のリスト)を取得し、目標関数によって処理できる出力を返すことができる必要があります。たとえば、機械翻訳モデルは、文字列のリストを入力として採用し、出力として文字列のリストを作成します。分類モデルと含意モデルは、一連のスコアを返します。ユーザーのモデルがこの仕様を満たしている限り、モデルはTextAttackで使用するのに適しています。
GoalFunction 、 AttackedTextオブジェクトを入力してスコアリングし、攻撃が成功したかどうかを判断し、 GoalFunctionResult結果を返します。
Constraint 、入力として現在のAttackedTextと、変換されたAttackedTextテキストのリストを取得します。変換された各オプションについて、制約が満たされているかどうかを表すブール値を返します。
Transformation 、入力としてAttackedTextを使用し、可能な変換されたAttackedTextテキストのリストを返します。たとえば、変換はすべての可能な同義語の置換を返す可能性があります。
SearchMethod 、入力として初期のGoalFunctionResultを受け取り、最終的なGoalFunctionResultを返します。検索にはget_transformations AttackedTextへのアクセスが与えられます。検索は、検索が成功するまで( get_goal_resultsを使用して決定)、または使い果たされるまでget_transformationsへの連続した呼び出しで構成されます。
分析論文を参照してください。検索方法の検索:emnlp blackboxnlpでNLP敵対例を生成するための検索アルゴリズムのベンチマーク。
上記の論文で強調したように、箱から攻撃のレシピを直接比較することはお勧めしません。
このコメントは、最近の文献での攻撃レシピが、制約を設定する際にさまざまな方法またはしきい値を使用したためです。制約スペースが一定に保たれない場合、攻撃成功率の増加は、改善された検索または変換方法、または制限の少ない検索スペースから生じる可能性があります。
ベンチマークスクリプトと結果のGitHub:TextAttack-Search-Benchmark 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については、readme_zh.mdを参照してください
提案と貢献を歓迎します!問題またはプルリクエストを送信すると、タイムリーに対応するために最善を尽くします。 TextAttackは現在、その機能と設計を改善するために取り組んでいる「アルファ」段階にあります。
寄付の詳細については、Contributing.mdを参照してください。
調査にTextAttackを使用する場合は、TextAttackを引用してください。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 }
}