Dimsralf commited on
Commit
9b4a37b
·
verified ·
1 Parent(s): a3f0c36

Update src/streamlit_app.py

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +27 -32
src/streamlit_app.py CHANGED
@@ -2,39 +2,40 @@ import streamlit as st
2
  import torch
3
  from transformers import AutoTokenizer, AutoModelForSequenceClassification
4
 
5
- # ==========================
6
- # 1. Daftar Dua Model
7
- # ==========================
8
- MODEL_1 = "Dimsralf/indobert_no_ros" # Model Sentimen 1
9
- MODEL_2 = "Dimsralf/indobert_ros" # Model Sentimen 2 (ganti sesuai model Anda)
10
 
11
  label_map = {0: "NEGATIF", 1: "POSITIF"}
12
 
13
- # ==========================
14
- # 2. Loader Model
15
- # ==========================
16
  @st.cache_resource
17
  def load_model(model_name):
18
- tokenizer = AutoTokenizer.from_pretrained(model_name)
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  model = AutoModelForSequenceClassification.from_pretrained(model_name)
20
  model.eval()
21
  return tokenizer, model
22
 
23
- # Load kedua model
24
  tokenizer1, model1 = load_model(MODEL_1)
25
  tokenizer2, model2 = load_model(MODEL_2)
26
 
27
- # ==========================
28
- # 3. UI
29
- # ==========================
30
- st.title("🔍 Demo Analisis Sentimen dengan 2 Model Sekaligus")
31
- st.write("Masukkan kalimat, dan kedua model akan memberikan prediksi masing-masing.")
32
 
33
  text = st.text_input("Masukkan kalimat:")
34
 
35
- # ==========================
36
- # 4. Fungsi Prediksi
37
- # ==========================
38
  def predict(text, tokenizer, model):
39
  inputs = tokenizer(text, return_tensors="pt", truncation=True, padding=True)
40
  with torch.no_grad():
@@ -42,29 +43,23 @@ def predict(text, tokenizer, model):
42
  logits = outputs.logits
43
  probs = torch.softmax(logits, dim=1)
44
  pred_id = torch.argmax(probs, dim=1).item()
45
- label = label_map[pred_id]
46
  prob = probs[0][pred_id].item()
47
  return label, prob
48
 
49
- # ==========================
50
- # 5. Tampilkan Hasil Kedua Model
51
- # ==========================
52
  if text:
53
  label1, prob1 = predict(text, tokenizer1, model1)
54
  label2, prob2 = predict(text, tokenizer2, model2)
55
 
56
- st.write("## 🧠 Hasil Prediksi dari Kedua Model")
57
-
58
  col1, col2 = st.columns(2)
59
 
60
  with col1:
61
- st.subheader("Model Tanpa ROS")
62
- st.write(f"**Nama Model:** `{MODEL_1}`")
63
- st.write(f"**Prediksi:** {label1}")
64
- st.write(f"**Probabilitas:** {prob1:.4f}")
65
 
66
  with col2:
67
- st.subheader("Model Dengan ROS")
68
- st.write(f"**Nama Model:** `{MODEL_2}`")
69
- st.write(f"**Prediksi:** {label2}")
70
- st.write(f"**Probabilitas:** {prob2:.4f}")
 
2
  import torch
3
  from transformers import AutoTokenizer, AutoModelForSequenceClassification
4
 
5
+ MODEL_1 = "Dimsralf/indobert_no_ros"
6
+ MODEL_2 = "Dimsralf/indobert_ros"
 
 
 
7
 
8
  label_map = {0: "NEGATIF", 1: "POSITIF"}
9
 
 
 
 
10
  @st.cache_resource
11
  def load_model(model_name):
12
+ # Coba load tokenizer fast terlebih dahulu
13
+ try:
14
+ tokenizer = AutoTokenizer.from_pretrained(model_name, use_fast=True)
15
+ except Exception as e_fast:
16
+ st.warning(f"Gagal load tokenizer fast untuk {model_name}: {e_fast}")
17
+ try:
18
+ tokenizer = AutoTokenizer.from_pretrained(model_name, use_fast=False)
19
+ except Exception as e_slow:
20
+ st.error(f"Gagal load tokenizer slow untuk {model_name}: {e_slow}")
21
+ # fallback ke tokenizer yang lebih umum
22
+ tokenizer = AutoTokenizer.from_pretrained("bert-base-multilingual-uncased", use_fast=False)
23
+ st.info(f"Gunakan fallback tokenizer bert-base-multilingual-uncased untuk {model_name}")
24
+
25
+ # Load model klasifikasi (asumsi model kamu untuk classification)
26
  model = AutoModelForSequenceClassification.from_pretrained(model_name)
27
  model.eval()
28
  return tokenizer, model
29
 
 
30
  tokenizer1, model1 = load_model(MODEL_1)
31
  tokenizer2, model2 = load_model(MODEL_2)
32
 
33
+ st.title("Analisis Sentimen dengan 2 Model IndoBERT")
34
+ st.write("Model 1:", MODEL_1)
35
+ st.write("Model 2:", MODEL_2)
 
 
36
 
37
  text = st.text_input("Masukkan kalimat:")
38
 
 
 
 
39
  def predict(text, tokenizer, model):
40
  inputs = tokenizer(text, return_tensors="pt", truncation=True, padding=True)
41
  with torch.no_grad():
 
43
  logits = outputs.logits
44
  probs = torch.softmax(logits, dim=1)
45
  pred_id = torch.argmax(probs, dim=1).item()
46
+ label = label_map.get(pred_id, "UNKNOWN")
47
  prob = probs[0][pred_id].item()
48
  return label, prob
49
 
 
 
 
50
  if text:
51
  label1, prob1 = predict(text, tokenizer1, model1)
52
  label2, prob2 = predict(text, tokenizer2, model2)
53
 
54
+ st.write("## Hasil Prediksi")
 
55
  col1, col2 = st.columns(2)
56
 
57
  with col1:
58
+ st.subheader("Model 1 (no_ros)")
59
+ st.write(f"Prediksi: {label1}")
60
+ st.write(f"Probabilitas: {prob1:.4f}")
 
61
 
62
  with col2:
63
+ st.subheader("Model 2 (ros)")
64
+ st.write(f"Prediksi: {label2}")
65
+ st.write(f"Probabilitas: {prob2:.4f}")