File size: 3,080 Bytes
eebc8c1 fbcebb2 eebc8c1 fbcebb2 eebc8c1 fbcebb2 eebc8c1 fbcebb2 eebc8c1 fbcebb2 eebc8c1 fbcebb2 eebc8c1 fbcebb2 eebc8c1 fbcebb2 e4c309c fbcebb2 eebc8c1 e4c309c eebc8c1 e4c309c eebc8c1 e4c309c eebc8c1 fbcebb2 e4c309c fbcebb2 e4c309c fbcebb2 e4c309c eebc8c1 fbcebb2 eebc8c1 fbcebb2 eebc8c1 fbcebb2 e4c309c eebc8c1 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | import gradio as gr
from transformers import pipeline
# ========================
# Load models (tối ưu cho HF Free + đa ngôn ngữ)
# ========================
summarizer = pipeline(
"summarization",
model="csebuetnlp/mT5_multilingual_XLSum"
)
quiz_generator = pipeline(
"text2text-generation",
model="google/mt5-small"
)
# ========================
# AI Functions
# ========================
def summarize_and_quiz(text, num_questions):
num_questions = int(num_questions)
if not text or len(text) < 100:
return "Văn bản quá ngắn. Hãy nhập ít nhất 100 ký tự.", ""
# Cắt bớt để tránh quá giới hạn model
text = text[:3000]
# --- TÓM TẮT ---
try:
summary = summarizer(
text,
max_length=200,
min_length=80,
do_sample=False
)[0]['summary_text']
except:
summary = "❌ Có lỗi xảy ra trong quá trình tóm tắt."
# --- TẠO QUIZ ---
prompt = f"""
Dựa trên nội dung sau, hãy tạo {num_questions} câu hỏi trắc nghiệm.
NỘI DUNG:
{summary}
YÊU CẦU:
1. Mỗi câu hỏi nằm trên 1 dòng riêng
2. Có 4 đáp án A, B, C, D
3. Phải ghi đáp án đúng ở cuối câu
4. Không sử dụng ký hiệu như <extra_id_0> hoặc <extra_id_1>
5. Viết cùng ngôn ngữ với nội dung (Việt/Anh)
Ví dụ:
1. Câu hỏi ...?
A. ...
B. ...
C. ...
D. ...
Đáp án: B
BẮT ĐẦU TẠO CÂU HỎI:
"""
try:
quiz = quiz_generator(
prompt,
max_length=512,
do_sample=False
)[0]["generated_text"]
# Xoá hoàn toàn rác của T5
quiz = quiz.replace("<extra_id_0>", "").replace("<extra_id_1>", "").strip()
if len(quiz) < 30:
quiz = "❌ Không tạo được câu hỏi phù hợp. Hãy thử lại với nội dung dài hơn."
except:
quiz = "❌ Có lỗi xảy ra trong quá trình tạo câu hỏi."
return summary, quiz
# ========================
# Gradio Interface
# ========================
interface = gr.Interface(
fn=summarize_and_quiz,
inputs=[
gr.Textbox(
label="📄 Nhập văn bản (Tiếng Việt hoặc Tiếng Anh)",
placeholder="Dán nội dung bài học / tài liệu / văn bản cần tóm tắt vào đây...",
lines=15
),
gr.Slider(5, 10, value=5, step=1, label="Số câu hỏi (Quiz)")
],
outputs=[
gr.Textbox(label="📌 Nội dung tóm tắt", lines=8),
gr.Textbox(label="📝 Câu hỏi ôn tập (Quiz)", lines=12)
],
title="📚 AI TÓM TẮT & TẠO QUIZ CHO SINH VIÊN",
description="""
✅ Hỗ trợ: Tiếng Việt + Tiếng Anh
✅ Đã fix lỗi: <extra_id_0>
✅ Tóm tắt không mất ý chính
✅ Tạo 5–10 câu hỏi trắc nghiệm tự động
✅ Tối ưu chạy trên HuggingFace Free
👉 Chỉ cần dán nội dung vào và nhấn Submit.
"""
)
interface.launch()
|