Bộ Chuẩn Duyệt Câu Hỏi Text-to-SQL
Mục tiêu
Tài liệu này định nghĩa một bộ chuẩn thực dụng để đánh giá xem một câu hỏi có đủ "chuẩn" và "ổn" để đưa vào quy trình duyệt dataset Text-to-SQL hay không.
Bộ chuẩn này được rút ra từ tinh thần chung của: - Spider: nhấn mạnh tính cross-domain, schema-grounded, compositional SQL, và khả năng tổng quát hóa theo schema mới. - ViText2SQL: giữ bài toán Text-to-SQL cho tiếng Việt, đồng thời cẩn thận với đồng nghĩa, tách từ, giá trị literal, và cách đặt câu tự nhiên của người dùng Việt.
Định nghĩa cốt lõi
Một câu hỏi được coi là "đạt chuẩn để duyệt" khi và chỉ khi nó: - Có thể ánh xạ thành một SQL intent rõ ràng; - Bám trực tiếp vào schema thật; - Không cần tri thức ngoài schema; - Không mơ hồ đối với người viết gold SQL; - Có ngôn ngữ tự nhiên, giống như nhu cầu hỏi thực tế của người dùng.
10 tiêu chuẩn đánh giá
1. Schema-grounded
Câu hỏi phải bám vào bảng, cột, quan hệ, giá trị, hoặc thực thể có thật trong schema.
Đạt: - "Có bao nhiêu giảng viên dạy môn Cơ sở dữ liệu?" - "Liệt kê các phòng học có sức chứa trên 100 sinh viên."
Không đạt: - Hỏi về thuộc tính không có trong DB. - Cần đoán thêm business rule. - Cần giả định một bảng/cột chưa tồn tại.
2. SQL-answerable
Câu hỏi phải trả lời được bằng truy vấn SQL trực tiếp: - SELECT, WHERE, JOIN, GROUP BY, HAVING, ORDER BY, LIMIT / TOP, EXISTS / NOT EXISTS, subquery.
Không đạt nếu câu hỏi là: - Tối ưu hóa. - Tư vấn. - Lập kế hoạch. - Chứng minh. - Bài toán thuật toán. - Mô tả giải pháp hệ thống.
3. One clear intent
Mỗi câu chỉ nên có một intent chính.
Đạt: - "Cho biết danh sách lớp học trong học kỳ 1 năm 2024."
Không đạt: - "Liệt kê các lớp, đếm số sinh viên từng lớp, và cho biết lớp nào tốt nhất."
4. Deterministic
Người viết SQL phải có khả năng sinh ra cùng một logic truy vấn hoặc rất gần nhau.
Không đạt nếu câu hỏi dùng các từ mơ hồ mà không có ngưỡng hoặc định nghĩa trong schema: - Đông, giỏi, gần đây, phù hợp, tốt nhất, nhiều, ít.
5. Explicit scope
Phạm vi câu hỏi phải đủ rõ: - Thời gian, học kỳ, năm học, đối tượng, đơn vị, ngưỡng lọc, top-k.
Không đạt nếu dùng các mốc tương đối mà không có neo: - Hôm nay, tuần này, năm nay, gần đây. Nếu hệ thống có quy ước neo rõ ràng thì mới được chấp nhận.
6. Natural language first
Câu hỏi nên là ngôn ngữ tự nhiên của người dùng, không phải mô tả SQL bằng lời.
Ưu tiên: - "Giảng viên nào dạy nhiều môn nhất trong học kỳ này?"
Không ưu tiên: - "Join bảng giáo viên với bảng môn học rồi group by giáo viên để tìm người có count lớn nhất."
7. Literal-consistent
Tên giá trị, tên đối tượng, và cách gọi phải nhất quán với dữ liệu thật nếu có thể.
Cần đặc biệt lưu ý: - Literal Anh - Việt. - Đồng nghĩa tự nhiên. - Tên viết tắt. - Tên có dấu / không dấu. - Tên hệ đào tạo, khoa, ngành, môn, phòng.
Nếu literal không rõ, cần có khả năng đối chiếu về giá trị thật trong DB.
8. No over-specification
Câu hỏi hỏi gì thì gold SQL chỉ nên trả lời đúng mức độ đó.
Ví dụ:
- Nếu câu hỏi là "Lấy tên lớp học", thì gold SQL không nên bắt buộc trả thêm id, count, hay cột phụ nếu câu hỏi không yêu cầu.
9. No hidden external knowledge
Câu hỏi không được đòi hỏi tri thức ngoài database.
Không đạt: - "Ai là giảng viên giỏi nhất khoa CNTT?" - "Phòng nào thuận tiện nhất?" - "Lịch nào tối ưu nhất cho sinh viên?"
10. Non-duplicate
Không duyệt nếu câu hỏi chỉ là một cách diễn đạt lại cùng một SQL intent đã có.
Khác biệt ngôn ngữ được chấp nhận, nhưng không trùng nếu: - Khác về mức độ lọc. - Khác về phép tính. - Khác về group by. - Khác về tập kết quả.
Hard reject
Loại ngay nếu rơi vào một trong các nhóm sau: - Ngoài schema. - Không phải truy xuất dữ liệu. - Mơ hồ đến mức không viết được 1 gold SQL ổn định. - Cần tri thức ngoài DB. - Dùng mốc thời gian tương đối mà không có quy ước neo. - Trùng intent với câu đã có.
Rubric chấm nhanh
Chỉ approve khi qua hard gate, sau đó chấm điểm nhanh theo thang 100:
- 25 điểm: Bám schema rõ ràng.
- 20 điểm: Trả lời được bằng SQL trực tiếp.
- 20 điểm: Intent đơn, không mơ hồ.
- 15 điểm: Phạm vi và điều kiện đủ rõ.
- 10 điểm: Ngôn ngữ tự nhiên.
- 5 điểm: Literal phù hợp dữ liệu.
- 5 điểm: Không trùng câu hỏi đã có.
Ngưỡng: - 90-100: Duyệt ngay. - 75-89: Sửa nhẹ rồi duyệt. - Dưới 75: Reject.
Checklist reviewer
Trước khi duyệt, reviewer tự hỏi 6 câu sau: 1. Câu này có bám được vào schema thật không? 2. Có viết được một gold SQL rõ ràng không? 3. Có cần đoán thêm business rule hay tri thức ngoài DB không? 4. Có bị hiểu thành nhiều SQL logic khác nhau không? 5. Literal trong câu hỏi có đối chiếu được với dữ liệu thật không? 6. Câu này có trùng intent với một câu đã có không?
Nếu có bất kỳ câu nào trả lời "không rõ" thì không nên duyệt ngay.
Ví dụ đạt
- "Có bao nhiêu giảng viên dạy môn Cơ sở dữ liệu trong học kỳ 1 năm 2024?"
- "Liệt kê các phòng học có sức chứa trên 100 sinh viên."
- "Lớp nào có sĩ số lớn nhất trong hệ đào tạo chính quy?"
- "Thống kê tổng số tiết dạy của từng bộ môn trong tháng 4 năm 2024."
Ví dụ không đạt
- "Phòng nào tốt nhất cho lớp đông?"
- "Tối ưu lịch học để sinh viên di chuyển ít nhất."
- "Ai là giảng viên giỏi nhất khoa CNTT?"
- "Lịch học tuần này thế nào?" (nếu không có mốc neo thời gian).
- "Chứng minh đồ thị thời khóa biểu này có chu trình Hamilton."
Công thức vận hành ngắn
Một câu hỏi OK để duyệt nếu thỏa đồng thời 4 điều: - Nối được vào schema thật. - Viết được một SQL gold rõ ràng. - Không cần đoán thêm nghiệp vụ. - Không bị hiểu thành nhiều cách.
Nguồn tham chiếu
- Spider paper: https://arxiv.org/abs/1809.08887
- Spider benchmark site: https://yale-lily.github.io/spider
- ViText2SQL repository: https://github.com/VinAIResearch/ViText2SQL
- ViText2SQL paper: https://aclanthology.org/2020.findings-emnlp.364/
- Nội bộ repo:
Benchmark-report.mdvàquestionEvaluatorService.js