sree4411 commited on
Commit
5354f7b
Β·
verified Β·
1 Parent(s): ca0d8d9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +12 -12
app.py CHANGED
@@ -2,7 +2,7 @@ import pickle
2
  import streamlit as st
3
  import numpy as np
4
 
5
- # --- Load saved model, vectorizer, and binarizer ---
6
  with open("vectorizer (3).pkl", "rb") as f:
7
  vectorizer = pickle.load(f)
8
 
@@ -12,37 +12,37 @@ with open("model (6).pkl", "rb") as f:
12
  with open("binarizer (3).pkl", "rb") as f:
13
  mlb = pickle.load(f)
14
 
15
- # --- Streamlit App UI ---
16
  st.title("πŸ”– Stack Overflow Tags Predictor")
17
  st.markdown("Enter a question title and description. Tags will be predicted automatically based on model confidence.")
18
 
19
  title = st.text_input("πŸ“Œ Enter Question Title")
20
  description = st.text_area("πŸ“ Enter Question Description", height=150)
21
 
22
- # --- Prediction Logic ---
 
 
23
  def predict_tags_auto(title, description, threshold=0.2):
24
  input_text = title + " " + description
25
  input_vector = vectorizer.transform([input_text])
26
 
27
- # Get class probabilities from model
28
- probas_list = model.predict_proba(input_vector) # List of arrays
29
 
30
- # Convert list of (1, n_classes) to shape (1, n_classes)
31
- proba_matrix = np.hstack([p[:, 1] if p.shape[1] == 2 else p[:, 0] for p in probas_list])
32
 
33
  # Apply threshold
34
- predicted_binary = (proba_matrix >= threshold).astype(int).reshape(1, -1)
35
 
36
- # Decode binary predictions to tag labels
37
  tags = mlb.inverse_transform(predicted_binary)
38
- return tags[0] if tags and len(tags[0]) > 0 else []
39
 
40
- # --- Predict Button ---
41
  if st.button("Predict Tags"):
42
  if not title.strip() or not description.strip():
43
  st.warning("⚠️ Please enter both title and description.")
44
  else:
45
- tags = predict_tags_auto(title, description, threshold=0.4)
46
  if tags:
47
  st.success("βœ… Predicted Tags: " + ", ".join(tags))
48
  else:
 
2
  import streamlit as st
3
  import numpy as np
4
 
5
+ # Load saved vectorizer, model, and binarizer
6
  with open("vectorizer (3).pkl", "rb") as f:
7
  vectorizer = pickle.load(f)
8
 
 
12
  with open("binarizer (3).pkl", "rb") as f:
13
  mlb = pickle.load(f)
14
 
 
15
  st.title("πŸ”– Stack Overflow Tags Predictor")
16
  st.markdown("Enter a question title and description. Tags will be predicted automatically based on model confidence.")
17
 
18
  title = st.text_input("πŸ“Œ Enter Question Title")
19
  description = st.text_area("πŸ“ Enter Question Description", height=150)
20
 
21
+ # πŸ”§ Adjust this to control how many tags are returned
22
+ threshold = 0.2 # Lower threshold means more tags predicted
23
+
24
  def predict_tags_auto(title, description, threshold=0.2):
25
  input_text = title + " " + description
26
  input_vector = vectorizer.transform([input_text])
27
 
28
+ # Get probabilities for each tag
29
+ probas = model.predict_proba(input_vector)
30
 
31
+ # Combine probabilities from each classifier
32
+ probas_array = np.array([class_proba[0] for class_proba in probas]) # shape: (n_classes,)
33
 
34
  # Apply threshold
35
+ predicted_binary = (probas_array >= threshold).astype(int).reshape(1, -1)
36
 
37
+ # Convert binary to tags
38
  tags = mlb.inverse_transform(predicted_binary)
39
+ return tags[0] if tags else []
40
 
 
41
  if st.button("Predict Tags"):
42
  if not title.strip() or not description.strip():
43
  st.warning("⚠️ Please enter both title and description.")
44
  else:
45
+ tags = predict_tags_auto(title, description, threshold)
46
  if tags:
47
  st.success("βœ… Predicted Tags: " + ", ".join(tags))
48
  else: