?Papel ?Tabla de clasificación
Aquí proporcionamos una versión Lite del conjunto de datos de desarrollo: Mini-Dev . Este conjunto de datos de mini desarrollo está diseñado para facilitar ciclos de desarrollo eficientes y rentables, especialmente para probar y perfeccionar modelos de generación de consultas SQL. Este conjunto de datos es el resultado de los comentarios de la comunidad, lo que llevó a la compilación de 500 pares text2sql de alta calidad derivados de 11 bases de datos distintas en un entorno de desarrollo. Para mejorar aún más la practicidad del sistema BIRD en entornos industriales y respaldar el desarrollo de modelos de texto a SQL, hacemos que el conjunto de datos Mini-Dev esté disponible tanto en MySQL como en PostgreSQL .
Además, presentamos dos nuevas métricas de evaluación para el conjunto de datos Mini-Dev: la puntuación de eficiencia válida basada en recompensas (R-VES) y la puntuación Soft F1 . Estas métricas tienen como objetivo evaluar la eficiencia y precisión de los modelos de texto a SQL, respectivamente. Es importante señalar que ambas métricas, actualmente en su versión beta, se aplican exclusivamente al conjunto de datos Mini-Dev que utiliza modelos de referencia.
Agradecemos contribuciones y sugerencias para mejorar estas métricas, particularmente en lo que respecta a su integración en las tablas de clasificación existentes. No dude en contactarnos si está interesado en estos desarrollos o tiene alguna propuesta de mejora.
A continuación se muestran algunas estadísticas clave del conjunto de datos de mini-desarrollador:
El conjunto de datos contiene los siguientes recursos principales:
database
: la base de datos debe almacenarse en ./mini_dev_data/dev_databases/
. En cada carpeta de base de datos, tiene dos componentes:database_description
: los archivos csv se fabrican para describir el esquema de la base de datos y sus valores para que los modelos exploren o hagan referencia.sqlite
: El contenido de la base de datos en BIRD. Nota
Debe descargar las últimas bases de datos de desarrollo para poder construir una base de datos en MySQL y PostgreSQL. Si usa solo la versión SQLite, puede usar las bases de datos de desarrollo originales.
data
: cada par de texto a SQL con la evidencia de conocimiento de Oracle se almacena como un archivo json, es decir, mini_dev_sqlite.json
se almacena en ./mini_dev_data/mini_dev_sqlite.json
. Cada archivo json tiene tres partes principales:db_id
: los nombres de las bases de datosquestion
: las preguntas seleccionadas mediante crowdsourcing humano de acuerdo con las descripciones de la base de datos y el contenido de la base de datos.evidence
: la evidencia de conocimiento externo anotada por expertos para ayudar a los modelos o anotadores SQL.SQL
: SQL anotados por crowdsource que hacen referencia a descripciones de bases de datos y contenidos de bases de datos, para responder las preguntas con precisión.ground-truth SQL file
: el archivo SQL debe almacenarse en ./llm/mini_dev_data/mini_dev_sqlite_gold.sql
.llm
: contiene códigos fuente para convertir textos a SQL llamando a API desde LLM, como GPT35-turbo-instruct
, gpt-35-turbo
, gpt-4
, gpt-4-32k
y gpt-4-turbo
. Puede ubicar las consultas SQL dentro de los archivos mini_dev_mysql.json
y mini_dev_postgresql.json
. Estas consultas se transpilaron de las versiones originales de SQLite utilizando el paquete sqlglot y luego se refinaron manualmente y con GPT-4 Turbo. Después de descargar el conjunto de datos de Mini-Dev, cada carpeta de base de datos contendrá archivos .sql y command.script. Siga las instrucciones a continuación para configurar la base de datos en MySQL y 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
en la carpeta MINIDEV_mysql
): mysql -u root -p BIRD < BIRD_dev.sql
Se pueden encontrar ejemplos de cómo ejecutar consultas mysql en Python (con pymysql) en el archivo examples/mysql_example.ipynb
.
Si encuentra el error: "esto es incompatible con sql_mode=only_full_group_by", puede ejecutar el siguiente comando para desactivar 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
en la carpeta MINIDEV_postgresql
): psql -U USERNAME -d BIRD -f BIRD_dev.sql
examples/postgresql_example.ipynb
. Primero, necesita instalar openai en su entorno Python mediante:
conda create -n BIRD python=3.11.5
pip install requirements.txt
Utilice este script para ejecutar el modelo OpenAI en la nube de Azure. (Es posible que deba ajustar los parámetros y rutas según sus preferencias):
cd ./llm/
sh ./run/run_gpt.sh
Procese posteriormente los resultados recopilados con el formato: SQL y su db_id
, que está dividido por 't----- bird -----t'
. Los ejemplos se muestran en ./llm/exp_result/turbo_output/predict_mini_dev_gpt-4-turbo_cot_SQLite.json
. Coloque el archivo SQL de verdad fundamental en el archivo ./data/
. Y es posible que necesites diseñar tu propia etiqueta ChatGPT. El archivo principal para la evaluación ex se encuentra en ./llm/src/evaluation_ex.py
.
Entonces podrías evaluar los resultados mediante la siguiente línea de comando:
cd ./llm/
sh ./run/run_evaluation.sh
El archivo principal para la evaluación de R-VES se encuentra en ./llm/src/evaluation_ves.py
. R-VES y EX se pueden evaluar en el mismo shell, por lo que puedes evaluar su eficiencia mediante:
cd ./llm/
sh ./run/run_evaluation.sh
(Para R-VES estable, es posible que necesite ampliar timeout
o repetir y promediar los resultados. En nuestra evaluación de prueba, ampliaremos timeout
a 3 s/ex; luego repetimos 5 veces para el cálculo de VES, solo se informarán los resultados más altos .)
En la última versión, ajustamos la evaluación VES para que sea más estable y confiable. En lugar de simplemente medir la relación de tiempo entre los SQL de predicción y de verdad, ahora asignamos puntos de recompensa en función de la relación de tiempo. Los R-VES se calculan de la siguiente manera:
El archivo principal para la evaluación Soft F1-Score se encuentra en ./llm/src/evaluation_f1.py
. Soft-F1, VES y EX se pueden evaluar en el mismo shell, por lo que puedes evaluar su eficiencia a través de:
cd ./llm/
sh ./run/run_evaluation.sh
Junto con la actualización del conjunto Mini-Dev, introdujimos una nueva métrica de evaluación: la puntuación suave F1. Esta métrica está diseñada específicamente para evaluar el rendimiento de los modelos de texto a SQL midiendo la similitud entre las tablas producidas por consultas SQL previstas y las de la verdad básica. En pocas palabras, la puntuación F1 suave es una métrica más indulgente que reduce el impacto del orden de las columnas y los valores faltantes en las tablas producidas por las consultas SQL previstas.
A continuación se demuestra cómo calculamos la puntuación F1 suave.
Tabla de resultados de SQL de verdad fundamental:
Fila | ||
---|---|---|
1 | 'Manzana' | 325 |
2 | 'Naranja' | |
3 | 'Banana' | 119 |
Tabla de resultados de SQL previstos:
Fila | ||
---|---|---|
1 | 325 | 'Manzana' |
2 | 191 | 'Naranja' |
3 | 'Banana' |
La puntuación suave F1 se calcula de la siguiente manera:
emparejado | Pred_solo | solo oro | |
---|---|---|---|
Fila 1 | 2 | 0 | 0 |
Fila 2 | 1 | 1 | 0 |
Fila 3 | 1 | 0 | 1 |
SQLite | mysql | PostgreSQL | |
---|---|---|---|
mixtral-8x7b | 21.60 | 13.60 | 12.40 |
llama3-8b-instruir | 24.40 | 24.60 | 18.40 |
instrucción phi-3-medium-128k | 30,60 | 25.00 | 21.60 |
gpt-35-turbo-instrucciones | 33,60 | 31.20 | 26,60 |
gpt-35-turbo | 38.00 | 36.00 | 27.40 |
llama3-70b-instruir | 40.80 | 37.00 | 29.40 |
TA + gpt-35-turbo | 41,60 | - | - |
TA + llama3-70b-instruir | 42,80 | - | - |
gpt-4-turbo | 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-turbo | 58.00 | - | - |
TA + gpt-4o | 63.00 | - | - |
SQLite | mysql | PostgreSQL | |
---|---|---|---|
mixtral-8x7b | 20.41 | 12,99 | 14.16 |
llama3-8b-instruir | 23.27 | 23.66 | 17,90 |
instrucción phi-3-medium-128k | 29,54 | 24.12 | 21.07 |
gpt-35-turbo-instrucciones | 32.28 | 30.39 | 26.14 |
gpt-35-turbo | 37.33 | 34,94 | 26,80 |
llama3-70b-instruir | 39.02 | 35,82 | 28.80 |
TA + gpt-35-turbo | 40,59 | - | - |
TA + llama3-70b-instruir | 41,37 | - | - |
gpt-4-turbo | 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-turbo | 56,44 | - | - |
TA + gpt-4o | 60,86 | - | - |
SQLite | mysql | PostgreSQL | |
---|---|---|---|
mixtral-8x7b | 22,95 | 13,79 | 14.70 |
llama3-8b-instruir | 27,87 | 27,49 | 19.35 |
instrucción phi-3-medium-128k | 35.33 | 28,73 | 24.11 |
gpt-35-turbo-instrucciones | 36.34 | 33,85 | 28.30 |
gpt-35-turbo | 41,84 | 40,75 | 30.22 |
TA + gpt-35-turbo | 44,25 | - | - |
llama3-70b-instruir | 44,38 | 40,95 | 31.43 |
TA + llama3-70b-instruir | 46,66 | - | - |
gpt-4-turbo | 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-turbo | 62,40 | - | - |
TA + gpt-4o | 66,97 | - | - |
Colocamos los SQL previstos de los modelos de referencia en ./llm/exp_result/sql_output_kg/
como referencia.
Principales contribuyentes al proyecto Mini-Dev: Xiaolong Li, Jinyang Li, Ge Qu, Binyuan Hui, Reynold Cheng, Chenhao Ma.
Extendemos nuestro más sincero agradecimiento a los invaluables comentarios de la comunidad abierta, incluidos los revisores de github (@freiz @nnarodytska @josem7 @wbbeyourself @ronch99 @tshu-w) y aquellos que se comunicaron con nosotros por correo electrónico con sus valiosas sugerencias.
Si tiene alguna pregunta, comuníquese con nosotros a través de [email protected].
TA-SQL
como línea base de razonamiento de ICL. Cite el repositorio si cree que nuestro trabajo es útil para usted.
@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}
}