Giới thiệu dự án

Trong kỷ nguyên chuyển đổi số và bùng nổ dữ liệu, việc quản trị, thiết kế và khai thác cơ sở dữ liệu quan hệ (Relational Database Management System - RDBMS) đóng vai trò nền tảng trong mọi hệ thống phần mềm doanh nghiệp. Theo các khảo sát công nghệ phần mềm thực tế, giai đoạn phân tích yêu cầu nghiệp vụ để mô hình hóa dữ liệu (Conceptual Database Design) và viết các truy vấn SQL phức tạp chiếm tới 35% - 45% tổng thời gian phát triển trong các dự án vừa và nhỏ. Việc chuyển đổi thủ công từ ngôn ngữ tự nhiên sang lược đồ thực thể mối kết hợp (Entity-Relationship Diagram - ERD), mã ngôn ngữ định nghĩa dữ liệu (Data Definition Language - DDL) và ngôn ngữ truy vấn có cấu trúc (Structured Query Language - SQL) thường xuyên đối mặt với rủi ro sai lệch ngữ nghĩa, thiết kế dư thừa thuộc tính hoặc sai sót ràng buộc toàn vẹn.

Đồ án khóa luận tốt nghiệp "Proposing Methods to Automatically Design Database and Generate Query Statement from Natural Language Description" (Phương pháp tự động thiết kế cơ sở dữ liệu và sinh câu truy vấn từ mô tả ngôn ngữ tự nhiên tiếng Việt) được thực hiện bởi nhóm tác giả Nguyễn Thị Mỹ TrânTôn Nữ Tú Quyên, dưới sự hướng dẫn của PGS.TS Nguyễn Đình ThuânThS. Vũ Minh Sang tại Khoa Hệ thống Thông tin, Trường Đại học Công nghệ Thông tin – ĐHQG-HCM (UIT). Nghiên cứu giải quyết bài toán cốt lõi: tự động hóa quy trình kỹ thuật dữ liệu đầu-cuối (End-to-End Database Engineering) dành riêng cho tiếng Việt – một ngôn ngữ có tính đơn lập, cấu trúc ngữ pháp linh hoạt và ngữ cảnh đa tầng nhưng còn thiếu hụt tài nguyên nghiên cứu chuyên sâu so với tiếng Anh.

Mục tiêu nghiên cứu cụ thể

  1. Tự động hóa Text-to-ERD & DDL: Phát triển mô hình dịch chuyển câu mô tả tự nhiên tiếng Việt sang biểu diễn PlantUML trực quan theo ký pháp Crow's Foot và tự động sinh mã DDL SQL tương ứng (CREATE TABLE, PRIMARY KEY, FOREIGN KEY, ALTER TABLE).
  2. Tự động hóa Text-to-SQL: Xây dựng kiến trúc học sâu dựa trên Transformer cho phép ánh xạ câu hỏi truy vấn tiếng Việt thành câu lệnh SQL chuẩn xác, hỗ trợ đầy đủ các mệnh đề phức tạp (JOIN, GROUP BY, HAVING, ORDER BY, Subqueries).
  3. Triển khai ứng dụng thực tế: Đóng gói các mô hình AI thành cụm dịch vụ Flask RESTful API Backend và xây dựng giao diện tương tác người dùng hiện đại trên nền tảng ASP.NET Core MVC.

Phạm vi và giới hạn đề tài

  • Phạm vi dữ liệu: Tập trung vào các bài toán mô tả hệ thống thông tin quản trị và đề thi thực hành cơ sở dữ liệu (điển hình môn IT004 tại UIT).
  • Phạm vi kỹ thuật: Hỗ trợ chuẩn cơ sở dữ liệu quan hệ SQL Server, chuẩn trực quan hóa PlantUML và các mô hình Transformer tiền huấn luyện tiếng Việt (VietAI/vit5-base, multilingual BERT).
  • Giới hạn: Không bao gồm cơ sở dữ liệu phi quan hệ (NoSQL) và các mô hình dữ liệu đồ thị phức hợp vượt ngoài phạm vi quan hệ bảng.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Nghiên cứu tự động hóa thiết kế và truy vấn cơ sở dữ liệu bằng ngôn ngữ tự nhiên (NLIDB - Natural Language Interface to Database) trên thế giới đã đạt được nhiều tiến bộ với tiếng Anh, tiêu biểu như các công trình trích xuất ERD của Al-Btoush (2011), sinh class schema của Abdelnabi (2020), hoặc các mô hình Text-to-SQL như Seq2SQL (Zhong et al., 2017) trên tập dữ liệu WikiSQL và SQL-guided pretraining của Cai et al. (2021) trên tập SPARC/CoSQL. Tuy nhiên, tại Việt Nam, các nghiên cứu tiên phong của Anh Tuan Nguyen et al. (2020) hay Nhan Cao Thi et al. (2022) chủ yếu dừng lại ở mức khảo sát Text-to-SQL đơn lẻ, chưa có hệ thống tích hợp toàn diện từ thiết kế cấu trúc (ERD/DDL) đến truy vấn dữ liệu (SQL).

Tiêu chí so sánh Giải pháp Rule-based cổ điển (Al-Btoush, 2011) Giải pháp Deep Learning thuần túy (Seq2SQL, 2017) Giải pháp đề xuất trong đề tài (2024)
Ngôn ngữ hỗ trợ Tiếng Anh (English) Tiếng Anh (English) Tiếng Việt chuyên sâu (Vietnamese)
Xử lý ngữ nghĩa linh hoạt Kém (Cố định theo từ khóa ngữ pháp) Tốt (Nhận diện theo ngữ cảnh vector) Cao (Kết hợp Transformer + Heuristic Rules)
Đầu ra thiết kế dữ liệu Chỉ sinh ERD text/sơ cấp Không hỗ trợ (Chỉ sinh SQL query) Sinh PlantUML, Ảnh ERD và DDL SQL đồng thời
Khả năng sinh SQL phức tạp Rất hạn chế Trung bình (Khó xử lý đa bảng JOIN) Cao (Hỗ trợ JOIN, Subquery, Grouping)
Tích hợp ứng dụng Script dòng lệnh độc lập Thư viện mã nguồn mở Hệ thống Full-stack Web (ASP.NET Core + Flask)

Phân tích yêu cầu theo khung MoSCoW

  • Must have (Bắt buộc): Chuẩn hóa câu văn mô tả tiếng Việt bằng Paraphrase; Nhận diện thực thể, thuộc tính, khóa chính, mối kết hợp; Sinh PlantUML và DDL; Sinh câu truy vấn SQL từ câu hỏi tiếng Việt.
  • Should have (Nên có): Tự động render sơ đồ ERD dạng hình ảnh từ script PlantUML; Đánh giá câu truy vấn bằng Exact Match và BLEU/BERTScore.
  • Could have (Có thể mở rộng): Lưu trữ lịch sử thiết kế; Tùy chỉnh quy tắc sinh kiểu dữ liệu DDL cho Oracle/PostgreSQL.
  • Won't have (Chưa thực hiện): Khởi tạo dữ liệu mẫu tự động (Mock data generation) và kiểm thử hiệu năng truy vấn trên môi trường Production.

Thiết kế hệ thống

Kiến trúc hệ thống được phân lớp rõ ràng theo mô hình microservices-oriented 3 tầng:

Technology Stack và Thông số Kỹ thuật

  • AI Core Frameworks: Python 3.10, PyTorch 2.1, Hugging Face Transformers 4.38.0, Datasets 2.14.0.
  • Pre-trained Language Models: VietAI/vit5-base (220M parameters), Multilingual BERT (bert-base-multilingual-cased).
  • Backend API: Flask 3.0, Flask-RESTful, Flask-CORS, Werkzeug.
  • Frontend Web Application: ASP.NET Core 8.0 MVC, C# 12, Bootstrap 5, PlantUML Web Rendering Integration.
  • Công cụ trực quan hóa: PlantUML Server API, Graphviz engine.

Thiết kế giao tiếp API

  1. Endpoint Text-to-ERD:
    • POST /api/v1/generate-erd
    • Payload: {"description": "Mỗi sinh viên có một mã sinh viên duy nhất, họ tên, ngày sinh..."}
    • Response: {"plantuml_code": "@startuml...", "ddl_script": "CREATE TABLE...", "diagram_url": "http://..."}
  2. Endpoint Text-to-SQL:
    • POST /api/v1/generate-sql
    • Payload: {"question": "Cho biết danh sách sinh viên có điểm trung bình trên 8.0 thuộc khoa Công nghệ Phần mềm"}
    • Response: {"sql_query": "SELECT sv.MaSV, sv.HoTen FROM SinhVien sv JOIN Khoa k ON sv.MaKhoa = k.MaKhoa WHERE sv.DTB > 8.0 AND k.TenKhoa = N'Công nghệ Phần mềm';"}

Methodology

Dự án áp dụng quy trình phát triển phần mềm kết hợp Agile Scrum và chu trình nghiên cứu CRISP-DM (Cross-Industry Standard Process for Data Mining) bao gồm 5 giai đoạn:

  1. Giai đoạn 1 (Tuần 1 - 3): Phân tích cú pháp tiếng Việt, thu thập 100 đề bài mô tả hệ thống dữ liệu, chuẩn hóa tập dữ liệu 970 mẫu.
  2. Giai đoạn 2 (Tuần 4 - 7): Xây dựng bộ quy tắc Rule-based tổng quát; Huấn luyện mô hình Paraphrase với VietAI/vit5-base trên kiến trúc mT5; Thử nghiệm mô hình gán nhãn BERT Sequence Tagging.
  3. Giai đoạn 3 (Tuần 8 - 11): Huấn luyện mô hình T5 Text-to-SQL; Tinh chỉnh Hyperparameters; Xây dựng module chuẩn hóa câu truy vấn.
  4. Giai đoạn 4 (Tuần 12 - 14): Phát triển cụm Flask RESTful API; Xây dựng giao diện ASP.NET Core MVC; Tích hợp luồng gọi API qua HttpClient.
  5. Giai đoạn 5 (Tuần 15 - 16): Kiểm thử toàn diện (Unit Test, Integration Test, User Acceptance Test), đánh giá qua các thang đo chuyên gia và độ đo máy học (ROUGE-2, Exact Match, BERTScore, BLEU).

Implementation và kết quả

Development process

1. Xây dựng mô hình Paraphrase và Trình phân tích Rule-based (Bài toán Text-to-ERD)

Để giải quyết tính đa dạng của câu mô tả tiếng Việt, nhóm nghiên cứu xây dựng hệ thống quy tắc chuẩn hóa nhằm chuyển mọi câu văn về các mẫu cấu trúc định danh:

Mẫu 1 (Thực thể & Khóa chính): Mỗi/Một + [A] + được xác định bởi duy nhất một + [B]
Mẫu 2 (Thực thể & Thuộc tính): Mỗi/Một + [A] + có các thông tin + [B], [C], [D]
Mẫu 3 (Mối kết hợp 1-N): Mỗi/Một + [A] + có nhiều + [B]
Mẫu 4 (Mối kết hợp N-N): Mỗi/Một + [A] + có thể + [Verb] + nhiều + [B], Khi + [Verb] + phải biết + [C]

Quy trình Fine-tuning mô hình Paraphrase sử dụng pre-trained VietAI/vit5-base với Seq2SeqTrainer trong PyTorch:

from transformers import (
    MT5ForConditionalGeneration,
    MT5Tokenizer,
    Seq2SeqTrainer,
    Seq2SeqTrainingArguments,
    DataCollatorForSeq2Seq
)
from datasets import load_metric

# Khởi tạo mô hình và tokenizer
model_name = "VietAI/vit5-base"
tokenizer = MT5Tokenizer.from_pretrained(model_name)
model = MT5ForConditionalGeneration.from_pretrained(model_name)

# Cấu hình siêu tham số huấn luyện
training_args = Seq2SeqTrainingArguments(
    output_dir="./vit5-base-paraphrase",
    per_device_train_batch_size=1,
    per_device_eval_batch_size=1,
    num_train_epochs=5,
    predict_with_generate=True,
    evaluation_strategy="steps",
    eval_steps=3875,
    save_steps=3875,
    logging_steps=3875,
    learning_rate=5e-5,
    overwrite_output_dir=True,
    report_to=None
)

data_collator = DataCollatorForSeq2Seq(tokenizer, model=model)

trainer = Seq2SeqTrainer(
    model=model,
    args=training_args,
    data_collator=data_collator,
    tokenizer=tokenizer,
    train_dataset=train_data,
    eval_dataset=test_data,
    compute_metrics=compute_metrics
)

trainer.train()

Mã PlantUML sinh ra từ cấu trúc câu chuẩn hóa tuân theo định dạng chuẩn Crow's Foot:

2. Xây dựng dịch vụ giao tiếp Full-stack trên ASP.NET Core MVC (C#)

Phía Client ASP.NET Core sử dụng HttpClient để gửi yêu cầu bất đồng bộ đến Flask API Server:

public async Task<IActionResult> GenerateERD(string rawDescription)
{
    using (var client = new HttpClient())
    {
        client.BaseAddress = new Uri("http://127.0.0.1:5000/");
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(
            new MediaTypeWithQualityHeaderValue("application/json")
        );

        var payload = new { description = rawDescription };
        var jsonContent = new StringContent(
            JsonConvert.SerializeObject(payload),
            Encoding.UTF8,
            "application/json"
        );

        HttpResponseMessage response = await client.PostAsync("api/v1/text-to-erd", jsonContent);
        if (response.IsSuccessStatusCode)
        {
            string resultString = await response.Content.ReadAsStringAsync();
            var result = JsonConvert.DeserializeObject<ErdResponseViewModel>(resultString);
            return View("ErdResult", result);
        }
    }
    return View("Error");
}

Testing và validation

Hiệu năng của các mô hình được đánh giá định lượng bằng các phương pháp kiểm thử chặt chẽ trên tập dữ liệu kiểm thử độc lập (Test Set chiếm 20%):

  • ROUGE-2: Đo lường sự trùng lặp 2-gram giữa mã sinh ra và mã chuẩn do chuyên gia xây dựng.
  • Exact Match (EM): Tỷ lệ khớp hoàn toàn 100% về mặt cấu trúc cú pháp giữa SQL sinh ra và Ground Truth. $$\text{EM} = \frac{1}{N} \sum_{n=1}^{N} \mathbb{I}(P_n = Y_n)$$
  • BLEU Score: Đo độ tương đồng n-gram kết hợp hệ số phạt độ dài (Brevity Penalty - BP). $$\text{BLEU} = \text{BP} \times \exp\left(\sum_{n=1}^{N} w_n \ln p_n\right)$$
  • BERTScore: Đo độ tương đồng ngữ nghĩa bằng Cosine Similarity giữa các vector nhúng ngữ cảnh sâu: $$R_{\text{BERT}} = \frac{1}{|x|} \sum_{x_i \in x} \max_{\hat{x}_j \in \hat{x}} \mathbf{e}(x_i)^\top \mathbf{e}(\hat{x}_j)$$

Kết quả đạt được

Thành phần mô hình / Nhiệm vụ Thang đo đánh giá Giá trị thực nghiệm đạt được Đánh giá chuyên gia (Expert Score)
Mô hình Paraphrase ViT5 (Text-to-ERD) ROUGE-2 Precision 86.42% 8.8 / 10
ROUGE-2 Recall 84.18%
ROUGE-2 F1-Score 85.28%
Mô hình BERT Elements Tagging Token Accuracy / F1 88.75% 8.5 / 10
Mô hình T5 (Text-to-SQL) Exact Match (EM) 78.60% 8.6 / 10
BLEU-4 Score 82.35%
BERTScore (F1) 91.40%
Thời gian đáp ứng trung bình (Latency) End-to-end Inference 1.24 giây / request Đạt chuẩn phản hồi thời gian thực

So với các mục tiêu ban đầu đặt ra, đồ án đã hoàn thành vượt mức về độ chính xác ngữ nghĩa (BERTScore > 90%) và tính khả thi trong môi trường ứng dụng thực tế.


Đổi mới và đóng góp

  1. Pipeline tiếp cận lai ghép đột phá (Hybrid Two-Stage Pipeline): Thay vì sử dụng mô hình học sâu nguyên khối dễ gặp hiện tượng ảo giác (hallucination) trong sinh mã cấu trúc, đề tài kết hợp mô hình Transformer Paraphrase (chuẩn hóa ngữ nghĩa) với Deterministic Rule-based Parsing. Điều này đảm bảo tính đúng đắn 100% về cú pháp PlantUML và quan hệ khóa ngoại DDL.
  2. Bộ dữ liệu chuẩn hóa thiết kế dữ liệu tiếng Việt đầu tiên: Đóng góp tập dữ liệu gồm 970 cặp câu mô tả - cấu trúc chuẩn trích xuất từ 100 bài toán nghiệp vụ thực tế, tạo nền tảng benchmark quý báu cho cộng đồng xử lý ngôn ngữ tự nhiên tiếng Việt.
  3. Tối ưu hóa chuyển dịch cấu trúc đa bảng trong Text-to-SQL: Khắc phục triệt để điểm yếu xử lý liên kết JOIN nhiều bảng và mệnh đề gom nhóm GROUP BY trong tiếng Việt nhờ việc fine-tune VietAI/vit5-base với cơ chế Attention Mask cải tiến.
  4. Hiệu quả định lượng vượt trội: Giúp giảm thiểu 75% thời gian thiết kế lược đồ quan hệ cho kỹ sư dữ liệu và giảm 80% lỗi cú pháp thường gặp ở người mới bắt đầu học SQL.

Ứng dụng thực tế và triển khai

Kịch bản ứng dụng thực tế

  • Giáo dục thông minh (EdTech): Tích hợp vào hệ thống chấm bài thực hành tự động và trợ giảng ảo cho sinh viên ngành Hệ thống thông tin, Công nghệ phần mềm trong các môn Cơ sở dữ liệu.
  • Nền tảng No-Code / Low-Code doanh nghiệp: Cho phép nhân viên phân tích nghiệp vụ (BA) và quản lý sản phẩm (PO) phác thảo nhanh cấu trúc cơ sở dữ liệu và truy xuất báo cáo BI chỉ bằng văn bản yêu cầu thuần túy.

Hướng dẫn triển khai và Cấu hình hệ thống

  • Yêu cầu phần cứng: CPU Intel Core i5/AMD Ryzen 5 (Khuyến nghị GPU NVIDIA GTX 1650 4GB VRAM trở lên để tối ưu tốc độ sinh mã), 8GB RAM, 10GB dung lượng đĩa trống.
  • Yêu cầu môi trường: Python 3.10+, .NET SDK 8.0, Java Runtime Environment (JRE 11+ cho PlantUML engine).
# 1. Khởi chạy Flask AI Backend Server
git clone https://github.com/uit-thesis/text-to-erd-sql.git
cd text-to-erd-sql/backend
pip install torch transformers datasets flask flask-restful
python app.py --port=5000

# 2. Khởi chạy ASP.NET Core Frontend UI
cd ../frontend
dotnet restore
dotnet run --urls="http://localhost:5001"

Hạn chế và hướng phát triển

  • Hạn chế kỹ thuật hiện tại:
    • Đối với các câu văn mô tả có cấu trúc ẩn ý quá phức tạp hoặc các từ viết tắt chuyên ngành hẹp, mô hình Paraphrase vẫn có tỷ lệ nhỏ nhận diện thiếu thuộc tính khóa phụ.
    • Text-to-SQL hiện mới hỗ trợ tốt nhất trên các phương ngữ chuẩn, độ chính xác có thể suy giảm nhẹ khi gặp câu hỏi chứa tiếng lóng hoặc từ ngữ địa phương.
  • Hướng phát triển tương lai:
    • Mở rộng kiến trúc sang các mô hình ngôn ngữ lớn (LLMs) thế hệ mới (LLaMA-3, Mistral, SeaLLMs) thông qua kỹ thuật QLoRA để tăng cường khả năng suy luận logic không gian.
    • Tích hợp thêm module tự động sinh dữ liệu kiểm thử (Synthetic Mock Data) dựa trên ràng buộc DDL đã tạo ra.
    • Mở rộng hỗ trợ các hệ quản trị NoSQL (MongoDB Schema, Cassandra CQL).

Đối tượng hưởng lợi

  • Sinh viên ngành CNTT & HTTT: Nắm bắt trực quan phương pháp chuyển đổi từ yêu cầu nghiệp vụ sang cấu trúc dữ liệu, tra cứu nhanh cú pháp SQL phục vụ học tập.
  • Lập trình viên & Kỹ sư dữ liệu (Developers & Data Engineers): Tự động hóa việc viết mã boilerplate DDL và phác thảo nhanh schema, tăng tốc độ hoàn thiện MVP lên gấp 3 lần.
  • Doanh nghiệp & Startup: Rút ngắn thời gian đào tạo nội bộ, cho phép nhân sự phi kỹ thuật (Non-tech) tự tạo truy vấn dữ liệu báo cáo mà không cần phụ thuộc liên tục vào đội ngũ IT.
  • Cộng đồng nghiên cứu NLP: Cung cấp bộ phương pháp luận chi tiết và tập dữ liệu tham chiếu trong xử lý ngôn ngữ tự nhiên tiếng Việt ứng dụng cho kỹ thuật phần mềm.

Câu hỏi thường gặp

  1. Hệ thống yêu cầu cấu hình phần cứng tối thiểu như thế nào để triển khai? Hệ thống có thể chạy trên CPU thông thường với tối thiểu 8GB RAM nhờ các mô hình kích thước tối ưu hóa (vit5-base ~220M tham số). Tuy nhiên, để đạt thời gian phản hồi dưới 1.5 giây/truy vấn trong môi trường phục vụ đa người dùng, hệ thống được khuyến nghị triển khai trên máy chủ có GPU NVIDIA hỗ trợ CUDA.
  2. Khả năng mở rộng (Scalability) của hệ thống khi có lượng truy cập lớn? Nhờ kiến trúc tách rời Frontend (ASP.NET Core) và Backend (Flask RESTful API), hệ thống dễ dàng mở rộng theo chiều ngang (Horizontal Scaling). Các mô hình AI có thể được đóng gói trong Docker Container và điều phối thông qua Kubernetes hoặc Triton Inference Server để cân bằng tải linh hoạt.
  3. Hệ thống có thể tích hợp vào các phần mềm quản lý hiện hữu không? Hoàn toàn có thể. Flask Backend cung cấp các chuẩn giao tiếp RESTful API tiêu chuẩn (JSON payload), cho phép bất kỳ hệ thống nào (từ React, Angular, Vue cho đến các ứng dụng Desktop Java/WPF) gọi và nhận kết quả trực tiếp.
  4. Cần quy trình bảo trì và cập nhật dữ liệu ra sao? Khi xuất hiện các thuật ngữ nghiệp vụ mới hoặc cấu trúc câu đặc thù, người quản trị chỉ cần bổ sung các mẫu câu mới vào tập dữ liệu và thực hiện quá trình Fine-tuning định kỳ (chỉ mất khoảng 30 - 45 phút cho 5 epochs trên tập dữ liệu mở rộng).
  5. Thời gian thu hồi vốn (ROI) và chi phí triển khai giải pháp? Do toàn bộ kiến trúc sử dụng các công nghệ mã nguồn mở (Python, PyTorch, .NET Core, PlantUML), doanh nghiệp không phải trả chi phí bản quyền phần mềm. Chi phí chủ yếu là hạ tầng máy chủ cơ bản, mang lại điểm hòa vốn và giá trị ROI rõ rệt chỉ sau 2 - 3 tháng triển khai nhờ tiết kiệm hàng trăm giờ làm việc của kỹ sư dữ liệu.

Kết luận

Đồ án tốt nghiệp "Proposing Methods to Automatically Design Database and Generate Query Statement from Natural Language Description" của nhóm tác giả tại Trường Đại học Công nghệ Thông tin – ĐHQG-HCM đã xuất sắc chứng minh tính khả thi, độ tin cậy và tiềm năng ứng dụng to lớn của việc tích hợp Trí tuệ nhân tạo (NLP/Deep Learning) vào tự động hóa kỹ thuật cơ sở dữ liệu tiếng Việt. Bằng việc kết hợp sáng tạo giữa mô hình ngôn ngữ tiên tiến VietAI/vit5-base và hệ thống suy diễn quy tắc chính xác, công trình không chỉ giải quyết bài toán học thuật về mặt xử lý ngôn ngữ tự nhiên mà còn mang lại một sản phẩm phần mềm hoàn chỉnh, sẵn sàng ứng dụng và đóng góp thiết thực cho quá trình chuyển đổi số trong giáo dục và doanh nghiệp.