import gradio as gr import torch import joblib from transformers import AutoTokenizer from dinstilBert import MultiTaskBERT model = MultiTaskBERT() model.load_state_dict(torch.load("model.pt", map_location="cpu")) model.eval() tokenizer = AutoTokenizer.from_pretrained("distilbert-base-multilingual-cased") le = joblib.load("label_encoder.pkl") device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model.to(device) def predict(text): inputs = tokenizer(text, return_tensors="pt", truncation=True, padding=True).to(device) with torch.no_grad(): sentiment_logits, lang_logits = model(inputs["input_ids"], inputs["attention_mask"]) pred_sentiment = sentiment_logits.argmax(dim=1).item() pred_lang = lang_logits.argmax(dim=1).item() if pred_sentiment == 2: sentiment_label = "positive" elif pred_sentiment == 1: sentiment_label = "neutral" else: sentiment_label = "negative" lang_code_map = { 'de': 'German', 'es': 'Espanyol', 'en': 'English', 'fr': 'French' } lang_code = le.inverse_transform([pred_lang])[0] lang_label = lang_code_map.get(lang_code, "Unknown") return sentiment_label, lang_label interface = gr.Interface( fn=predict, inputs=gr.Textbox(label="Masukkan Teks Dalam Bahasa (Inggris/Jerman/Spanyol/Perancis)"), outputs=[ gr.Textbox(label="Prediksi Sentiment (Positif/Neutral/Negatif)"), gr.Textbox(label="Prediksi Bahasa") ], title="Multitask DistilBERT: Sentiment + Language", description="Prediksi sentimen dan bahasa dari teks menggunakan model multitask DistilBERT." ) interface.launch()