diff --git a/data/results/attack_xai/.gitignore b/data/results/attack_xai/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..8fd610a44122d82a9167896d38bd6d267a25b4e6 --- /dev/null +++ b/data/results/attack_xai/.gitignore @@ -0,0 +1,2 @@ +/enron_spam +/20_news diff --git a/dvc.lock b/dvc.lock index 7ccf085fdad8a01c27f8101a0a1b6ad29f75ef7f..03daca40816cba203743dacff47f5e5d9a6881b5 100644 --- a/dvc.lock +++ b/dvc.lock @@ -379,3 +379,43 @@ stages: md5: 82d89b00a710e9de0a2157357fed5894.dir size: 24977923 nfiles: 2 + attack_xai@enron_spam: + cmd: PYTHONPATH=. python experiments/scripts/attack.py --dataset_name enron_spam + --attack_type attack_xai + deps: + - path: data/classification/enron_spam + md5: 5de1a2fcbae0de94f5fbfd2bb747d919.dir + size: 14585920 + nfiles: 2 + - path: data/models/enron_spam + md5: 3e16b22f59532c66beeadea958e0579a.dir + size: 18505614 + nfiles: 6 + - path: experiments/scripts/attack.py + md5: 87f54ee4e2a08f1259d9d8b2d01fe1b9 + size: 12061 + outs: + - path: data/results/attack_xai/enron_spam/ + md5: ad19831866da140de113e64862da0bce.dir + size: 2860109 + nfiles: 2 + attack_xai@20_news: + cmd: PYTHONPATH=. python experiments/scripts/attack.py --dataset_name 20_news + --attack_type attack_xai + deps: + - path: data/classification/20_news + md5: b73611443c4189af91b827c083f37e0b.dir + size: 42897496 + nfiles: 2 + - path: data/models/20_news + md5: 43d68a67ecb8149bd6bf50db9767cb64.dir + size: 439008808 + nfiles: 6 + - path: experiments/scripts/attack.py + md5: 87f54ee4e2a08f1259d9d8b2d01fe1b9 + size: 12061 + outs: + - path: data/results/attack_xai/20_news/ + md5: af00c730d4d73a0a8e2a047882c0d9aa.dir + size: 8739816 + nfiles: 2 diff --git a/dvc.yaml b/dvc.yaml index 03c045f1148e592ae0fa0bb3a5da13f85af1d9ff..0455a1bc2a3849add2fac2a63f8c1303129e1e09 100644 --- a/dvc.yaml +++ b/dvc.yaml @@ -108,7 +108,71 @@ stages: - data/models/${item} - data/classification/${item} outs: - - data/results/attack_textfooler_discard/${item}/ + - data/results/attack_textfooler_discard/${item}/ + attack_xai: + foreach: + - enron_spam + - 20_news + - wiki_pl + do: + wdir: . + cmd: >- + PYTHONPATH=. python experiments/scripts/attack.py + --dataset_name ${item} --attack_type attack_xai + deps: + - experiments/scripts/attack.py + - data/models/${item} + - data/classification/${item} + outs: + - data/results/attack_xai/${item}/ + attack_xai_discard: + foreach: + - enron_spam + - 20_news + - wiki_pl + do: + wdir: . + cmd: >- + PYTHONPATH=. python experiments/scripts/attack.py + --dataset_name ${item} --attack_type attack_xai_discard + deps: + - experiments/scripts/attack.py + - data/models/${item} + - data/classification/${item} + outs: + - data/results/attack_xai_discard/${item}/ + attack_xai_local: + foreach: + - enron_spam + - 20_news + - wiki_pl + do: + wdir: . + cmd: >- + PYTHONPATH=. python experiments/scripts/attack.py + --dataset_name ${item} --attack_type attack_xai_local + deps: + - experiments/scripts/attack.py + - data/models/${item} + - data/classification/${item} + outs: + - data/results/attack_xai_local/${item}/ + attack_xai_discard_local: + foreach: + - enron_spam + - 20_news + - wiki_pl + do: + wdir: . + cmd: >- + PYTHONPATH=. python experiments/scripts/attack.py + --dataset_name ${item} --attack_type attack_xai_discard_local + deps: + - experiments/scripts/attack.py + - data/models/${item} + - data/classification/${item} + outs: + - data/results/attack_xai_discard_local/${item}/ attack_basic: foreach: - enron_spam diff --git a/experiments/scripts/attack.py b/experiments/scripts/attack.py index b545015f2812080f20850626144907ba3c1ae735..b5e868cd82d835ad31111f891e10cfbc749d3eef 100644 --- a/experiments/scripts/attack.py +++ b/experiments/scripts/attack.py @@ -149,6 +149,7 @@ def load_dir_files(dir_path): } return result + def load_xai_importance(input_dir): global_xai_dir = os.path.join(input_dir, "global") local_xai_dir = os.path.join(input_dir, "local") @@ -181,10 +182,11 @@ def main(dataset_name: str, attack_type: str): "20_news": "en", "wiki_pl": "pl", }[dataset_name] - xai_global, xai_local = load_xai_importance( - f"data/explanations/{dataset_name}" - ) if attack_type in ["attack_xai", "attack_xai_discard"] else {}, {} - xai_sub = 10 + xai_global, xai_local = {}, {} + if "attack_xai" in attack_type: + importance = load_xai_importance(f"data/explanations/{dataset_name}") + xai_global, xai_local = importance[0], importance[1] + xai_sub = 5 params = { "attack_textfooler": [lang, SYNONYM], "attack_textfooler_discard": [lang, DISCARD],