Text-to-SQL วัดผลยังไง
ใครที่ได้อ่านบทความ Text-to-SQL ด้วย LLM ไปแล้ว หรือใครที่กำลังพยายามจะ Improve text-to-sql กันอยู่ บทความนี้เรามาวัดกันหน่อยดีกว่าว่า Text-to-SQL ที่เราทำนั้น เจ๋งแค่ไหน 😎
จริง ๆ แล้ว งานวิจัยเกี่ยวกับ Text-to-SQL เนี่ยมีมานานแล้วนะฮะ ก็เลยมีชุดข้อมูลทดสอบเยอะแยะมากมาย แต่ข้อมูลที่ดี ที่เราอยากจะทดสอบเนี่ย มันควรจะเป็นข้อมูลที่เป็นคล้ายกับข้อมูลขนาดใหญ่ในองค์กร ที่มี table เป็นร้อย column ชื่อก็กำกวม หรือโจทย์ที่ต้อง join หลาย ๆ table เข้าด้วยกัน
เอาล่ะ มาดูกันดีกว่าว่ามี dataset อะไรน่าสนใจบ้าง
- Spider 🕷️
- BIRD-SQL 🦜
- Chat with your Data (cwd) 💬
- Financials & Economics: Enterprise 📈
- GretelAI Synthetic Dataset
- และอื่น ๆ อีกมากมาย
Metrics ที่ใช้วัด
ส่วนเรื่อง metrics ที่ใช้วัดกันบ่อย ๆ จะมี 3 ตัวหลัก ๆ คือ
- Valid SQL (VA) - ดูว่า SQL ที่ออกมา valid มั้ย พิมพ์ลงไปรันได้ป่าว ไม่ error นะ
- Exact Match (EM) - เอา SQL ที่สร้างได้ไปเทียบกับเฉลยเลย ต้องตรงกันทุกตัวอักษรเลยนะจ๊ะ แต่มันไม่ค่อยแฟร์เท่าไหร่ เพราะจริง ๆ ลำดับ column หรือ alias มันก็เขียนได้หลายแบบ บาง Paper เค้าจะทำการ เอา SQL ที่ได้ มา Normalize ให้เหลือแค่ SQL Clause เช่น SELECT WHERE FROM... แล้วเทียบจำนวนของ SQL Clause แทน เช่น* (ดูต่อข้างล่าง)
- Execution Accuracy (EX) - อันนี้วัดกันที่ผลลัพธ์เลย ได้ค่าถูกไหม เช่นถามว่าโพสต์ไหน comment เยอะสุด ก็ต้องได้เลข id ของโพสต์นั้นออกมาจริง ๆ
แต่จริง ๆ มี metrics อื่น ๆ อีกเพียบ เช่น Test Suite Accuracy, Exact set matching, Component matching หรือ Sub-tree elements matching อยากรู้ละเอียดก็ไปหาอ่านเพิ่มเติมได้เน้อ A survey on deep learning approaches for text-to-SQL
*Exact Match Normalize SQL
Normalize SQL คือ การเอา SQL Query ที่ได้ มายุบเอาแค่ SQL Keywords
SELECT post_id, SUM(views) as total_views
FROM fact_posts
GROUP BY post_id
ORDER BY total_views DESC
LIMIT 1
ก็จะเหลือเป็น
["SELECT", "FROM", "GROUP BY", "ORDER BY", "DESC", "LIMIT"]
แล้วค่อยเทียบกัน
Evaluation Framework
และแน่นอนอีกตามเคยครับ เวลาจะประเมินผลทั้งที อย่าลืมไปส่อง framework เด็ด ๆ อย่าง SQLEval ของ defog.ai ด้วยล่ะ opensource ด้วย
สรุป
เอาเป็นว่า ใครอยากทำ Text-to-SQL ทั้งที อย่าลืมเช็กผลกันด้วยนะ จะได้มั่นใจว่าที่ทำไปนั้นเวิร์คจริง มีคุณภาพจริง ปังจริง! 🎉 ไว้เจอกันใหม่บทความหน้านะฮะ บ๊ายบายยย 👋