Update app.py
Browse files
app.py
CHANGED
|
@@ -6,7 +6,7 @@ import lightgbm as lgb
|
|
| 6 |
from sentence_transformers import SentenceTransformer
|
| 7 |
import numpy as np
|
| 8 |
|
| 9 |
-
# Load files from the model repo
|
| 10 |
repo_id = "Nawal20/Essay"
|
| 11 |
|
| 12 |
ridge_path = hf_hub_download(repo_id=repo_id, filename="ridge_model.pkl")
|
|
@@ -22,36 +22,36 @@ encoder = joblib.load(encoder_path)
|
|
| 22 |
with open(metadata_path, "r") as f:
|
| 23 |
metadata_columns = json.load(f)
|
| 24 |
|
| 25 |
-
# Load SBERT model
|
| 26 |
sbert = SentenceTransformer("sentence-transformers/paraphrase-mpnet-base-v2")
|
| 27 |
|
| 28 |
-
def predict_score(essay_text, gender, race_ethnicity, assignment, prompt_name,
|
| 29 |
-
# Encode essay
|
| 30 |
-
essay_embedding = sbert.encode([essay_text])
|
| 31 |
-
|
| 32 |
-
#
|
| 33 |
metadata_input = {
|
| 34 |
-
"gender":
|
| 35 |
-
"race_ethnicity":
|
| 36 |
-
"assignment":
|
| 37 |
-
"prompt_name":
|
| 38 |
-
"economically_disadvantaged":
|
| 39 |
-
"student_disability_status":
|
| 40 |
-
"ell_status":
|
| 41 |
}
|
| 42 |
|
| 43 |
-
#
|
| 44 |
metadata_values = [metadata_input[col] for col in metadata_columns]
|
| 45 |
-
metadata_array = encoder.transform([metadata_values]) # shape
|
| 46 |
|
| 47 |
-
# Combine essay
|
| 48 |
-
full_input = np.hstack([essay_embedding, metadata_array])
|
| 49 |
|
| 50 |
-
# Predict
|
| 51 |
ridge_score = ridge.predict(full_input)[0]
|
| 52 |
lgb_score = lgb_model.predict(full_input)[0]
|
| 53 |
-
|
| 54 |
-
|
| 55 |
return final_score
|
| 56 |
|
| 57 |
# Gradio UI
|
|
@@ -61,14 +61,14 @@ iface = gr.Interface(
|
|
| 61 |
gr.Textbox(label="Essay Text", lines=10, placeholder="Paste your essay here..."),
|
| 62 |
gr.Dropdown(["Male", "Female", "Other"], label="Gender"),
|
| 63 |
gr.Dropdown(["Asian", "Black", "Hispanic", "White", "Other"], label="Race/Ethnicity"),
|
| 64 |
-
gr.Dropdown(["Informative", "Argumentative", "Narrative"], label="Assignment"),
|
| 65 |
-
gr.Dropdown(["Education Benefits", "Technology Impact", "Climate Change"], label="Prompt Name"),
|
| 66 |
gr.Dropdown(["Yes", "No"], label="Economically Disadvantaged"),
|
| 67 |
-
gr.Dropdown(["
|
| 68 |
gr.Dropdown(["Yes", "No"], label="ELL Status"),
|
| 69 |
],
|
| 70 |
outputs=gr.Number(label="Predicted Essay Score"),
|
| 71 |
-
title="Automated Essay Scoring App"
|
| 72 |
)
|
| 73 |
|
| 74 |
iface.launch()
|
|
|
|
| 6 |
from sentence_transformers import SentenceTransformer
|
| 7 |
import numpy as np
|
| 8 |
|
| 9 |
+
# Load files from the model repo
|
| 10 |
repo_id = "Nawal20/Essay"
|
| 11 |
|
| 12 |
ridge_path = hf_hub_download(repo_id=repo_id, filename="ridge_model.pkl")
|
|
|
|
| 22 |
with open(metadata_path, "r") as f:
|
| 23 |
metadata_columns = json.load(f)
|
| 24 |
|
| 25 |
+
# Load SBERT model
|
| 26 |
sbert = SentenceTransformer("sentence-transformers/paraphrase-mpnet-base-v2")
|
| 27 |
|
| 28 |
+
def predict_score(essay_text, gender, race_ethnicity, assignment, prompt_name, disadvantaged, disability, ell_status):
|
| 29 |
+
# Encode the essay
|
| 30 |
+
essay_embedding = sbert.encode([essay_text]) # shape (1, 768)
|
| 31 |
+
|
| 32 |
+
# Create metadata dict from input
|
| 33 |
metadata_input = {
|
| 34 |
+
"gender": gender,
|
| 35 |
+
"race_ethnicity": race_ethnicity,
|
| 36 |
+
"assignment": assignment,
|
| 37 |
+
"prompt_name": prompt_name,
|
| 38 |
+
"economically_disadvantaged": disadvantaged,
|
| 39 |
+
"student_disability_status": disability,
|
| 40 |
+
"ell_status": ell_status
|
| 41 |
}
|
| 42 |
|
| 43 |
+
# Create input array based on column order
|
| 44 |
metadata_values = [metadata_input[col] for col in metadata_columns]
|
| 45 |
+
metadata_array = encoder.transform([metadata_values]) # shape (1, N)
|
| 46 |
|
| 47 |
+
# Combine essay + metadata
|
| 48 |
+
full_input = np.hstack([essay_embedding.reshape(1, -1), metadata_array.toarray()])
|
| 49 |
|
| 50 |
+
# Predict scores
|
| 51 |
ridge_score = ridge.predict(full_input)[0]
|
| 52 |
lgb_score = lgb_model.predict(full_input)[0]
|
| 53 |
+
final_score = round((ridge_score + lgb_score) / 2, 2)
|
| 54 |
+
|
| 55 |
return final_score
|
| 56 |
|
| 57 |
# Gradio UI
|
|
|
|
| 61 |
gr.Textbox(label="Essay Text", lines=10, placeholder="Paste your essay here..."),
|
| 62 |
gr.Dropdown(["Male", "Female", "Other"], label="Gender"),
|
| 63 |
gr.Dropdown(["Asian", "Black", "Hispanic", "White", "Other"], label="Race/Ethnicity"),
|
| 64 |
+
gr.Dropdown(["Informative", "Argumentative", "Narrative"], label="Assignment"),
|
| 65 |
+
gr.Dropdown(["Education Benefits", "Technology Impact", "Climate Change"], label="Prompt Name"),
|
| 66 |
gr.Dropdown(["Yes", "No"], label="Economically Disadvantaged"),
|
| 67 |
+
gr.Dropdown(["None", "Learning", "Physical", "Other"], label="Student has Disability"),
|
| 68 |
gr.Dropdown(["Yes", "No"], label="ELL Status"),
|
| 69 |
],
|
| 70 |
outputs=gr.Number(label="Predicted Essay Score"),
|
| 71 |
+
title="📘 Automated Essay Scoring App"
|
| 72 |
)
|
| 73 |
|
| 74 |
iface.launch()
|