-
Notifications
You must be signed in to change notification settings - Fork 1
/
Timer_Summ.py
77 lines (59 loc) · 1.91 KB
/
Timer_Summ.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import pandas as pd
import torch
import numpy as np
from transformers import pipeline, AutoTokenizer, AutoModelForSequenceClassification
import time
from tqdm import tqdm
path=input("Enter attack csv file name")
ds1=pd.read_csv(path)
summarizer = pipeline("summarization")
tokenizer = AutoTokenizer.from_pretrained("textattack/bert-base-uncased-imdb")
model = AutoModelForSequenceClassification.from_pretrained("textattack/bert-base-uncased-imdb")
time_sum=[]
time_cls=[]
list1=ds1.perturbed_text
list2=[]
# Summarizer module
print("Running defense")
for x in tqdm(list1):
cnta=time.timeit()
art_len=len(x.split())
if(len(x)>1024):
x=x[:1024]
list2.append(summarizer(x, max_length=art_len + 1, min_length=min(15,art_len//4), do_sample=False)[0]['summary_text'])
cntb=time.timeit()
time_sum.append(cntb-cnta)
a+=1
summarized=list2
perturbed=list1
initial_prob=list(ds1.original_output)
initial_score=list(ds1.original_score)
perturbed_prob=list(ds1.perturbed_output)
perturbed_score=list(ds1.perturbed_score)
final_prob=[]
final_score=[]
print("Running classifier over perturbed text")
for y in tqdm(summarized):
cnta= time.timeit()
txf1=tokenizer.encode_plus(y,return_tensors="pt",max_length=512)
txf2=model(**txf1)[0]
results=torch.softmax(txf2, dim=1).tolist()[0]
final_prob.append(np.argmax(results))
final_score.append(results[np.argmax(results)])
cntb=time.timeit()
time_sum[a]=time_sum[a]+(cntb-cnta)
a+=1
print("Running classifier over input text")
a=0
for y in tqdm(perturbed):
cnta= time.timeit()
txf1=tokenizer.encode_plus(y,return_tensors="pt",max_length=512)
txf2=model(**txf1)[0]
results=torch.softmax(txf2, dim=1).tolist()[0]
final_prob.append(np.argmax(results))
final_score.append(results[np.argmax(results)])
cntb=time.timeit()
time_cls.append(cntb-cnta)
a+=1
print(f"Average time w/o defense={np.mean(time_cls)}")
print(f"Average time w defense={np.mean(time_sum)}")