Zekun Wu commited on
Commit
7d9af7f
1 Parent(s): d8c9fb0
pages/1_Demo_1.py CHANGED
@@ -7,9 +7,10 @@ from utils.model import gpt2
7
  import os
8
 
9
  # Set up the Streamlit interface
 
10
  st.title('Gender Bias Analysis in Text Generation')
11
 
12
-
13
  def check_password():
14
  def password_entered():
15
  if password_input == os.getenv('PASSWORD'):
@@ -17,99 +18,106 @@ def check_password():
17
  else:
18
  st.error("Incorrect Password, please try again.")
19
 
20
- password_input = st.text_input("Enter Password:", type="password")
21
- submit_button = st.button("Submit", on_click=password_entered)
22
 
23
- if submit_button and not st.session_state.get('password_correct', False):
24
- st.error("Please enter a valid password to access the demo.")
 
25
 
 
 
 
 
26
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
  if not st.session_state.get('password_correct', False):
28
  check_password()
29
  else:
30
  st.sidebar.success("Password Verified. Proceed with the demo.")
31
-
32
- if 'data_size' not in st.session_state:
33
- st.session_state['data_size'] = 10
34
- if 'bold' not in st.session_state:
35
- st.session_state['bold'] = load_dataset("AlexaAI/bold", split="train")
36
- if 'female_bold' not in st.session_state:
37
- st.session_state['female_bold'] = []
38
- if 'male_bold' not in st.session_state:
39
- st.session_state['male_bold'] = []
40
 
41
  st.subheader('Step 1: Set Data Size')
42
  data_size = st.slider('Select number of samples per category:', min_value=1, max_value=50,
43
- value=st.session_state['data_size'])
44
  st.session_state['data_size'] = data_size
45
 
46
  if st.button('Show Data'):
47
- st.session_state['female_bold'] = sample(
48
- [p for p in st.session_state['bold'] if p['category'] == 'American_actresses'], data_size)
49
- st.session_state['male_bold'] = sample(
50
- [p for p in st.session_state['bold'] if p['category'] == 'American_actors'], data_size)
51
-
52
  st.write(f'Sampled {data_size} female and male American actors.')
53
- st.write('**Female Samples:**', pd.DataFrame(st.session_state['female_bold']))
54
- st.write('**Male Samples:**', pd.DataFrame(st.session_state['male_bold']))
55
 
56
- if st.session_state['female_bold'] and st.session_state['male_bold']:
57
  st.subheader('Step 2: Generate Text')
58
-
59
  if st.button('Generate Text'):
60
- GPT2 = gpt2()
61
- st.session_state['male_prompts'] = [p['prompts'][0] for p in st.session_state['male_bold']]
62
- st.session_state['female_prompts'] = [p['prompts'][0] for p in st.session_state['female_bold']]
63
-
64
- progress_bar = st.progress(0)
65
-
66
- st.write('Generating text for male prompts...')
67
- male_generation = GPT2.text_generation(st.session_state['male_prompts'], pad_token_id=50256, max_length=50,
68
- do_sample=False, truncation=True)
69
- st.session_state['male_continuations'] = [gen[0]['generated_text'].replace(prompt, '') for gen, prompt in
70
- zip(male_generation, st.session_state['male_prompts'])]
71
-
72
- progress_bar.progress(50)
73
-
74
- st.write('Generating text for female prompts...')
75
- female_generation = GPT2.text_generation(st.session_state['female_prompts'], pad_token_id=50256,
76
- max_length=50, do_sample=False, truncation=True)
77
- st.session_state['female_continuations'] = [gen[0]['generated_text'].replace(prompt, '') for gen, prompt in
78
- zip(female_generation, st.session_state['female_prompts'])]
79
-
80
- progress_bar.progress(100)
81
- st.write('Text generation completed.')
82
 
83
  if st.session_state.get('male_continuations') and st.session_state.get('female_continuations'):
84
- st.subheader('Step 3: Sample Generated Texts')
85
-
86
- st.write("Male Data Samples:")
87
- samples_df = pd.DataFrame({
88
- 'Male Prompt': st.session_state['male_prompts'],
89
- 'Male Continuation': st.session_state['male_continuations'],
90
- })
91
- st.write(samples_df)
92
-
93
- st.write("Female Data Samples:")
94
- samples_df = pd.DataFrame({
95
- 'Female Prompt': st.session_state['female_prompts'],
96
- 'Female Continuation': st.session_state['female_continuations']
97
- })
98
- st.write(samples_df)
99
-
100
  if st.button('Evaluate'):
101
- st.subheader('Step 4: Regard Results')
102
- regard = Regard("compare")
103
- st.write('Computing regard results to compare male and female continuations...')
104
-
105
- with st.spinner('Computing regard results...'):
106
- regard_results = regard.compute(data=st.session_state['male_continuations'],
107
- references=st.session_state['female_continuations'])
108
- st.write('**Raw Regard Results:**')
109
- st.json(regard_results)
110
-
111
- regard_results_avg = regard.compute(data=st.session_state['male_continuations'],
112
- references=st.session_state['female_continuations'],
113
- aggregation='average')
114
- st.write('**Average Regard Results:**')
115
- st.json(regard_results_avg)
 
7
  import os
8
 
9
  # Set up the Streamlit interface
10
+ st.set_page_config(page_title="Gender Bias Analysis", page_icon="🔍", layout="wide")
11
  st.title('Gender Bias Analysis in Text Generation')
12
 
13
+ # Password protection function
14
  def check_password():
15
  def password_entered():
16
  if password_input == os.getenv('PASSWORD'):
 
18
  else:
19
  st.error("Incorrect Password, please try again.")
20
 
21
+ if 'password_correct' not in st.session_state:
22
+ st.session_state['password_correct'] = False
23
 
24
+ if not st.session_state['password_correct']:
25
+ password_input = st.text_input("Enter Password:", type="password")
26
+ st.button("Submit", on_click=password_entered)
27
 
28
+ # Data loading function
29
+ def load_data():
30
+ if 'bold' not in st.session_state:
31
+ st.session_state['bold'] = load_dataset("AlexaAI/bold", split="train")
32
 
33
+ # Sampling function
34
+ def sample_data(data_size):
35
+ st.session_state['female_bold'] = sample(
36
+ [p for p in st.session_state['bold'] if p['category'] == 'American_actresses'], data_size)
37
+ st.session_state['male_bold'] = sample(
38
+ [p for p in st.session_state['bold'] if p['category'] == 'American_actors'], data_size)
39
+
40
+ # Text generation function
41
+ def generate_text():
42
+ GPT2 = gpt2()
43
+ st.session_state['male_prompts'] = [p['prompts'][0] for p in st.session_state['male_bold']]
44
+ st.session_state['female_prompts'] = [p['prompts'][0] for p in st.session_state['female_bold']]
45
+
46
+ progress_bar = st.progress(0)
47
+ st.write('Generating text for male prompts...')
48
+ male_generation = GPT2.text_generation(st.session_state['male_prompts'], pad_token_id=50256, max_length=50,
49
+ do_sample=False, truncation=True)
50
+ st.session_state['male_continuations'] = [gen[0]['generated_text'].replace(prompt, '') for gen, prompt in
51
+ zip(male_generation, st.session_state['male_prompts'])]
52
+
53
+ progress_bar.progress(50)
54
+
55
+ st.write('Generating text for female prompts...')
56
+ female_generation = GPT2.text_generation(st.session_state['female_prompts'], pad_token_id=50256,
57
+ max_length=50, do_sample=False, truncation=True)
58
+ st.session_state['female_continuations'] = [gen[0]['generated_text'].replace(prompt, '') for gen, prompt in
59
+ zip(female_generation, st.session_state['female_prompts'])]
60
+
61
+ progress_bar.progress(100)
62
+ st.write('Text generation completed.')
63
+
64
+ # Display data samples function
65
+ def display_samples():
66
+ st.write("### Male Data Samples")
67
+ samples_df = pd.DataFrame({
68
+ 'Male Prompt': st.session_state['male_prompts'],
69
+ 'Male Continuation': st.session_state['male_continuations'],
70
+ })
71
+ st.dataframe(samples_df)
72
+
73
+ st.write("### Female Data Samples")
74
+ samples_df = pd.DataFrame({
75
+ 'Female Prompt': st.session_state['female_prompts'],
76
+ 'Female Continuation': st.session_state['female_continuations']
77
+ })
78
+ st.dataframe(samples_df)
79
+
80
+ # Evaluate regard function
81
+ def evaluate_regard():
82
+ regard = Regard("compare")
83
+ st.write('Computing regard results to compare male and female continuations...')
84
+
85
+ with st.spinner('Computing regard results...'):
86
+ regard_results = regard.compute(data=st.session_state['male_continuations'],
87
+ references=st.session_state['female_continuations'])
88
+ st.write('**Raw Regard Results:**')
89
+ st.json(regard_results)
90
+
91
+ regard_results_avg = regard.compute(data=st.session_state['male_continuations'],
92
+ references=st.session_state['female_continuations'],
93
+ aggregation='average')
94
+ st.write('**Average Regard Results:**')
95
+ st.json(regard_results_avg)
96
+
97
+ # Main app logic
98
  if not st.session_state.get('password_correct', False):
99
  check_password()
100
  else:
101
  st.sidebar.success("Password Verified. Proceed with the demo.")
102
+ load_data()
 
 
 
 
 
 
 
 
103
 
104
  st.subheader('Step 1: Set Data Size')
105
  data_size = st.slider('Select number of samples per category:', min_value=1, max_value=50,
106
+ value=st.session_state.get('data_size', 10))
107
  st.session_state['data_size'] = data_size
108
 
109
  if st.button('Show Data'):
110
+ sample_data(data_size)
 
 
 
 
111
  st.write(f'Sampled {data_size} female and male American actors.')
112
+ display_samples()
 
113
 
114
+ if st.session_state.get('female_bold') and st.session_state.get('male_bold'):
115
  st.subheader('Step 2: Generate Text')
 
116
  if st.button('Generate Text'):
117
+ generate_text()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
118
 
119
  if st.session_state.get('male_continuations') and st.session_state.get('female_continuations'):
120
+ st.subheader('Step 3: Evaluate')
121
+ display_samples()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
122
  if st.button('Evaluate'):
123
+ evaluate_regard()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
utils/__pycache__/__init__.cpython-310.pyc ADDED
Binary file (183 Bytes). View file
 
utils/__pycache__/metric.cpython-310.pyc ADDED
Binary file (2.55 kB). View file
 
utils/__pycache__/model.cpython-310.pyc ADDED
Binary file (785 Bytes). View file