?Papel ?Tabela de classificação
Aqui, fornecemos uma versão Lite do conjunto de dados de desenvolvimento: Mini-Dev . Este conjunto de dados de mini-desenvolvimento foi projetado para facilitar ciclos de desenvolvimento eficientes e econômicos, especialmente para testar e refinar modelos de geração de consultas SQL. Este conjunto de dados resulta do feedback da comunidade, levando à compilação de 500 pares text2sql de alta qualidade derivados de 11 bancos de dados distintos em um ambiente de desenvolvimento. Para aumentar ainda mais a praticidade do sistema BIRD em ambientes industriais e apoiar o desenvolvimento de modelos texto para SQL, disponibilizamos o conjunto de dados Mini-Dev em MySQL e PostgreSQL .
Além disso, introduzimos duas novas métricas de avaliação para o conjunto de dados Mini-Dev: a pontuação de eficiência válida baseada em recompensa (R-VES) e a pontuação Soft F1 . Essas métricas visam avaliar a eficiência e a precisão dos modelos texto para SQL, respectivamente. É importante observar que ambas as métricas, atualmente em versão beta, aplicam-se exclusivamente ao conjunto de dados Mini-Dev usando modelos de linha de base.
Agradecemos contribuições e sugestões para melhorar essas métricas, especialmente no que diz respeito à sua integração nas tabelas de classificação existentes. Por favor não hesite em contactar-nos se estiver interessado nestes desenvolvimentos ou tiver alguma proposta de melhorias.
Abaixo estão algumas estatísticas importantes do conjunto de dados mini-dev:
O conjunto de dados contém os seguintes recursos principais:
database
: o banco de dados deve ser armazenado em ./mini_dev_data/dev_databases/
. Em cada pasta do banco de dados, ele possui dois componentes:database_description
: os arquivos csv são fabricados para descrever o esquema do banco de dados e seus valores para modelos explorarem ou referenciarem.sqlite
: O conteúdo do banco de dados no BIRD. Observação
Você deve baixar os bancos de dados de desenvolvimento mais recentes para construir o banco de dados no MySQL e PostgreSQL. Se você usar apenas a versão SQLite, poderá usar os bancos de dados de desenvolvimento originais.
data
: Cada par de texto para SQL com a evidência de conhecimento do Oracle é armazenado como um arquivo json, ou seja, mini_dev_sqlite.json
é armazenado em ./mini_dev_data/mini_dev_sqlite.json
. Cada arquivo JSON tem três partes principais:db_id
: os nomes dos bancos de dadosquestion
: as perguntas selecionadas por crowdsourcing humano de acordo com as descrições do banco de dados e o conteúdo do banco de dados.evidence
: a evidência de conhecimento externo anotada por especialistas para auxílio de modelos ou anotadores SQL.SQL
: SQLs anotados pelo crowdsource referentes às descrições do banco de dados, conteúdo do banco de dados, para responder às perguntas com precisão.ground-truth SQL file
: O arquivo SQL deve ser armazenado em ./llm/mini_dev_data/mini_dev_sqlite_gold.sql
.llm
: Contém códigos-fonte para converter textos em SQLs chamando APIs de LLMs, como GPT35-turbo-instruct
, gpt-35-turbo
, gpt-4
, gpt-4-32k
e gpt-4-turbo
. Você pode localizar as consultas SQL nos arquivos mini_dev_mysql.json
e mini_dev_postgresql.json
. Essas consultas foram transpiladas das versões originais do SQLite usando o pacote sqlglot e depois refinadas manualmente e com GPT-4 Turbo. Depois de baixar o conjunto de dados Mini-Dev, cada pasta do banco de dados conterá arquivos .sql e command.script. Siga as instruções abaixo para configurar o banco de dados em MySQL e 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
na pasta MINIDEV_mysql
): mysql -u root -p BIRD < BIRD_dev.sql
Exemplos de como executar a consulta mysql no Python (com pymysql) podem ser encontrados no arquivo examples/mysql_example.ipynb
.
Se você encontrar o erro: "isto é incompatível com sql_mode=only_full_group_by", você pode executar o seguinte comando para desabilitar o 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
na pasta MINIDEV_postgresql
): psql -U USERNAME -d BIRD -f BIRD_dev.sql
examples/postgresql_example.ipynb
. Primeiro, você precisa instalar o openai em seu ambiente python:
conda create -n BIRD python=3.11.5
pip install requirements.txt
Utilize este script para executar o modelo OpenAI na nuvem Azure. (pode ser necessário ajustar parâmetros e caminhos de acordo com sua preferência):
cd ./llm/
sh ./run/run_gpt.sh
Pós-processe seus resultados coletados no formato: SQL e seu db_id
, que é dividido por 't----- bird -----t'
. Os exemplos são mostrados em ./llm/exp_result/turbo_output/predict_mini_dev_gpt-4-turbo_cot_SQLite.json
. Coloque o arquivo sql verdadeiro em ./data/
. E você pode precisar criar uma tag ChatGPT por conta própria. O arquivo principal para avaliação ex está localizado em ./llm/src/evaluation_ex.py
.
Então você poderia avaliar os resultados pela seguinte linha de comando:
cd ./llm/
sh ./run/run_evaluation.sh
O arquivo principal para avaliação R-VES está localizado em ./llm/src/evaluation_ves.py
. R-VES e EX podem ser avaliados no mesmo shell, então você pode avaliar sua eficiência por meio de:
cd ./llm/
sh ./run/run_evaluation.sh
(Para R-VES estável, pode ser necessário aumentar timeout
ou repetir e calcular a média dos resultados. Em nossa avaliação de teste, aumentaremos timeout
para 3 s/ex; em seguida, repetiremos 5 vezes para o cálculo do VES, apenas os resultados mais altos serão relatados .)
Na versão mais recente, ajustamos a avaliação VES para ser mais estável e confiável. Em vez de simplesmente medir a proporção de tempo entre SQLs de previsão e de verdade, agora atribuímos pontos de recompensa com base na proporção de tempo. Os R-VES são calculados da seguinte forma:
O arquivo principal para avaliação Soft F1-Score está localizado em ./llm/src/evaluation_f1.py
. Soft-F1, VES e EX podem ser avaliados no mesmo shell, então você pode avaliar sua eficiência por meio de:
cd ./llm/
sh ./run/run_evaluation.sh
Juntamente com a atualização do conjunto Mini-Dev, introduzimos uma nova métrica de avaliação: a pontuação F1 suave. Essa métrica foi projetada especificamente para avaliar o desempenho de modelos de texto para SQL, medindo a semelhança entre as tabelas produzidas por consultas SQL previstas e aquelas provenientes da verdade básica. Resumindo, a pontuação F1 suave é uma métrica mais branda que reduz o impacto da ordem das colunas e dos valores ausentes nas tabelas produzidas por consultas SQL previstas.
A seguir demonstramos como calculamos a pontuação F1 suave.
Tabela de resultados SQL de verdade básica:
Linha | ||
---|---|---|
1 | 'Maçã' | 325 |
2 | 'Laranja' | |
3 | 'Banana' | 119 |
Tabela de resultados SQL previstos:
Linha | ||
---|---|---|
1 | 325 | 'Maçã' |
2 | 191 | 'Laranja' |
3 | 'Banana' |
A pontuação F1 suave é calculada da seguinte forma:
Correspondido | Pred_only | Ouro_apenas | |
---|---|---|---|
Linha 1 | 2 | 0 | 0 |
Linha 2 | 1 | 1 | 0 |
Linha 3 | 1 | 0 | 1 |
SQLite | MySQL | PostgreSQL | |
---|---|---|---|
mixtral-8x7b | 21h60 | 13h60 | 12h40 |
lhama3-8b-instruir | 24h40 | 24h60 | 18h40 |
phi-3-médio-128k-instrução | 30,60 | 25h00 | 21h60 |
gpt-35-turbo-instrução | 33,60 | 31h20 | 26,60 |
gpt-35-turbo | 38h00 | 36h00 | 27h40 |
lhama3-70b-instruir | 40,80 | 37h00 | 29h40 |
TA + gpt-35-turbo | 41,60 | - | - |
TA + lhama3-70b-instruir | 42,80 | - | - |
gpt-4-turbo | 45,80 | 41h00 | 36h00 |
gpt-4-32k | 47,00 | 43,20 | 35h00 |
gpt-4 | 47,80 | 40,80 | 35,80 |
TA + gpt-4-turbo | 58,00 | - | - |
TA + gpt-4o | 63,00 | - | - |
SQLite | MySQL | PostgreSQL | |
---|---|---|---|
mixtral-8x7b | 20h41 | 12,99 | 14.16 |
lhama3-8b-instruir | 23.27 | 23,66 | 17h90 |
phi-3-médio-128k-instruir | 29,54 | 24.12 | 21.07 |
gpt-35-turbo-instrução | 32,28 | 30h39 | 26.14 |
gpt-35-turbo | 37,33 | 34,94 | 26,80 |
lhama3-70b-instruir | 39.02 | 35,82 | 28,80 |
TA + gpt-35-turbo | 40,59 | - | - |
TA + lhama3-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 | 22h95 | 13,79 | 14h70 |
lhama3-8b-instruir | 27,87 | 27h49 | 19h35 |
phi-3-médio-128k-instrução | 35,33 | 28,73 | 24.11 |
gpt-35-turbo-instrução | 36,34 | 33,85 | 28h30 |
gpt-35-turbo | 41,84 | 40,75 | 30.22 |
TA + gpt-35-turbo | 44,25 | - | - |
lhama3-70b-instruir | 44,38 | 40,95 | 31.43 |
TA + lhama3-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 os SQLs previstos dos modelos de linha de base em ./llm/exp_result/sql_output_kg/
para referência.
Principais colaboradores do projeto Mini-Dev: Xiaolong Li, Jinyang Li, Ge Qu, Binyuan Hui, Reynold Cheng, Chenhao Ma.
Estendemos nossa sincera gratidão aos valiosos feedbacks da comunidade aberta, incluindo revisores do github (@freiz @nnarodytska @josem7 @wbbeyourself @ronch99 @tshu-w ) e aqueles que nos contataram por e-mail com suas sugestões valiosas.
Para qualquer dúvida, entre em contato conosco por [email protected].
TA-SQL
como linha de base de raciocínio ICL. Cite o repositório se você acha que nosso trabalho é útil para você.
@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}
}