|
import streamlit as st |
|
import joblib |
|
from sentence_transformers import SentenceTransformer |
|
import numpy as np |
|
|
|
|
|
@st.cache_resource |
|
def load_embedding_model(): |
|
return SentenceTransformer('neuml/pubmedbert-base-embeddings') |
|
|
|
|
|
@st.cache_resource |
|
def load_multilabel_model(): |
|
with open("Int_MLC.pkl", "rb") as file: |
|
return joblib.load(file) |
|
|
|
|
|
def get_embeddings(title, abstract, embedding_model): |
|
|
|
combined_text = title + " " + abstract |
|
return embedding_model.encode(combined_text) |
|
|
|
|
|
LABELS = ["device", "screening", "drug", "surgery", "imaging", "telemedicine"] |
|
|
|
def decode_predictions(predictions): |
|
return [label for label, pred in zip(LABELS, predictions) if pred == 1] |
|
|
|
|
|
def main(): |
|
st.title("Multilabel Classifier for Titles and Abstracts") |
|
|
|
|
|
title = st.text_input("Enter the Title:") |
|
abstract = st.text_area("Enter the Abstract:") |
|
|
|
|
|
embedding_model = load_embedding_model() |
|
multilabel_model = load_multilabel_model() |
|
|
|
|
|
if st.button("Predict Labels"): |
|
if title.strip() == "" or abstract.strip() == "": |
|
st.error("Both Title and Abstract are required!") |
|
else: |
|
|
|
embeddings = get_embeddings(title, abstract, embedding_model) |
|
|
|
|
|
predictions = multilabel_model.predict([embeddings])[0] |
|
|
|
|
|
predicted_labels = decode_predictions(predictions) |
|
|
|
|
|
if predicted_labels: |
|
st.success(f"The predicted labels are: {', '.join(predicted_labels)}") |
|
else: |
|
st.warning("No relevant labels were predicted.") |
|
|
|
if __name__ == "__main__": |
|
main() |
|
|
|
|