?กระดาษ ?ลีดเดอร์บอร์ด
ที่นี่ เรามีชุดข้อมูลการพัฒนาเวอร์ชัน Lite: Mini-Dev ชุดข้อมูล Dev ขนาดเล็กนี้ออกแบบมาเพื่ออำนวยความสะดวกในวงจรการพัฒนาที่มีประสิทธิภาพและคุ้มค่า โดยเฉพาะอย่างยิ่งสำหรับการทดสอบและปรับแต่งโมเดลการสร้างคิวรี SQL ชุดข้อมูลนี้เป็นผลมาจากความคิดเห็นของชุมชน ซึ่งนำไปสู่การรวบรวมคู่ text2sql คุณภาพสูง 500 คู่ที่ได้มาจากฐานข้อมูลที่แตกต่างกัน 11 ฐานข้อมูลในสภาพแวดล้อมการพัฒนา เพื่อเพิ่มประสิทธิภาพการใช้งานจริงของระบบ BIRD ในการตั้งค่าอุตสาหกรรมและสนับสนุนการพัฒนาโมเดลข้อความเป็น SQL เราจึงจัดทำชุดข้อมูล Mini-Dev ทั้งใน MySQL และ PostgreSQL
นอกจากนี้ เรายังแนะนำเมตริกการประเมินผลใหม่สองรายการสำหรับชุดข้อมูล Mini-Dev: คะแนนประสิทธิภาพที่ถูกต้องตามรางวัล (R-VES) และ Soft F1-Score ตัวชี้วัดเหล่านี้มีจุดมุ่งหมายเพื่อประเมินประสิทธิภาพและความแม่นยำของโมเดลข้อความเป็น SQL ตามลำดับ สิ่งสำคัญคือต้องทราบว่าเมตริกทั้งสองซึ่งขณะนี้อยู่ในเวอร์ชันเบต้านั้น ใช้กับชุดข้อมูล Mini-Dev โดยใช้โมเดลพื้นฐานเท่านั้น
เรายินดีรับการสนับสนุนและข้อเสนอแนะในการปรับปรุงตัวชี้วัดเหล่านี้ โดยเฉพาะอย่างยิ่งเกี่ยวกับการบูรณาการเข้ากับกระดานผู้นำที่มีอยู่ โปรดอย่าลังเลที่จะติดต่อเราหากคุณสนใจในการพัฒนาเหล่านี้ หรือมีข้อเสนอสำหรับการปรับปรุง
ด้านล่างนี้คือสถิติที่สำคัญของชุดข้อมูล mini-dev:
ชุดข้อมูลประกอบด้วยทรัพยากรหลักต่อไปนี้:
database
: ฐานข้อมูลควรถูกเก็บไว้ภายใต้ . ./mini_dev_data/dev_databases/
mini_dev_data/dev_databases/ ในแต่ละโฟลเดอร์ฐานข้อมูลจะมีสององค์ประกอบ:database_description
: ไฟล์ CSV ถูกสร้างขึ้นเพื่ออธิบายสคีมาฐานข้อมูลและค่าสำหรับแบบจำลองที่จะสำรวจหรืออ้างอิงsqlite
: เนื้อหาฐานข้อมูลใน BIRD บันทึก
คุณต้องดาวน์โหลดฐานข้อมูล dev ล่าสุดเพื่อสร้างฐานข้อมูลใน MySQL และ PostgreSQL หากคุณใช้เวอร์ชัน SQLite เท่านั้น คุณสามารถใช้ฐานข้อมูล dev ดั้งเดิมได้
data
: แต่ละคู่ข้อความเป็น SQL พร้อมหลักฐานความรู้ของ Oracle จะถูกจัดเก็บเป็นไฟล์ json เช่น mini_dev_sqlite.json
ถูกเก็บไว้ใน ./mini_dev_data/mini_dev_sqlite.json
ในไฟล์ json แต่ละไฟล์จะมีสามส่วนหลัก:db_id
: ชื่อของฐานข้อมูลquestion
: คำถามที่รวบรวมโดยการรวบรวมมวลชนของมนุษย์ตามคำอธิบายฐานข้อมูล เนื้อหาฐานข้อมูลevidence
: หลักฐานความรู้ภายนอกที่มีคำอธิบายประกอบโดยผู้เชี่ยวชาญเพื่อขอความช่วยเหลือจากแบบจำลองหรือคำอธิบายประกอบ SQLSQL
: SQLs ที่รวบรวมคำอธิบายประกอบโดย CrowdSource โดยอ้างอิงถึงคำอธิบายฐานข้อมูล เนื้อหาฐานข้อมูล เพื่อตอบคำถามได้อย่างถูกต้องground-truth SQL file
: ไฟล์ SQL ควรเก็บไว้ที่ ./llm/mini_dev_data/mini_dev_sqlite_gold.sql
llm
: ประกอบด้วยซอร์สโค้ดสำหรับแปลงข้อความเป็น SQL โดยการเรียก API จาก LLM เช่น GPT35-turbo-instruct
, gpt-35-turbo
, gpt-4
, gpt-4-32k
และ gpt-4-turbo
คุณสามารถค้นหาการสืบค้น SQL ภายในไฟล์ mini_dev_mysql.json
และ mini_dev_postgresql.json
คำค้นหาเหล่านี้ได้รับการแปลงจากเวอร์ชัน SQLite ดั้งเดิมโดยใช้แพ็คเกจ sqlglot จากนั้นปรับปรุงด้วยตนเองและด้วย GPT-4 Turbo หลังจากดาวน์โหลดชุดข้อมูล Mini-Dev แต่ละโฟลเดอร์ฐานข้อมูลจะมีไฟล์ .sql และ command.script ทำตามคำแนะนำด้านล่างเพื่อตั้งค่าฐานข้อมูลใน MySQL และ PostgreSQL:
export PATH=$PATH:/usr/local/mysql/bin
sudo /usr/local/mysql/support-files/mysql.server start
mysql -u root -p
CREATE DATABASE BIRD ;
BIRD_dev.sql
ในโฟลเดอร์ MINIDEV_mysql
): mysql -u root -p BIRD < BIRD_dev.sql
ตัวอย่างวิธีการเรียกใช้การสืบค้น mysql ใน Python (ที่มี pymysql) สามารถพบได้ในไฟล์ examples/mysql_example.ipynb
หากคุณพบข้อผิดพลาด: "สิ่งนี้เข้ากันไม่ได้กับ sql_mode=only_full_group_by" คุณสามารถเรียกใช้คำสั่งต่อไปนี้เพื่อปิดการใช้งาน sql_mode:
select @@ global . sql_mode ;
SET GLOBAL sql_mode = ' {EVERYTHING SHOW IN THE ABOVE COMMAND EXCEPT ONLY_FULL_GROUP_BY} ' ;
BIRD
BIRD_dev.sql
ในโฟลเดอร์ MINIDEV_postgresql
): psql -U USERNAME -d BIRD -f BIRD_dev.sql
examples/postgresql_example.ipynb
ขั้นแรก คุณต้องติดตั้ง openai ในสภาพแวดล้อมของ python โดย:
conda create -n BIRD python=3.11.5
pip install requirements.txt
ใช้สคริปต์นี้เพื่อรันโมเดล OpenAI บนคลาวด์ Azure (คุณอาจต้องปรับพารามิเตอร์และเส้นทางตามที่คุณต้องการ):
cd ./llm/
sh ./run/run_gpt.sh
โปรดประมวลผลผลลัพธ์ที่รวบรวมไว้ภายหลังในรูปแบบ: SQL และ db_id
ซึ่งแยกด้วย 't----- bird -----t'
ตัวอย่างจะแสดงอยู่ใน ./llm/exp_result/turbo_output/predict_mini_dev_gpt-4-turbo_cot_SQLite.json
วางไฟล์ ground-truth sql ลงในไฟล์ ./data/
. และคุณอาจต้องออกแบบแท็ก ChatGPT ด้วยตัวเอง ไฟล์หลักสำหรับการประเมิน ex อยู่ที่ . ./llm/src/evaluation_ex.py
จากนั้นคุณสามารถประเมินผลลัพธ์โดยใช้บรรทัดคำสั่งต่อไปนี้:
cd ./llm/
sh ./run/run_evaluation.sh
ไฟล์หลักสำหรับการประเมิน R-VES อยู่ที่ ./llm/src/evaluation_ves.py
R-VES และ EX สามารถประเมินได้ในเชลล์เดียวกัน ดังนั้นคุณจึงสามารถประเมินประสิทธิภาพของคุณได้ผ่าน:
cd ./llm/
sh ./run/run_evaluation.sh
(สำหรับ R-VES ที่เสถียร คุณอาจต้องขยาย timeout
หรือการทำซ้ำและผลลัพธ์โดยเฉลี่ย ในการประเมินการทดสอบของเรา เราจะขยาย timeout
เป็น 3 วินาที/อดีต จากนั้นเราทำซ้ำ 5 ครั้งสำหรับการคำนวณ VES เฉพาะผลลัพธ์สูงสุดเท่านั้นที่จะถูกรายงาน .)
ในเวอร์ชันล่าสุดเราปรับการประเมิน VES ให้มีเสถียรภาพและเชื่อถือได้มากขึ้น แทนที่จะวัดอัตราส่วนเวลาระหว่าง SQL ที่คาดการณ์และตามความเป็นจริง ตอนนี้เราจะกำหนดคะแนนรางวัลตามอัตราส่วนเวลา R-VES มีการคำนวณดังนี้:
ไฟล์หลักสำหรับการประเมิน Soft F1-Score อยู่ที่ . ./llm/src/evaluation_f1.py
Soft-F1, VES และ EX สามารถประเมินได้ในเชลล์เดียวกัน ดังนั้นคุณจึงสามารถประเมินประสิทธิภาพของคุณผ่าน:
cd ./llm/
sh ./run/run_evaluation.sh
นอกเหนือจากการอัปเดตชุด Mini-Dev แล้ว เรายังแนะนำการวัดผลการประเมินใหม่—คะแนน F1 แบบอ่อน หน่วยวัดนี้ได้รับการออกแบบมาเป็นพิเศษเพื่อประเมินประสิทธิภาพของโมเดลข้อความเป็น SQL โดยการวัดความคล้ายคลึงกันระหว่างตารางที่สร้างโดยการสืบค้น SQL ที่คาดการณ์ไว้กับตารางที่มาจากความจริงภาคพื้นดิน โดยสรุป คะแนน F1 แบบอ่อนเป็นหน่วยวัดที่ผ่อนปรนมากกว่า ซึ่งจะช่วยลดผลกระทบของลำดับคอลัมน์และค่าที่หายไปในตารางที่สร้างโดยการสืบค้น SQL ที่คาดการณ์ไว้
ข้อมูลต่อไปนี้สาธิตวิธีการคำนวณคะแนน F1 แบบอ่อน
ตารางผลลัพธ์ SQL ความจริงภาคพื้นดิน:
แถว | ||
---|---|---|
1 | 'แอปเปิล' | 325 |
2 | 'ส้ม' | |
3 | 'กล้วย' | 119 |
ตารางผลลัพธ์ SQL ที่คาดการณ์ไว้:
แถว | ||
---|---|---|
1 | 325 | 'แอปเปิล' |
2 | 191 | 'ส้ม' |
3 | 'กล้วย' |
คะแนน F1 แบบอ่อนมีการคำนวณดังนี้:
ตรงกัน | Pred_only | ทอง_เท่านั้น | |
---|---|---|---|
แถวที่ 1 | 2 | 0 | 0 |
แถวที่ 2 | 1 | 1 | 0 |
แถวที่ 3 | 1 | 0 | 1 |
SQLite | MySQL | PostgreSQL | |
---|---|---|---|
มิกซ์ทรัล-8x7b | 21.60 | 13.60 | 12.40 |
llama3-8b-สั่งสอน | 24.40 | 24.60 | 18.40 |
phi-3-medium-128k-instruct | 30.60 | 25.00 น | 21.60 |
gpt-35-turbo-instruct | 33.60 | 31.20 | 26.60 |
gpt-35-เทอร์โบ | 38.00 น | 36.00 น | 27.40 |
llama3-70b-สั่งสอน | 40.80 | 37.00 น | 29.40 |
TA + gpt-35-เทอร์โบ | 41.60 | - | - |
TA + llama3-70b-สั่งสอน | 42.80 | - | - |
gpt-4-เทอร์โบ | 45.80 | 41.00 น | 36.00 น |
gpt-4-32k | 47.00 น | 43.20 | 35.00 น |
GPT-4 | 47.80 | 40.80 | 35.80 |
TA + gpt-4-เทอร์โบ | 58.00 | - | - |
TA + GPT-4o | 63.00 น | - | - |
SQLite | MySQL | PostgreSQL | |
---|---|---|---|
มิกซ์ทรัล-8x7b | 20.41 | 12.99 | 14.16 |
llama3-8b-สั่งสอน | 23.27 | 23.66 | 17.90 |
phi-3-medium-128k-instruct | 29.54 | 24.12 | 21.07 |
gpt-35-turbo-instruct | 32.28 | 30.39 | 26.14 |
gpt-35-เทอร์โบ | 37.33 | 34.94 | 26.80 |
llama3-70b-สั่งสอน | 39.02 | 35.82 | 28.80 |
TA + gpt-35-เทอร์โบ | 40.59 | - | - |
TA + llama3-70b-สั่งสอน | 41.37 | - | - |
gpt-4-เทอร์โบ | 44.79 | 39.37 | 35.23 |
gpt-4-32k | 45.29 | 42.79 | 34.59 |
GPT-4 | 45.91 | 39.92 | 35.24 |
TA + gpt-4-เทอร์โบ | 56.44 | - | - |
TA + GPT-4o | 60.86 | - | - |
SQLite | MySQL | PostgreSQL | |
---|---|---|---|
มิกซ์ทรัล-8x7b | 22.95 | 13.79 | 14.70 |
llama3-8b-สั่งสอน | 27.87 | 27.49 | 19.35 |
phi-3-medium-128k-instruct | 35.33 | 28.73 | 24.11 |
gpt-35-turbo-instruct | 36.34 | 33.85 | 28.30 น |
gpt-35-เทอร์โบ | 41.84 | 40.75 | 30.22 |
TA + gpt-35-เทอร์โบ | 44.25 | - | - |
llama3-70b-สั่งสอน | 44.38 | 40.95 | 31.43 |
TA + llama3-70b-สั่งสอน | 46.66 | - | - |
gpt-4-เทอร์โบ | 50.08 | 45.96 | 38.36 |
gpt-4-32k | 51.92 | 47.38 | 39.55 |
GPT-4 | 52.69 | 45.78 | 38.96 |
TA + gpt-4-เทอร์โบ | 62.40 | - | - |
TA + GPT-4o | 66.97 | - | - |
เราทิ้ง SQL ที่คาดการณ์ของโมเดลพื้นฐานไว้ใต้ ./llm/exp_result/sql_output_kg/
/ เพื่อใช้อ้างอิง
ผู้ร่วมให้ข้อมูลหลักในโครงการ Mini-Dev: Xiaolong Li, Jinyang Li, Ge Qu, Binyuan Hui, Reynold Cheng, Chenhao Ma
เราขอขอบคุณอย่างจริงใจต่อการตอบรับอันล้ำค่าจากชุมชนเปิด รวมถึงผู้ตรวจสอบ GitHub (@freiz @nnarodytska @josem7 @wbbeyourself @ronch99 @tshu-w ) และผู้ที่ติดต่อเราผ่านทางอีเมลพร้อมคำแนะนำอันมีค่าของพวกเขา
หากมีคำถามใดๆ โปรดติดต่อเราทาง [email protected]
TA-SQL
เป็นพื้นฐานการใช้เหตุผลของ ICL โปรดอ้างอิง repo หากคุณคิดว่างานของเรามีประโยชน์กับคุณ
@article{li2024can,
title={Can llm already serve as a database interface? a big bench for large-scale database grounded text-to-sqls},
author={Li, Jinyang and Hui, Binyuan and Qu, Ge and Yang, Jiaxi and Li, Binhua and Li, Bowen and Wang, Bailin and Qin, Bowen and Geng, Ruiying and Huo, Nan and others},
journal={Advances in Neural Information Processing Systems},
volume={36},
year={2024}
}