vanhai123 commited on
Commit
406b0ca
·
verified ·
1 Parent(s): 9e5dc60

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +253 -270
app.py CHANGED
@@ -1,293 +1,276 @@
1
- import streamlit as st
2
  from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
3
  import time
4
 
5
- # Page configuration
6
- st.set_page_config(
7
- page_title="Tóm tắt văn bản tiếng Việt",
8
- page_icon="📝",
9
- layout="wide",
10
- initial_sidebar_state="expanded"
11
- )
12
-
13
- # Custom CSS for better styling
14
- st.markdown("""
15
- <style>
16
- .main-header {
17
- text-align: center;
18
- padding: 2rem 0;
19
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
20
- color: white;
21
- border-radius: 10px;
22
- margin-bottom: 2rem;
23
- box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
24
- }
25
-
26
- .feature-card {
27
- background: white;
28
- padding: 1.5rem;
29
- border-radius: 10px;
30
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
31
- margin: 1rem 0;
32
- border-left: 4px solid #667eea;
33
- }
34
-
35
- .stats-card {
36
- background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
37
- color: white;
38
- padding: 1rem;
39
- border-radius: 8px;
40
- text-align: center;
41
- margin: 0.5rem 0;
42
- }
43
-
44
- .summary-container {
45
- background: #f8f9fa;
46
- padding: 1.5rem;
47
- border-radius: 10px;
48
- border: 1px solid #e9ecef;
49
- margin: 1rem 0;
50
- }
51
-
52
- .footer {
53
- text-align: center;
54
- padding: 2rem 0;
55
- color: #6c757d;
56
- border-top: 1px solid #e9ecef;
57
- margin-top: 3rem;
58
- }
59
-
60
- .sidebar-info {
61
- background: #f8f9fa;
62
- padding: 1rem;
63
- border-radius: 8px;
64
- margin: 1rem 0;
65
- }
66
- </style>
67
- """, unsafe_allow_html=True)
68
 
69
- # Header
70
- st.markdown("""
71
- <div class="main-header">
72
- <h1>📝 Tóm tắt văn bản tiếng Việt với AI</h1>
73
- <p style="font-size: 1.2em; margin-top: 0.5rem;">Powered by VietAI T5 Model</p>
74
- </div>
75
- """, unsafe_allow_html=True)
76
 
77
- # Sidebar
78
- with st.sidebar:
79
- st.markdown("## ⚙️ Cài đặt")
80
-
81
- # Model information
82
- st.markdown("""
83
- <div class="sidebar-info">
84
- <h4>🤖 Thông tin Model</h4>
85
- <p><strong>Model:</strong> VietAI/vit5-base-vietnews-summarization</p>
86
- <p><strong>Ngôn ngữ:</strong> Tiếng Việt</p>
87
- <p><strong>Loại:</strong> Text-to-Text Generation</p>
88
- </div>
89
- """, unsafe_allow_html=True)
90
 
91
- # Summarization settings
92
- st.markdown("### 📊 Tùy chỉnh tóm tắt")
93
- max_length = st.slider("Độ dài tóm tắt tối đa", 50, 300, 150)
94
- min_length = st.slider("Độ dài tóm tắt tối thiểu", 20, 100, 40)
95
- num_beams = st.selectbox("Số beam search", [2, 4, 6, 8], index=1)
96
 
97
- # Tips
98
- st.markdown("""
99
- <div class="sidebar-info">
100
- <h4>💡 Mẹo sử dụng</h4>
101
- <ul>
102
- <li>Văn bản từ 100-1000 từ cho kết quả tốt nhất</li>
103
- <li>Sử dụng văn bản tiếng Việt chính thống</li>
104
- <li>Tránh văn bản có quá nhiều từ viết tắt</li>
105
- </ul>
106
- </div>
107
- """, unsafe_allow_html=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
108
 
109
- # Load model with progress
110
- @st.cache_resource
111
- def load_model():
112
- with st.spinner("🔄 Đang tải model..."):
113
- tokenizer = AutoTokenizer.from_pretrained("VietAI/vit5-base-vietnews-summarization")
114
- model = AutoModelForSeq2SeqLM.from_pretrained("VietAI/vit5-base-vietnews-summarization")
115
- return tokenizer, model
116
 
117
- # Main content area
118
- col1, col2 = st.columns([2, 1])
119
 
120
- with col1:
121
- st.markdown("## ✍️ Nhập văn bản cần tóm tắt")
122
-
123
- # Sample texts
124
- sample_texts = {
125
- "Chọn văn bản mẫu...": "",
126
- "Tin tức công nghệ": "Công nghệ trí tuệ nhân tạo (AI) đang phát triển với tốc độ chóng mặt và tạo ra những thay đổi sâu sắc trong nhiều lĩnh vực của đời sống. Từ y tế, giáo dục, giao thông đến tài chính, AI đang được ứng dụng rộng rãi để cải thiện hiệu quả và chất lượng dịch vụ. Tuy nhiên, sự phát triển nhanh chóng này cũng đặt ra nhiều thách thức về đạo đức, bảo mật thông tin và tác động đến thị trường lao động.",
127
- "Tin tức kinh tế": "Nền kinh tế Việt Nam trong quý đầu năm ghi nhận nhiều tín hiệu tích cực với tốc độ tăng trưởng GDP đạt mức khả quan. Xuất khẩu tiếp tục là động lực chính thúc đẩy tăng trưởng, đặc biệt trong các ngành công nghiệp chế biến chế tạo và nông sản. Tuy nhiên, lạm phát vẫn là thách thức cần được kiểm soát chặt chẽ để đảm bảo ổn định kinh tế vĩ mô."
128
- }
129
 
130
- selected_sample = st.selectbox("Hoặc chọn văn bản mẫu:", list(sample_texts.keys()))
131
-
132
- if selected_sample != "Chọn văn bản mẫu...":
133
- text = st.text_area("", value=sample_texts[selected_sample], height=300)
134
- else:
135
- text = st.text_area("", height=300, placeholder="Nhập hoặc dán văn bản tiếng Việt vào đây...")
136
 
137
- with col2:
138
- st.markdown("## 📈 Thống kê văn bản")
139
 
140
- if text.strip():
141
- word_count = len(text.split())
142
- char_count = len(text)
143
-
144
- st.markdown(f"""
145
- <div class="stats-card">
146
- <h3>{word_count}</h3>
147
- <p>Số từ</p>
148
- </div>
149
- """, unsafe_allow_html=True)
150
-
151
- st.markdown(f"""
152
- <div class="stats-card">
153
- <h3>{char_count}</h3>
154
- <p>Số ký tự</p>
155
- </div>
156
- """, unsafe_allow_html=True)
157
-
158
- estimated_time = max(1, word_count // 100)
159
- st.markdown(f"""
160
- <div class="stats-card">
161
- <h3>~{estimated_time}s</h3>
162
- <p>Thời gian ước tính</p>
163
- </div>
164
- """, unsafe_allow_html=True)
165
 
166
- # Load model
167
- tokenizer, model = load_model()
168
 
169
- # Summarization button and result
170
- st.markdown("---")
171
 
172
- col1, col2, col3 = st.columns([1, 1, 1])
173
- with col2:
174
- if st.button("🔍 Tóm tắt văn bản", type="primary", use_container_width=True):
175
- if text.strip() == "":
176
- st.warning("⚠️ Vui lòng nhập văn bản trước khi tóm tắt.")
177
- else:
178
- # Progress bar
179
- progress_bar = st.progress(0)
180
- status_text = st.empty()
181
-
182
- start_time = time.time()
183
-
184
- try:
185
- status_text.text("🔄 Đang xử lý văn bản...")
186
- progress_bar.progress(25)
187
-
188
- # Tokenize input
189
- input_ids = tokenizer.encode(
190
- "summarize: " + text,
191
- return_tensors="pt",
192
- max_length=512,
193
- truncation=True
194
- )
195
- progress_bar.progress(50)
196
-
197
- status_text.text("🤖 Đang tạo tóm tắt...")
198
-
199
- # Generate summary
200
- output_ids = model.generate(
201
- input_ids,
202
- max_length=max_length,
203
- min_length=min_length,
204
- length_penalty=2.0,
205
- num_beams=num_beams,
206
- early_stopping=True
207
- )
208
- progress_bar.progress(75)
209
-
210
- # Decode result
211
- summary = tokenizer.decode(output_ids[0], skip_special_tokens=True)
212
- progress_bar.progress(100)
213
-
214
- end_time = time.time()
215
- processing_time = round(end_time - start_time, 2)
216
-
217
- status_text.text("✅ Hoàn thành!")
218
- time.sleep(0.5)
219
- status_text.empty()
220
- progress_bar.empty()
221
-
222
- # Display results
223
- st.markdown("## 📋 Kết quả tóm tắt")
224
-
225
- st.markdown(f"""
226
- <div class="summary-container">
227
- <h4>✅ Bản tóm tắt:</h4>
228
- <p style="font-size: 1.1em; line-height: 1.6;">{summary}</p>
229
- </div>
230
- """, unsafe_allow_html=True)
231
-
232
- # Summary statistics
233
- col1, col2, col3, col4 = st.columns(4)
234
-
235
- with col1:
236
- st.metric("Văn bản gốc", f"{len(text.split())} từ")
237
-
238
- with col2:
239
- st.metric("Bản tóm tắt", f"{len(summary.split())} từ")
240
-
241
- with col3:
242
- compression_ratio = round((1 - len(summary.split()) / len(text.split())) * 100, 1)
243
- st.metric("Tỷ lệ nén", f"{compression_ratio}%")
244
-
245
- with col4:
246
- st.metric("Thời gian xử lý", f"{processing_time}s")
247
-
248
- # Copy to clipboard button
249
- st.markdown("### 📋 Sao chép kết quả")
250
- st.code(summary, language="text")
251
-
252
- except Exception as e:
253
- st.error(f"❌ Có lỗi xảy ra: {str(e)}")
254
- progress_bar.empty()
255
- status_text.empty()
256
 
257
- # Features section
258
- st.markdown("---")
259
- st.markdown("## 🌟 Tính năng nổi bật")
 
 
260
 
261
- col1, col2, col3 = st.columns(3)
 
 
 
 
 
 
 
 
262
 
263
- with col1:
264
- st.markdown("""
265
- <div class="feature-card">
266
- <h4>🎯 Độ chính xác cao</h4>
267
- <p>Sử dụng mô hình VietAI T5 được huấn luyện chuyên biệt trên dữ liệu tiếng Việt</p>
268
- </div>
269
- """, unsafe_allow_html=True)
 
270
 
271
- with col2:
272
- st.markdown("""
273
- <div class="feature-card">
274
- <h4>�� Xử lý nhanh</h4>
275
- <p>Tốc độ xử lý tối ưu với khả năng tóm tắt văn bản dài trong vài giây</p>
276
- </div>
277
- """, unsafe_allow_html=True)
 
 
 
 
 
 
 
 
 
278
 
279
- with col3:
280
- st.markdown("""
281
- <div class="feature-card">
282
- <h4>🔧 Tùy chỉnh linh hoạt</h4>
283
- <p>Điều chỉnh độ dài và chất lượng tóm tắt theo nhu cầu cụ thể</p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
284
  </div>
285
- """, unsafe_allow_html=True)
 
 
 
 
 
 
 
 
286
 
287
- # Footer
288
- st.markdown("""
289
- <div class="footer">
290
- <p>📝 Vietnamese Text Summarization | Powered by VietAI T5 Model</p>
291
- <p>Built with ❤️ using Streamlit and Hugging Face Transformers</p>
292
- </div>
293
- """, unsafe_allow_html=True)
 
1
+ import gradio as gr
2
  from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
3
  import time
4
 
5
+ # Load model and tokenizer
6
+ @gr.cache_resource
7
+ def load_model():
8
+ tokenizer = AutoTokenizer.from_pretrained("VietAI/vit5-base-vietnews-summarization")
9
+ model = AutoModelForSeq2SeqLM.from_pretrained("VietAI/vit5-base-vietnews-summarization")
10
+ return tokenizer, model
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
 
12
+ tokenizer, model = load_model()
 
 
 
 
 
 
13
 
14
+ def summarize_text(text, max_length, min_length, num_beams):
15
+ if not text.strip():
16
+ return "⚠️ Vui lòng nhập văn bản cần tóm tắt!", "", ""
 
 
 
 
 
 
 
 
 
 
17
 
18
+ start_time = time.time()
 
 
 
 
19
 
20
+ try:
21
+ # Tokenize input
22
+ input_ids = tokenizer.encode(
23
+ "summarize: " + text,
24
+ return_tensors="pt",
25
+ max_length=512,
26
+ truncation=True
27
+ )
28
+
29
+ # Generate summary
30
+ output_ids = model.generate(
31
+ input_ids,
32
+ max_length=max_length,
33
+ min_length=min_length,
34
+ length_penalty=2.0,
35
+ num_beams=num_beams,
36
+ early_stopping=True
37
+ )
38
+
39
+ # Decode result
40
+ summary = tokenizer.decode(output_ids[0], skip_special_tokens=True)
41
+
42
+ end_time = time.time()
43
+ processing_time = round(end_time - start_time, 2)
44
+
45
+ # Calculate statistics
46
+ original_words = len(text.split())
47
+ summary_words = len(summary.split())
48
+ compression_ratio = round((1 - summary_words / original_words) * 100, 1)
49
+
50
+ stats = f"""
51
+ 📊 **Thống kê:**
52
+ - Văn bản gốc: {original_words} từ
53
+ - Bản tóm tắt: {summary_words} từ
54
+ - Tỷ lệ nén: {compression_ratio}%
55
+ - Thời gian xử lý: {processing_time}s
56
+ """
57
+
58
+ return summary, stats, "✅ Tóm tắt thành công!"
59
+
60
+ except Exception as e:
61
+ return f"❌ Có lỗi xảy ra: {str(e)}", "", "❌ Lỗi xử lý"
62
 
63
+ # Sample texts
64
+ sample_texts = {
65
+ "Tin tức công nghệ": """Công nghệ trí tuệ nhân tạo (AI) đang phát triển với tốc độ chóng mặt và tạo ra những thay đổi sâu sắc trong nhiều lĩnh vực của đời sống. Từ y tế, giáo dục, giao thông đến tài chính, AI đang được ứng dụng rộng rãi để cải thiện hiệu quả và chất lượng dịch vụ.
 
 
 
 
66
 
67
+ Trong lĩnh vực y tế, AI giúp chẩn đoán bệnh chính xác hơn thông qua phân tích hình ảnh y khoa và dữ liệu bệnh nhân. Các hệ thống AI có thể phát hiện ung thư sớm, dự đoán nguy cơ mắc bệnh và đề xuất phương án điều trị phù hợp.
 
68
 
69
+ Tuy nhiên, sự phát triển nhanh chóng này cũng đặt ra nhiều thách thức về đạo đức, bảo mật thông tin và tác động đến thị trường lao động. Việc đảm bảo AI phát triển một cách có trách nhiệm và minh bạch là ưu tiên hàng đầu.""",
 
 
 
 
 
 
 
 
70
 
71
+ "Tin tức kinh tế": """Nền kinh tế Việt Nam trong quý đầu năm 2024 ghi nhận nhiều tín hiệu tích cực với tốc độ tăng trưởng GDP đạt 6.14%, cao hơn so với cùng kỳ năm trước. Xuất khẩu tiếp tục là động lực chính thúc đẩy tăng trưởng, đặc biệt trong các ngành công nghiệp chế biến chế tạo và nông sản.
72
+
73
+ Khu vực công nghiệp xây dựng tăng 7.29%, trong đó công nghiệp chế biến, chế tạo tăng 7.99%. Khu vực dịch vụ phục hồi mạnh mẽ với mức tăng 6.93%, được thúc đẩy bởi du lịch và thương mại.
 
 
 
74
 
75
+ Tuy nhiên, lạm phát vẫn là thách thức cần được kiểm soát chặt chẽ để đảm bảo ổn định kinh tế vĩ mô. Chính phủ đang thực hiện các biện pháp điều hành linh hoạt để duy trì tăng trưởng bền vững.""",
 
76
 
77
+ "Tin tức giáo dục": """Bộ Giáo dục và Đào tạo vừa công bố kế hoạch đổi mới giáo dục toàn diện, tập trung vào phát triển năng lực và phẩm chất học sinh. Chương trình giáo dục mới nhấn mạnh việc giảm tải nội dung, tăng cường thực hành và ứng dụng kiến thức vào thực tế.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
 
79
+ Đặc biệt, việc tích hợp công nghệ thông tin vào giảng dạy ��ược đẩy mạnh với việc trang bị thiết bị hiện đại cho các trường học. Giáo viên được đào tạo sử dụng các công cụ số để nâng cao chất lượng bài giảng.
 
80
 
81
+ Bên cạnh đó, chương trình giáo dục hướng nghiệp được chú trọng để học sinh có định hướng rõ ràng về tương lai. Các trường đại học cũng liên kết chặt chẽ với doanh nghiệp để tạo cơ hội thực tập và việc làm cho sinh viên."""
82
+ }
83
 
84
+ def load_sample(sample_name):
85
+ return sample_texts.get(sample_name, "")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
86
 
87
+ # Custom CSS
88
+ css = """
89
+ .gradio-container {
90
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
91
+ }
92
 
93
+ .main-header {
94
+ text-align: center;
95
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
96
+ color: white;
97
+ padding: 2rem;
98
+ border-radius: 15px;
99
+ margin-bottom: 2rem;
100
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
101
+ }
102
 
103
+ .feature-box {
104
+ background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
105
+ color: white;
106
+ padding: 1.5rem;
107
+ border-radius: 10px;
108
+ margin: 1rem 0;
109
+ box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
110
+ }
111
 
112
+ .stats-box {
113
+ background: #f8f9fa;
114
+ border: 1px solid #dee2e6;
115
+ border-radius: 8px;
116
+ padding: 1rem;
117
+ margin: 0.5rem 0;
118
+ }
119
+
120
+ footer {
121
+ text-align: center;
122
+ padding: 2rem;
123
+ color: #6c757d;
124
+ border-top: 1px solid #dee2e6;
125
+ margin-top: 2rem;
126
+ }
127
+ """
128
 
129
+ # Create Gradio interface
130
+ with gr.Blocks(css=css, title="Tóm tắt văn bản tiếng Việt", theme=gr.themes.Soft()) as app:
131
+
132
+ # Header
133
+ gr.HTML("""
134
+ <div class="main-header">
135
+ <h1>📝 Tóm tắt văn bản tiếng Việt với AI</h1>
136
+ <p style="font-size: 1.2em; margin: 0.5rem 0;">Powered by VietAI T5 Model</p>
137
+ <p style="font-size: 1em; margin: 0;">Công cụ tóm tắt văn bản tiếng Việt thông minh và chính xác</p>
138
+ </div>
139
+ """)
140
+
141
+ with gr.Row():
142
+ # Left column - Main content
143
+ with gr.Column(scale=2):
144
+ gr.Markdown("## ✍️ Nhập văn bản cần tóm tắt")
145
+
146
+ # Sample text selector
147
+ sample_dropdown = gr.Dropdown(
148
+ choices=list(sample_texts.keys()),
149
+ label="📚 Chọn văn bản mẫu (tùy chọn)",
150
+ value=None
151
+ )
152
+
153
+ # Text input
154
+ text_input = gr.Textbox(
155
+ label="📝 Văn bản đầu vào",
156
+ placeholder="Nhập hoặc dán văn bản tiếng Việt cần tóm tắt vào đây...",
157
+ lines=10,
158
+ max_lines=15
159
+ )
160
+
161
+ # Load sample text
162
+ sample_dropdown.change(
163
+ fn=load_sample,
164
+ inputs=sample_dropdown,
165
+ outputs=text_input
166
+ )
167
+
168
+ # Right column - Settings
169
+ with gr.Column(scale=1):
170
+ gr.Markdown("## ⚙️ Cài đặt tóm tắt")
171
+
172
+ max_length = gr.Slider(
173
+ minimum=50,
174
+ maximum=300,
175
+ value=150,
176
+ step=10,
177
+ label="📏 Độ dài tối đa"
178
+ )
179
+
180
+ min_length = gr.Slider(
181
+ minimum=20,
182
+ maximum=100,
183
+ value=40,
184
+ step=5,
185
+ label="📐 Độ dài tối thiểu"
186
+ )
187
+
188
+ num_beams = gr.Dropdown(
189
+ choices=[2, 4, 6, 8],
190
+ value=4,
191
+ label="🔍 Số beam search"
192
+ )
193
+
194
+ # Model info
195
+ gr.HTML("""
196
+ <div class="feature-box">
197
+ <h4>🤖 Thông tin Model</h4>
198
+ <ul style="margin: 0; padding-left: 1.2rem;">
199
+ <li><strong>Model:</strong> VietAI T5</li>
200
+ <li><strong>Ngôn ngữ:</strong> Tiếng Việt</li>
201
+ <li><strong>Loại:</strong> Seq2Seq</li>
202
+ </ul>
203
+ </div>
204
+ """)
205
+
206
+ # Tips
207
+ gr.HTML("""
208
+ <div class="stats-box">
209
+ <h4>💡 Mẹo sử dụng</h4>
210
+ <ul style="margin: 0.5rem 0; padding-left: 1.2rem; font-size: 0.9em;">
211
+ <li>Văn bản 100-1000 từ cho kết quả tốt nhất</li>
212
+ <li>Sử dụng tiếng Việt chuẩn</li>
213
+ <li>Tránh quá nhiều từ viết tắt</li>
214
+ </ul>
215
+ </div>
216
+ """)
217
+
218
+ # Summarize button
219
+ summarize_btn = gr.Button("🔍 Tóm tắt văn bản", variant="primary", size="lg")
220
+
221
+ # Output section
222
+ gr.Markdown("## 📋 Kết quả")
223
+
224
+ with gr.Row():
225
+ with gr.Column(scale=2):
226
+ summary_output = gr.Textbox(
227
+ label="✅ Bản tóm tắt",
228
+ lines=5,
229
+ max_lines=10,
230
+ show_copy_button=True
231
+ )
232
+
233
+ with gr.Column(scale=1):
234
+ stats_output = gr.Markdown(label="📊 Thống kê")
235
+
236
+ status_output = gr.Textbox(label="Trạng thái", visible=False)
237
+
238
+ # Connect the summarize function
239
+ summarize_btn.click(
240
+ fn=summarize_text,
241
+ inputs=[text_input, max_length, min_length, num_beams],
242
+ outputs=[summary_output, stats_output, status_output]
243
+ )
244
+
245
+ # Features section
246
+ gr.HTML("""
247
+ <div style="margin-top: 3rem;">
248
+ <h2 style="text-align: center; margin-bottom: 2rem;">🌟 Tính năng nổi bật</h2>
249
+ <div style="display: flex; gap: 1rem; flex-wrap: wrap;">
250
+ <div class="feature-box" style="flex: 1; min-width: 250px;">
251
+ <h4>🎯 Đ�� chính xác cao</h4>
252
+ <p style="margin: 0;">Mô hình VietAI T5 được huấn luyện chuyên biệt trên dữ liệu tiếng Việt</p>
253
+ </div>
254
+ <div class="feature-box" style="flex: 1; min-width: 250px;">
255
+ <h4>⚡ Xử lý nhanh</h4>
256
+ <p style="margin: 0;">Tóm tắt văn bản dài trong vài giây với độ chính xác cao</p>
257
+ </div>
258
+ <div class="feature-box" style="flex: 1; min-width: 250px;">
259
+ <h4>🔧 Tùy chỉnh linh hoạt</h4>
260
+ <p style="margin: 0;">Điều chỉnh độ dài và chất lượng tóm tắt theo nhu cầu</p>
261
+ </div>
262
+ </div>
263
  </div>
264
+ """)
265
+
266
+ # Footer
267
+ gr.HTML("""
268
+ <footer>
269
+ <p>📝 Vietnamese Text Summarization | Powered by VietAI T5 Model</p>
270
+ <p>Built with ❤️ using Gradio and Hugging Face Transformers</p>
271
+ </footer>
272
+ """)
273
 
274
+ # Launch the app
275
+ if __name__ == "__main__":
276
+ app.launch()