Eat Study Love

먹고 공부하고 사랑하라

Data Science/Research

SQL2NL 모델을 NL2SQL에 적용시켜보기[2]

eatplaylove 2025. 9. 18. 17:30

https://eglife.tistory.com/367

 

SQL2NL 모델을 NL2SQL에 적용시켜보기[1]

일단, 이번 글과 관련된 나의 고뇌는 아래와 같다. https://eglife.tistory.com/366 SQL2NL 모델 추가 실험(VectorDB, Embedding)[4]https://eglife.tistory.com/364 SQL2NL 모델 추가 실험(VectorDB, Embedding)[3]https://eglife.tistory.co

eglife.tistory.com

 

위 글에서 Continue...

 

일단, Data Seed를 다르게 해서 좀 더 돌려봤다.

 

실험 한 번만 하고 데이터 비교하는 것은 좀 무리가 있으니..(그래봤자 2번 더 했다 ㅋ)

 

GPU 대여 서비스를 이용했더니 한 1시간? 정도에 2회 돌렸다. 즉 30분에 1회 돌릴 수 있고 회당 500~600원 정도로 보면 되겠다.

 

 

한 4회 하니까 요렇게 결과가 나온다.

BLEU는 진짜 틀린그림 찾기니까, 배제.. 해도 될 거 같고, 아니면 참고용으로만 쓰고!

BERTRecall기준으로, 역시나 RAG_Hybrid가 가장 Score가 높다. 신기하긴하다 ㅋㅋ 예상대로 되니까

 

이번엔 좀 HARD 난이도 도전,

NL2SQL Model을 이용해서!!

 

근데 환경변수?설정이 좀 빡세다...

일단 하고 있긴 한데..

 

1. OPEN API KEY를 다음과 같이 관리해야함..

 

2. main.py 파일 실행시 config를 더해줘야함..

 

물론 다 그런건 아닌데, 내가 공유받은 NL2SQL모델은 이런 환경에서 코드를 돌릴 수 있다.

 

역시,, SW 개발을 하면서 코드 공유할때 다른 사람의 환경까지 잘 COPY하는 게 중요하구만..


일단 NL2SQL 돌려보는 것 Step in Windows 환경!!!

 

1. 가상환경 Activate

nl2sql\Scripts\Activate.ps1

 

2. main.py 파일 실행하기 -> Output이 생성됨

python main.py --config "configs/bird_dev_config.yaml"

 

※ 여기서 주의할 건, data/bird에 있는 dev.json , dev_gold.sql 파일의 구성의 싱크만 맞춰준다면 내가 측정하고자 하는 SQL/NL Pair를 측정할 수 있다.

 

3. 위 2번의 결과로 아래와 같이 Ouput이 생성된다.

 

이제, 이 Output과 Gold SQL을 비교하며 Exact 한지 Evaluation을 진행한다.


그냥, 원작자가 Mac으로 이 프로그램과 Script를 짜서, windows + WSL에서 실험을 진행했다.

대충 Script 다 돌리면 실험결과는 아래와 같이 나온다.

{
  "accuracy": {
    "simple": 100.0,
    "moderate": 50.0,
    "challenging": 0.0,
    "total": 80.0
  },
  "counts": {
    "simple": 3,
    "moderate": 2,
    "challenging": 0,
    "total": 5
  }
}

 

그냥, 아래 README Linux환경을 따라가면 코드실행 + 평가까지 다 되긴 한다.

README.md
0.00MB

 

근데 문제는 그게 아니라, 이걸 이용해서 얼렁 나의 SQL2NL Task를 평가하는 것!!!


쩝, 얼른 실험 몇 개 설계하고 테스트 돌리고 결과 정리좀 해보자...!

실험 Dataset은 BIRD / SPIDER / BEAVER 면 되는 거 같고,  BIRD로 먼저 해보자.

위 메커니즘을 다시 Following 하는 것이다..!

 

지금은 그나마 정상인 BIRD Dev set 약 1500개에서 100개씩 test data set으로 만들고 1400개를 pool로 보고있다.(Embedding 해서 SQL2NL Task의 Fewshot으로 사용)

 

그렇다면..

 

1. SQL-NL Data를 1400개 for Embedding , 100개 for Test로 나눈다.

2. Test 100개 Pair로만 가지고 NL2SQL - SQL2NL - NL2SQL 작업을 시작한다.

( 1 건당 총 3번의 LLM Call이 필요한 상황... 😥 )

3. 실험을 몇 번 반복해본다.

 

사실 코드만 잘 완성시켜놓으면 할만한 거 같기도 한데.. 이거 뭐 완전 Vibe Coding Only로 하고 있어서 GPT와 쳐절한 전투를 진행해야한다 ㅠㅠ

 

지금 ALl in one frame work 만드는 중... calculating......

GPT MS Thesis 최신글을 참고하라..


 

Pipeline은 확고한데,, 서로 다른 두 코드를 접합시키는 게 너무 빡세다.

SQL2NL / NL2SQL 코드를 만든 주체가 달라서 그런듯 -_-

 

어찌어찌 코드작업은 계속 하고 있는데, (With GPT) 해야 할 것을 정리해보자.

 

1. SQL2NL 평가를 위한 NL2SQL 파이프라인이 완성되면 얼른 BIRD / SPIDER / BEAVER dataset을 가지고 GPT 5 / mini / nano 이렇게 실험을 돌려서 SQL2NL의 Random fewshot / RAG fewshot / RAG + Hybrid fewshot에 대한 Accuracy를 측정한다.

 

2. 각 모델의 LLM 3종 , Dataset 3종, BERTRecall / BLEU_4 / NL2SQL평가 / Humanbased 평가 이렇게 데이터를 나눠서 정리한다. 얼른 뽑는 편이 낫다.

 

2.1 BERT/BLEU -> 아래와 같은 꺾은선 그래프(실험 횟수를 한 10번 정도 돌려보자)

2.2 NL2SQL 평가 -> n번 정도 돌리고 그냥 막대그래프

2.3 Humanbased 평가 -> 4분위 지점 찍히는 plot 그래프

 

이렇게 해서 SQL2NL 을 RAG + Hybrid 기법으로 정확도를 올릴 수 있다는 것을 보여주며 KDBC에 출간

(Future work에 SQL2NL Finetuning을 진행하면 정확도 더 올라갈 것이라고 기술, K-DS는 논문을 출간하진 않아서 ㄱㅊ을듯)

 

3. KDBC Paper를 얼른 쓰고, 이걸 필두로 졸논 Proposal을 쓴다.

   논문요지(Proposal) 발표
- 논문요지 제출:
  * 제출 시 표지와 본문을 하나의 PDF로 변환하여 담당자 이메일로 제출
  * 발표자는 심사용 논문요지(연구주제, 연구의 목적, 연구의 필요성, 관련 문헌 고찰, 연구방법, 기대효과, 참고문헌) 등을 A4용지, 표지를 포함하여 자유양식으로 10매 작성)
 * 메일 제목: 석사학위 프로포절 자료 제출, 학번, 성명 / 파일명: 성명_학번_석사 프로포절
- 논문요지 발표 및 심사: 10~15분

 

연구주제/목적/필요성/관련문헌고찰/연구방법/기대효과/참고문헌 등이라... 전형적인 Structure긴 하다.

주제 : 위와 같다.
목적 : NL2SQL 모델개발, 기술발전
필요성 : NL2SQL 모델 연구기법의 획일화, 창의적인 시도 필요. NL2SQL의 중요성은 말해뭐해.
관련문헌 : 각종 NL2SQL 논문들
연구방법 : 지금껏 내가 만지작거린 SQL2NL 모델을 활용해 NL2SQL 파인튜닝 방법
기대효과 : Domain specific하면서 완성도 있는 NL2SQL 모델 개발 가능 per Company.
참고문헌 : 각종 NL2SQL 논문들

 

이런식으로 진행하고자 한다..

일단 얼른 NL2SQL , SQL2NL접합시키는 걸로 넘어가자.

 

글이 넘 길어져서 이만 줄이기