Team Ai
Apppublic

ram2001/multi-task_hierarchical_deep-learning_system

sourceHugging Faceupdated 3mo agoView on Hugging Face
0likes
app.py117 linesDownload Raw Back to root
1import streamlit as st2import numpy as np3import pickle4from tensorflow.keras.models import load_model5from tensorflow.keras.preprocessing.sequence import pad_sequences6 7# =========================8# LOAD ARTIFACTS9# =========================10 11@st.cache_resource12def load_artifacts():13 14    model = load_model("multi_task_bilstm_attention.h5")15 16    tokenizer = pickle.load(open("tokenizer.pkl", "rb"))17    le_type = pickle.load(open("le_type.pkl", "rb"))18    le_queue = pickle.load(open("le_queue.pkl", "rb"))19    mlb = pickle.load(open("mlb.pkl", "rb"))20 21    return model, tokenizer, le_type, le_queue, mlb22 23 24model, tokenizer, le_type, le_queue, mlb = load_artifacts()25 26MAX_LEN = 12027 28# =========================29# TEXT PREPROCESS30# =========================31 32def preprocess_text(subject, body):33    text = f"{subject} {body}".lower()34    seq = tokenizer.texts_to_sequences([text])35    padded = pad_sequences(seq, maxlen=MAX_LEN, padding="post")36    return padded37 38 39# =========================40# SAFE PREDICTION FUNCTION41# =========================42 43def predict_ticket(subject, body):44 45    x = preprocess_text(subject, body)46 47    # ---- MODEL PREDICT ----48    preds = model.predict(x, verbose=0)49 50    # Map outputs correctly using layer names51    output_map = dict(zip(model.output_names, preds))52 53    # ===== TYPE =====54    type_pred = output_map[55        [k for k in output_map.keys() if "type" in k.lower()][0]56    ]57 58    type_index = np.argmax(type_pred, axis=1)[0]59    pred_type = le_type.inverse_transform([type_index])[0]60 61    # ===== QUEUE =====62    queue_pred = output_map[63        [k for k in output_map.keys() if "queue" in k.lower()][0]64    ]65 66    queue_index = np.argmax(queue_pred, axis=1)[0]67    pred_queue = le_queue.inverse_transform([queue_index])[0]68 69    # ===== TAGS =====70    tag_pred = output_map[71        [k for k in output_map.keys() if "tag" in k.lower()][0]72    ][0]73 74    TOP_K = 575    THRESHOLD = 0.35   # lower for multilingual robustness76 77    top_idx = tag_pred.argsort()[-TOP_K:][::-1]78 79    tags = [80        mlb.classes_[i]81        for i in top_idx82        if tag_pred[i] >= THRESHOLD83    ]84 85    # fallback (important)86    if len(tags) == 0:87        tags = [mlb.classes_[top_idx[0]]]88 89    return pred_type, pred_queue, tags90 91 92# =========================93# STREAMLIT UI94# =========================95 96st.title("Multilingual Ticket Classification (Hierarchical NLP Model)")97st.markdown("MESSAGE → TYPE → QUEUE → TAGS")98 99subject = st.text_input("Enter Subject")100body = st.text_area("Enter Ticket Message")101 102if st.button("Predict"):103 104    if subject.strip() == "" and body.strip() == "":105        st.warning("Please enter subject or message.")106    else:107 108        pred_type, pred_queue, tags = predict_ticket(subject, body)109 110        st.subheader("Predicted TYPE")111        st.success(pred_type)112 113        st.subheader("Predicted QUEUE")114        st.success(pred_queue)115 116        st.subheader("Predicted TAGS")117        st.write(", ".join(tags))