Emily McMilin commited on
Commit
d4b589f
1 Parent(s): 55392f1

fix bug causing add-own-model to fail

Browse files
Files changed (1) hide show
  1. app.py +16 -18
app.py CHANGED
@@ -1,5 +1,4 @@
1
  # %%
2
- # from http.client import TEMPORARY_REDIRECT
3
  import gradio as gr
4
  import matplotlib.pyplot as plt
5
  import numpy as np
@@ -9,18 +8,19 @@ from matplotlib.ticker import MaxNLocator
9
  from transformers import pipeline
10
  from winogender_sentences import get_sentences
11
 
 
 
 
12
  MODEL_NAME_DICT = {
13
  "roberta-large": "RoBERTa-large",
14
  "bert-large-uncased": "BERT-large",
15
  "roberta-base": "RoBERTa-base",
16
  "bert-base-uncased": "BERT-base",
 
17
  }
18
  MODEL_NAMES = list(MODEL_NAME_DICT.keys())
19
 
20
 
21
- OWN_MODEL_NAME = 'add-a-model'
22
- PICK_YOUR_OWN_LABEL = 'pick-your-own'
23
-
24
  DECIMAL_PLACES = 1
25
  EPS = 1e-5 # to avoid /0 errors
26
  NUM_PTS_TO_AVERAGE = 2
@@ -33,7 +33,6 @@ NUM_PTS = 30
33
  DATES = np.linspace(START_YEAR, STOP_YEAR, NUM_PTS).astype(int).tolist()
34
  DATES = [f'{d}' for d in DATES]
35
 
36
-
37
  GENDERED_LIST = [
38
  ['he', 'she'],
39
  ['him', 'her'],
@@ -52,10 +51,7 @@ GENDERED_LIST = [
52
 
53
  # %%
54
  # Fire up the models
55
- models = dict()
56
-
57
- for bert_like in MODEL_NAMES:
58
- models[bert_like] = pipeline("fill-mask", model=bert_like)
59
 
60
  # %%
61
  # Get the winogender sentences
@@ -64,7 +60,6 @@ occs = sorted(list({sentence_id.split('_')[0]
64
  for sentence_id in winogender_sentences}))
65
 
66
  # %%
67
-
68
  def get_gendered_token_ids():
69
  male_gendered_tokens = [list[0] for list in GENDERED_LIST]
70
  female_gendered_tokens = [list[1] for list in GENDERED_LIST]
@@ -112,8 +107,7 @@ def get_figure(df, model_name, occ):
112
  ax.axis('tight')
113
  ax.set_xlabel("Sentence number")
114
  ax.set_ylabel("Uncertainty metric")
115
- ax.set_title(
116
- f"{MODEL_NAME_DICT[model_name]} gender pronoun uncertainty in '{occ}' sentences")
117
  return fig
118
 
119
 
@@ -137,7 +131,7 @@ def predict_gender_pronouns(
137
  if model_name is None or model_name == '':
138
  model_name = MODEL_NAMES[0]
139
  model = models[model_name]
140
- elif model_name not in MODEL_NAMES:
141
  model = pipeline("fill-mask", model=own_model_name)
142
  else:
143
  model = models[model_name]
@@ -200,11 +194,12 @@ def predict_gender_pronouns(
200
 
201
  uncertain_df = uncertain_df.reset_index().rename(
202
  columns={'index': 'Sentence number'})
 
203
  return (
 
204
  uncertain_df,
205
  get_figure(uncertain_df, model_name, occ),
206
  )
207
- # %%
208
 
209
 
210
  demo = gr.Blocks()
@@ -227,13 +222,13 @@ with demo:
227
 
228
  with gr.Row():
229
  model_name = gr.Radio(
230
- MODEL_NAMES + [OWN_MODEL_NAME],
231
  type="value",
232
- label="Pick a preloaded BERT-like model for uncertainty evaluation (note: BERT-base performance least consistant)...",
233
  )
234
  own_model_name = gr.Textbox(
235
  label=f"...Or, if you selected an '{OWN_MODEL_NAME}' model, put any Hugging Face pipeline model name \
236
- (that supports the [fill-mask task](https://huggingface.co/models?pipeline_tag=fill-mask)) here.",
237
  )
238
 
239
  with gr.Row():
@@ -269,12 +264,15 @@ with demo:
269
  female_fig = gr.Plot(type="auto")
270
  with gr.Row():
271
  female_df = gr.Dataframe()
 
 
 
272
 
273
  uncertain_btn.click(
274
  fn=predict_gender_pronouns,
275
  inputs=[model_name, own_model_name, input_texts, occ_box],
276
  # inputs=date_example,
277
- outputs=[female_df, female_fig]
278
  )
279
 
280
  demo.launch(debug=True)
 
1
  # %%
 
2
  import gradio as gr
3
  import matplotlib.pyplot as plt
4
  import numpy as np
 
8
  from transformers import pipeline
9
  from winogender_sentences import get_sentences
10
 
11
+ OWN_MODEL_NAME = 'add-a-model'
12
+ PICK_YOUR_OWN_LABEL = 'pick-your-own'
13
+
14
  MODEL_NAME_DICT = {
15
  "roberta-large": "RoBERTa-large",
16
  "bert-large-uncased": "BERT-large",
17
  "roberta-base": "RoBERTa-base",
18
  "bert-base-uncased": "BERT-base",
19
+ OWN_MODEL_NAME: "Your model's"
20
  }
21
  MODEL_NAMES = list(MODEL_NAME_DICT.keys())
22
 
23
 
 
 
 
24
  DECIMAL_PLACES = 1
25
  EPS = 1e-5 # to avoid /0 errors
26
  NUM_PTS_TO_AVERAGE = 2
 
33
  DATES = np.linspace(START_YEAR, STOP_YEAR, NUM_PTS).astype(int).tolist()
34
  DATES = [f'{d}' for d in DATES]
35
 
 
36
  GENDERED_LIST = [
37
  ['he', 'she'],
38
  ['him', 'her'],
 
51
 
52
  # %%
53
  # Fire up the models
54
+ models = {m : pipeline("fill-mask", model=m) for m in MODEL_NAMES if m != OWN_MODEL_NAME}
 
 
 
55
 
56
  # %%
57
  # Get the winogender sentences
 
60
  for sentence_id in winogender_sentences}))
61
 
62
  # %%
 
63
  def get_gendered_token_ids():
64
  male_gendered_tokens = [list[0] for list in GENDERED_LIST]
65
  female_gendered_tokens = [list[1] for list in GENDERED_LIST]
 
107
  ax.axis('tight')
108
  ax.set_xlabel("Sentence number")
109
  ax.set_ylabel("Uncertainty metric")
110
+ ax.set_title(f"{MODEL_NAME_DICT[model_name]} gender pronoun uncertainty in '{occ}' sentences")
 
111
  return fig
112
 
113
 
 
131
  if model_name is None or model_name == '':
132
  model_name = MODEL_NAMES[0]
133
  model = models[model_name]
134
+ elif model_name == OWN_MODEL_NAME:
135
  model = pipeline("fill-mask", model=own_model_name)
136
  else:
137
  model = models[model_name]
 
194
 
195
  uncertain_df = uncertain_df.reset_index().rename(
196
  columns={'index': 'Sentence number'})
197
+
198
  return (
199
+ target_text,
200
  uncertain_df,
201
  get_figure(uncertain_df, model_name, occ),
202
  )
 
203
 
204
 
205
  demo = gr.Blocks()
 
222
 
223
  with gr.Row():
224
  model_name = gr.Radio(
225
+ MODEL_NAMES,
226
  type="value",
227
+ label="Pick a preloaded BERT-like model for uncertainty evaluation (note: BERT-base performance least consistent)...",
228
  )
229
  own_model_name = gr.Textbox(
230
  label=f"...Or, if you selected an '{OWN_MODEL_NAME}' model, put any Hugging Face pipeline model name \
231
+ (that supports the `fill-mask` task (see list at https://huggingface.co/models?pipeline_tag=fill-mask).",
232
  )
233
 
234
  with gr.Row():
 
264
  female_fig = gr.Plot(type="auto")
265
  with gr.Row():
266
  female_df = gr.Dataframe()
267
+ with gr.Row():
268
+ display_text = gr.Textbox(
269
+ type="auto", label="Sample of text fed to model")
270
 
271
  uncertain_btn.click(
272
  fn=predict_gender_pronouns,
273
  inputs=[model_name, own_model_name, input_texts, occ_box],
274
  # inputs=date_example,
275
+ outputs=[display_text, female_df, female_fig]
276
  )
277
 
278
  demo.launch(debug=True)