MuhammadKhoirul010 commited on
Commit
d54af33
·
verified ·
1 Parent(s): adc3439

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +119 -0
app.py ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from transformers import T5Tokenizer, T5ForConditionalGeneration # Import T5Tokenizer dan T5ForConditionalGeneration
3
+ import torch
4
+
5
+ # ---------- LOAD MODEL DAN TOKENIZER ----------
6
+ try:
7
+ # Memuat tokenizer dan model secara terpisah untuk model T5
8
+ tokenizer = T5Tokenizer.from_pretrained("cahya/t5-base-indonesian-summarization-cased")
9
+ model = T5ForConditionalGeneration.from_pretrained("cahya/t5-base-indonesian-summarization-cased")
10
+
11
+ # Pindahkan model ke GPU jika tersedia
12
+ device = 0 if torch.cuda.is_available() else -1
13
+ if device != -1:
14
+ model.to(f"cuda:{device}")
15
+
16
+ print("Model dan tokenizer Bahasa Indonesia berhasil dimuat.")
17
+ except Exception as e:
18
+ tokenizer = None
19
+ model = None
20
+ print(f"Error saat memuat model dan tokenizer: {str(e)}") # Cetak error ke konsol jika gagal dimuat
21
+
22
+ # ---------- SUMMARIZATION FUNCTION ----------
23
+ def summarize_text_simple(text_input, min_length_val=30, max_length_val=150):
24
+ # Cek apakah model dan tokenizer berhasil dimuat
25
+ if tokenizer is None or model is None:
26
+ return "❌ Error: Model ringkasan gagal dimuat. Coba lagi nanti."
27
+
28
+ if not text_input.strip():
29
+ return "⚠️ Mohon masukkan teks yang ingin diringkas!"
30
+
31
+ # Pastikan panjang minimum dan maksimum masuk akal
32
+ if min_length_val >= max_length_val:
33
+ return "⚠️ Panjang minimum harus lebih kecil dari panjang maksimum!"
34
+ if min_length_val <= 0 or max_length_val <= 0:
35
+ return "⚠️ Panjang tidak boleh nol atau negatif!"
36
+
37
+ try:
38
+ # Menambahkan prefix "summarize: " yang umum digunakan untuk T5 summarization
39
+ # Juga menambahkan truncation=True di tokenizer
40
+ input_ids = tokenizer.encode("summarize: " + text_input,
41
+ return_tensors="pt",
42
+ max_length=512, # Batasi panjang input token T5 (umumnya 512)
43
+ truncation=True)
44
+
45
+ # Pindahkan input_ids ke GPU jika model ada di GPU
46
+ if device != -1:
47
+ input_ids = input_ids.to(f"cuda:{device}")
48
+
49
+ # Lakukan generasi ringkasan
50
+ summary_ids = model.generate(
51
+ input_ids,
52
+ min_length=int(min_length_val),
53
+ max_length=int(max_length_val),
54
+ num_beams=4, # Jumlah beam untuk beam search (meningkatkan kualitas)
55
+ early_stopping=True # Hentikan generasi lebih awal jika semua beam selesai
56
+ )
57
+
58
+ # Dekode token hasil menjadi teks
59
+ summarized_text = tokenizer.decode(summary_ids[0], skip_special_tokens=True)
60
+
61
+ result_message = f"""
62
+ <h3>Teks Ringkasan Anda:</h3>
63
+ <p>{summarized_text}</p>
64
+ """
65
+
66
+ return result_message
67
+
68
+ except Exception as e:
69
+ return f"❌ Terjadi kesalahan saat meringkas: {str(e)}"
70
+
71
+ # ---------- GRADIO INTERFACE ----------
72
+ with gr.Blocks(title="Aplikasi Ringkasan Teks Sederhana (ID)") as demo:
73
+ gr.Markdown("# 📝 Aplikasi Ringkasan Teks Sederhana (Bahasa Indonesia)")
74
+ gr.Markdown("Masukkan teks panjang berbahasa Indonesia di bawah ini untuk mendapatkan versi ringkasnya.")
75
+
76
+ with gr.Row():
77
+ text_input = gr.Textbox(
78
+ label="Teks Asli (Bahasa Indonesia)",
79
+ placeholder="Masukkan teks panjang berbahasa Indonesia yang ingin Anda ringkas di sini...",
80
+ lines=10
81
+ )
82
+
83
+ with gr.Row():
84
+ min_length_slider = gr.Slider(
85
+ minimum=10,
86
+ maximum=100,
87
+ value=30,
88
+ step=1,
89
+ label="Panjang Ringkasan Minimum"
90
+ )
91
+ max_length_slider = gr.Slider(
92
+ minimum=50,
93
+ maximum=200, # Batasi maksimum yang lebih masuk akal untuk ringkasan
94
+ value=80,
95
+ step=1,
96
+ label="Panjang Ringkasan Maksimum"
97
+ )
98
+
99
+ summarize_btn = gr.Button("✨ Ringkas Sekarang")
100
+
101
+ summary_output = gr.HTML(label="Hasil Ringkasan")
102
+
103
+ # Menghubungkan tombol ke fungsi ringkasan
104
+ summarize_btn.click(
105
+ fn=summarize_text_simple,
106
+ inputs=[text_input, min_length_slider, max_length_slider],
107
+ outputs=summary_output
108
+ )
109
+
110
+ gr.Markdown("""
111
+ ---
112
+ <div style='text-align: center; margin-top: 20px;'>
113
+ <p>Didukung oleh Hugging Face Transformers (Model: cahya/t5-base-indonesian-summarization-cased) dan Gradio.</p>
114
+ </div>
115
+ """)
116
+
117
+ # Jalankan antarmuka
118
+ if __name__ == "__main__":
119
+ demo.launch()