O RAT-SQL+GAP é um parser de linguagem natural para SQL, as excelentes instruções de instação estão aqui:
GAP-text2SQL: Learning Contextual Representations for Semantic Parsing with Generation-Augmented Pre-Training
A sequência de passos que vou relatar aqui visam a ajudar pessoas que queiram montar este ambiente e tiveram alguma problema com as intruçãoes originais, que são muito boas. Acredito que acrescentei passos que podem ajudar quem está começando a montar ambientes como este.
Environment preparation:
conda create --name gap-text2sql python=3.7
conda activate gap-text2sql
conda install pytorch=1.5 cudatoolkit=10.2 -c
pytorch
conda install jupyter notebook < eu que inclui
conda install -c conda-forge
jupyter_contrib_nbextensions < eu que inclui
Escolha onde <alguma coisa> irá montar a estrutua de diretórios para o parsers e:
mkdir nl2sql
cd nl2sql
git clone
https://github.com/awslabs/gap-text2sql
< não estava na instrução
cd gap-text2sql/rat-sql-gap < os comandos são executados a
partir desse diretório
pip install -r
requirements.txt <
requirements.txt está no diretório gap-text2sql/rat-sql-gap
pip install attr < não
estava na instrução
pip install attrs < não estava
na instrução
pip install asdl < não estava na instrução, descobri a
falta no passo: Preprocess dataset
pip install astor < não estava na instrução, descobri a
falta no passo: Preprocess dataset
python -c "import nltk;
nltk.download('stopwords'); nltk.download('punkt')"
pip install pudb < não estava na instrução, é um debuger
Download the dataset
cd <alguma coisa>/nl2sql/gap-text2sql/rat-sql-gap
pip install gdown
gdown --id 1_AckYkinAnhqmRQtGsQgUKAnTHxxX5J0
unzip spider.zip <
é criado um diretório spider dentro de rat-sql-gap
bash data/spider/generate.sh
./spider < existe um diretório
spider dentro de data
rm spider.zip < deletando o arquivo que é grande
Build dataset
directory
cd <alguma coisa>/nl2sql/gap-text2sql/rat-sql-gap
mkdir data/spider-bart
cp ./spider/tables.json data/spider-bart/ < copy file
cp ./spider/train_spider.json data/spider-bart/
cp ./spider/train_others.json data/spider-bart/
cp ./spider/dev.json data/spider-bart/
ln -s $(pwd)/spider/database
data/spider-bart/database < create
symbolic link
Download the library
cd <alguma coisa>/nl2sql/gap-text2sql/rat-sql-gap
mkdir third_party
wget
http://nlp.stanford.edu/software/stanford-corenlp-full-2018-10-05.zip
unzip stanford-corenlp-full-2018-10-05.zip -d
third_party/
rm stanford-corenlp-full-2018-10-05.zip < deletando o arquivo que é grande
Start the Stanford
library
cd <alguma coisa>/nl2sql/gap-text2sql/rat-sql-gap
sudo apt install openjdk-11-jre-headless
pushd
third_party/stanford-corenlp-full-2018-10-05
nohup
java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer
-port 8999 -timeout 15000 > server.log &
popd
Download the
checkpoint
cd <alguma coisa>/nl2sql/gap-text2sql/rat-sql-gap
mkdir
ie_dirs
mkdir
-p
logdir/bart_run_1/bs\=12\,lr\=1.0e-04\,bert_lr\=1.0e-05\,end_lr\=0e0\,att\=1/
curl
https://gap-text2sql-public.s3.amazonaws.com/checkpoint-artifacts/gap-finetuned-checkpoint
-o
logdir/bart_run_1/bs\=12\,lr\=1.0e-04\,bert_lr\=1.0e-05\,end_lr\=0e0\,att\=1/model_checkpoint-00041000
mkdir
-p pretrained_checkpoint
curl
https://gap-text2sql-public.s3.amazonaws.com/checkpoint-artifacts/pretrained-checkpoint
-o pretrained_checkpoint/pytorch_model.bin
Setup spaCy em Português
Como faço testes com perguntas em português, eu instalo o spaCy, pois o lemmatizer padrão do RAT-SQL-GAP Stanford coreNLP não trata português
Existem um seletor de versões no site: https://spacy.io/usage
Eu usei este setup com foi gerado com as opções: Linux/conda/GPU/portuguese/efficiency
conda install -c conda-forge spacy
conda install -c conda-forge cupy
python -m spacy download pt_core_news_sm
A partir desse ponto o ambiente está pronto, as próximas etapas se referem ao uso do RAT-SQL-GAP
Arquivos de entrada
Os arquivo de entrada do Spider que estão no diretório:
<alguma coisa>/nl2sql/gap-text2sql/rat-sql-gap/data/spider-bart/
tables.json , train_spider.json, train_others.json, dev.json
Os arquivos train_spider.json, train_others.json, dev.json contém as perguntas em linguagem natural que ser relacionam com a query SQL. Os dois primeiros que tem train_ são usados para o treinamento e dev.json é usado no EVAL, que é uma inferência local para saber a eficiência do modelo treinado. O arquivo contém as tables dos bancos de dados.
Configurações
O arquivo <alguma coisa>/nl2sql/gap-text2sql/rat-sql-gap/experiments/spider-configs/gap-run.jsonnet
Contém as configurações necessárias para as três etapas no uso do RAT-SQL-GAP:
Preprocess dataset
Esta é uma etapa de preparação para o treinamento.
cd <alguma coisa>/nl2sql/gap-text2sql/rat-sql-gap
python run.py preprocess
experiments/spider-configs/gap-run.jsonnet
Esta é uma execução um pouco demorada, serão grados os aquivos, para o encoder e decoder que serão usados no treinamento:
./rat-sql-gap/data/spider-bart/nl2code-1115,output_from=true,fs=2,emb=bart,cvlink/observed_productions.json
./rat-sql-gap/data/spider-bart/nl2code-1115,output_from=true,fs=2,emb=bart,cvlink/dec/val.jsonl
./rat-sql-gap/data/spider-bart/nl2code-1115,output_from=true,fs=2,emb=bart,cvlink/dec/train.jsonl
./rat-sql-gap/data/spider-bart/nl2code-1115,output_from=true,fs=2,emb=bart,cvlink/grammar_rules.json
./rat-sql-gap/data/spider-bart/nl2code-1115,output_from=true,fs=2,emb=bart,cvlink/enc/vocab.json
./rat-sql-gap/data/spider-bart/nl2code-1115,output_from=true,fs=2,emb=bart,cvlink/enc/merges.txt
./rat-sql-gap/data/spider-bart/nl2code-1115,output_from=true,fs=2,emb=bart,cvlink/enc/tokenizer_config.json
./rat-sql-gap/data/spider-bart/nl2code-1115,output_from=true,fs=2,emb=bart,cvlink/enc/special_tokens_map.json
./rat-sql-gap/data/spider-bart/nl2code-1115,output_from=true,fs=2,emb=bart,cvlink/enc/val.jsonl
./rat-sql-gap/data/spider-bart/nl2code-1115,output_from=true,fs=2,emb=bart,cvlink/enc/added_tokens.json
./rat-sql-gap/data/spider-bart/nl2code-1115,output_from=true,fs=2,emb=bart,cvlink/enc/train.jsonl
./rat-sql-gap/data/spider-bart/nl2code-1115,output_from=true,fs=2,emb=bart,cvlink/dec_vocab.json
O próximo passo natural seria o treinamento, mas nós já fizemos o download do modelo treinado:
/gap-text2sql/rat-sql-gap/pretrained_checkpoint/pytorch_model.bin
e do checkpoint:
/gap-text2sql/rat-sql-gap/logdir/bart_run_1/bs\=12\,lr\=1.0e-04\,bert_lr\=1.0e-05\,end_lr\=0e0\,att\=1/model_checkpoint-00041000
Inference
cd /mnt/Files/nl2sql/gap-text2sql/rat-sql-gap
python run.py eval
experiments/spider-configs/gap-run.jsonnet
resultados:
cd ie_dirs/
(gap-text2sql)
marchanjo@ciaamS03:/mnt/Files/nl2sql/gap-text2sql/rat-sql-gap/ie_dirs$ ls
bart_run_1_true_1-step41000.eval
bart_run_1_true_1-step41000.infer
Training
cd /mnt/Files/nl2sql/gap-text2sql/rat-sql-gap
python run.py train
experiments/spider-configs/gap-run.jsonnet