Tại sao Text-to-SQL thất bại trong doanh nghiệp

Hầu hết các bản demo Text-to-SQL đều quá lý tưởng.

Chúng sử dụng các schema đơn giản và tên bảng hiển nhiên. Chúng giả định rằng một hoặc hai bảng liên kết với nhau một cách hoàn hảo. Điều này có thể hoạt động trong một bản demo, nhưng sẽ thất bại trong một doanh nghiệp thực tế.

Trong các cơ sở dữ liệu doanh nghiệp, phần khó nhất không phải là mệnh đề SELECT. Phần khó nhất chính là đường dẫn join (join path).

Một mô hình có thể viết một truy vấn hợp lệ để tính doanh thu theo khách hàng. Câu lệnh SQL chạy được. Dashboard hiển thị các con số. Nhưng câu trả lời lại sai.

Tại sao điều này lại xảy ra?

  • Bảng khách hàng không phải là danh sách gốc (master list) chính thức.
  • Trường doanh thu không phải là phiên bản đã được bộ phận tài chính phê duyệt.
  • Các bản ghi bị trùng lặp giữa các khu vực.
  • Việc join tạo ra các lỗi fanout (lỗi nhân bản dữ liệu).
  • Năm tài chính khác với năm dương lịch.

Một truy vấn hợp lệ về mặt cú pháp không đồng nghĩa với một truy vấn đáng tin cậy.

Các hệ thống thực tế (production) rất hỗn loạn. Bạn sẽ đối mặt với việc thiếu khóa ngoại (foreign keys), các bảng cũ (legacy tables) và các mối quan hệ một-nhiều (one-to-many) làm thổi phồng các con số. Ngay cả con người cũng cần kiểm tra các báo cáo cũ hoặc hỏi bộ phận tài chính trước khi họ tin tưởng vào một phép join.

Một mô hình AI chỉ nhìn thấy tên và các cột. Nó sẽ đoán. Đôi khi sự phỏng đoán đó rất nguy hiểm.

Hãy xem xét lỗi fanout. Nếu bạn join bảng orders với order lines và sau đó là shipments, một đơn hàng có thể bị đếm nhiều lần. Câu lệnh SQL là đúng, nhưng kết quả lại sai.

Metadata có giúp ích, nhưng vẫn chưa đủ. Tên cột không cho bạn biết liệu một mối quan hệ có an toàn để báo cáo tài chính hay không. Khóa ngoại không giải thích được các ngoại lệ trong lịch sử.

Text-to-SQL cần trí tuệ về mối quan hệ (relationship intelligence).

Một hệ thống đáng tin cậy phải biết:

  • Các đường dẫn join đã được phê duyệt cho các câu hỏi kinh doanh cụ thể.
  • Bản số của mối quan hệ (relationship cardinality).
  • Các rủi ro fanout đã biết.
  • Những đường dẫn nào đã lỗi thời (deprecated).

Thay vì chỉ viết mã, hệ thống nên suy luận về tính an toàn. Nó nên chọn đường dẫn đáng tin cậy hoặc yêu cầu trợ giúp khi các đường dẫn không rõ ràng.

Khoảng cách trong các hệ thống hiện tại là bước nhảy từ việc ánh xạ tên sang việc tạo SQL. Bạn phải thêm một lớp ngữ cảnh về mối quan hệ.

Text-to-SQL không chỉ là vấn đề ngôn ngữ. Đó là vấn đề về ngữ cảnh.

Cho đến khi các mô hình hiểu được phép join nào là an toàn, chúng sẽ chỉ hoạt động trong các bản demo nhưng sẽ thất bại trong môi trường thực tế.

Source: https://dev.to/arisyndata/why-text-to-sql-breaks-when-the-join-path-is-not-obvious-3bk0

Optional learning community: https://t.me/GyaanSetuAi