Eat Study Love

먹고 공부하고 사랑하라

Data Science/Research

SQL2NL 모델을 NL2SQL에 적용시켜보기[3 - 잠정 stop]

eatplaylove 2025. 9. 25. 11:30

https://eglife.tistory.com/368

 

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

https://eglife.tistory.com/367 SQL2NL 모델을 NL2SQL에 적용시켜보기[1]일단, 이번 글과 관련된 나의 고뇌는 아래와 같다. https://eglife.tistory.com/366 SQL2NL 모델 추가 실험(VectorDB, Embedding)[4]https://eglife.tistory.com/3

eglife.tistory.com

 

얼른 접합시켜보자 이것들!!!!!!!!!!

 

그리고 평가 Data 걍 만들기. Human Based Survey 그냥 만들어서 랩실사람들한테 얼렁 평가받자!!


[ROW] case=0, strat=Random -> {'id': '0', 'db_id': 'student_club', 'Strategy': 'Random', 'GoldNL': 'Mention the total expense used on 8/20/2019.', 'GoldSQL': "SELECT SUM(cost) FROM expense WHERE expense_date = '2019-08-20'", 'Pred_SQL_A': "SELECT SUM(cost) AS total_expense FROM Expense WHERE expense_date = '2019-08-20'", 'Pred_NL_A': 'What was the total cost of all expenses on 2019-08-20?', 'Pred_SQL_B': "SELECT COALESCE(SUM(cost), 0) AS total_cost FROM Expense WHERE expense_date = '2019-08-20'", 'Ex_A_equal': 'False', 'Ex_A_reason': 'Different results', 'Ex_B_equal': 'False', 'Ex_B_reason': 'Different results', 'SQL2NL_Acc_Hit': 'True', 'BLEU_4': '0.04939382737115371', 'BERT_Recall': '0.888798713684082', 'err_nl2sql_a': None, 'err_sql2nl': None, 'err_nl2sql_b': None}
[ROW] case=0, strat=RAG -> {'id': '0', 'db_id': 'student_club', 'Strategy': 'RAG', 'GoldNL': 'Mention the total expense used on 8/20/2019.', 'GoldSQL': "SELECT SUM(cost) FROM expense WHERE expense_date = '2019-08-20'", 'Pred_SQL_A': "SELECT COALESCE(SUM(cost), 0) AS total_expense FROM Expense WHERE expense_date = '2019-08-20'", 'Pred_NL_A': 'What is the total cost of expenses on 2019-08-20, returning 0 if there are no expenses that day?', 'Pred_SQL_B': "SELECT COALESCE(SUM(cost), 0) AS total_cost FROM Expense WHERE expense_date = '2019-08-20'", 'Ex_A_equal': 'False', 'Ex_A_reason': 'Different results', 'Ex_B_equal': 'False', 'Ex_B_reason': 'Different results', 'SQL2NL_Acc_Hit': 'True', 'BLEU_4': '0.025281168697394947', 'BERT_Recall': '0.8880898952484131', 'err_nl2sql_a': None, 'err_sql2nl': None, 'err_nl2sql_b': None}
[ROW] case=0, strat=RAG_Hybrid -> {'id': '0', 'db_id': 'student_club', 'Strategy': 'RAG_Hybrid', 'GoldNL': 'Mention the total expense used on 8/20/2019.', 'GoldSQL': "SELECT SUM(cost) FROM expense WHERE expense_date = '2019-08-20'", 'Pred_SQL_A': "SELECT COALESCE(SUM(cost), 0) AS total_expense FROM Expense WHERE expense_date = '2019-08-20'", 'Pred_NL_A': 'What is the total cost of expenses on 2019-08-20, returning 0 if no expenses were recorded that day?', 'Pred_SQL_B': "SELECT COALESCE(SUM(cost), 0) AS total_cost FROM Expense WHERE expense_date = '2019-08-20'", 'Ex_A_equal': 'False', 'Ex_A_reason': 'Different results', 'Ex_B_equal': 'False', 'Ex_B_reason': 'Different results', 'SQL2NL_Acc_Hit': 'True', 'BLEU_4': '0.025281168697394947', 'BERT_Recall': '0.8848373293876648', 'err_nl2sql_a': None, 'err_sql2nl': None, 'err_nl2sql_b': None}

흠... Case 하나 돌려봤는데 이런식으로 나온다.. 디버깅은 내일 이어서...


일단 Proposal은 냈는데.. 충격적인게 SQL2NL을 이용해 NL2SQL을 평가하는 Benchmark 방법이 벌써 논문으로 나왔다.

 

분명 이 블로그만 보더라도 아이디어는 내가 더 먼저 냈을 터인데.. 밍기적 거리는틈에 누군가가 해치웠다.

심지어 Output NL에 대한 Evaluation도 BERT로 했더만;;;; 아오(https://www.arxiv.org/abs/2509.04657)

 

나는 Top-tier 논문에 관심이 없는 상태니까 얼른 내 논문작업이나 마무리혀야겄다.

(아깝긴 하다 아오 ㅠㅠ)

 

다시 정리해보면,

 

1. 일단 예비 Proposal -> "SQL - to - NL for NL - to - SQL"  完

 

2. Proposal 발표자료 - 10분 분량 - 중요도는 下 하지만 시급! 急!

 

3. 2025 KDBC 논문작성 必 : 완성도 있는 SQL-to-NL을 만들자가 목표

 

2,3번을 연계시켜서 얼른 Develop 하는 것이 급선무.

 

지금 위에서와 같이, NL2SQL Model (그냥 기본적인 Base Model) 을 이용해서 나의 SQL2NL Model 정확도를 측정하려고 한다.

Test data 1 건당 3가지 case(Random, RAG, RAG Hybrid)를 돌리다보니 시간이 꽤나 걸린다.

 

흠.. 일단 이거는 Ex_A(처음 NL2SQL), Ex_B(재생성된 NL2SQL) 값이 아래와 같이 True True / False False로 다른 Case가 있으니 일차적으로 동작은 잘 하는 거 같소만.. 뭔가 Error가 뜨는 걸로 봐서 문제가 좀 있는 거 같다.

 

그래도 Case 2부터 갑자기 RAG / RAG_Hybrid를 탐지하지 않는 Error만 잡으면 어느정도 써먹을 순 있을 코드 같다.

즉, 위 사항만 잘 Debugging하고 SQL2NL Model만 잘 만들어 놓으면 일단 SQL2NL for NL2SQL에서 Half는 완성한 것.

 

이제 해야할 것,

KDBC용 평가 그래프를 다시 재적립 해보자.



논문에 쓰일 데이터 / 그래프는 최대한 Massage된 것을 쓰자.

지금처럼 가로축은 Case # , 새로축은 Matrix Value 유의미하다 좋다.

다만, Case를 좀 더 늘려야겠다. 이번엔 완벽한 SQL-to-NL Model을 제시하는 것이 목표임으로 Fully SQLGlot diff 가 정확도 측면에선 최고지만 RAG + Hybrid를 하는 것이 Time + 정확도 측면에서 합의점이다 라는 것을 제시하자.

그러기 위해선, 기존 Random / RAG / RAG_Hybrd 에서 Naive하게 Fully diff function을 돌리는 것을 추가하자.
그래서 4가지 case에 대해 정확도는 BERTRecall / BLEU-4를 비교하되 각 case의 Runtime 소요시간 측정도 하면 좋겠다.
Accuracy 평가는 BERT/BLEU 외에 일부 Human based 평가를 막대그래프 형태로 추가해서 신빙성을 좀 더 더한다.
-> Human based 평가의 경우 Datascience + DB분야 연구중인 대학원생(SQL 준전문가 이상급)을 대상으로 진행했다고 명시
(   이와 관련된 논문 문구는 GPT에 쳐보장★ , LKS 대장님 Seminar 논문참고도 가능 )

원하는 결과는, 정확도가 Random < RAG < RAG_Hybrid Fully diff function이고
시간소요는 Random ≈ RAG ≈ RAG_Hybrid <<< Fully diff function 이다.

실험 Result총 4줄로 제시된다.

LLM은 GPT 5 - mini로 통일

First : BIRD - Accuracy  ( BERT - 꺾은 선 , BLEU - 꺾은 선, Human Based - 막대그래프 )
Second: BIRD - Run Time
Third : SPIDER - Accuracy 
Fourth : SPIDER - Run Time

K-DS에서 썼던 것에 어떤 점을 Develop 할 수 있을까..?
사실, 저건 그냥 연구발표회일뿐 학회가 아니라 그대로 써도 되긴 하는데,, 어딘가 짜쳐서 Develop좀 시키려고 한다.

-> Embedding 좀 더 추가하기, 현행 58 -> 58 + N ( 위 Evaluating NL2SQL via SQL2NL 읽고, 추가할 Sector를 더해본다.)
Evaluating NL2SQL via SQL2NL 추가로 얘는, Introduction에도 넣어야 겠다. SQL2NL을 활용한 사례가 많아지고 있다는 것 언급!

-> Prompt를 더 다듬기. SQL 쿼리와 스키마 정보를 기반으로 NL 생성 -> 스키마 링킹오류 방지 (위 E N v S 논문내용 참고)
지금은 Full Schema를 그냥 일괄적으로 LLM에 던졌는데,(build_schema_index 함수 분석해보자)

-> 그리고 뭐.. 실험 case 추가 및 Data-set(BIRD + SPIDER) 추가된 것이지.

이렇게 까지 하고 뭔가 RAG, Hybrid 어쩌고 SQL2NL model 제시..! 로 주제 잡고 던지면 될듯

 

그리하여, 일단 NL2SQL 모델을 사용한 SQL2NL 모델 평가 Framework는 잠시 제껴두자.

 

저 위 matrix + 사람평가로 일단 내용은 충분하다.

 

NL2SQL 모델을 사용한 SQL2NL 모델 평가 Framework는 시간이 된다면 추석 전후로 KSC에 투고해보는 것으로 합시다.

(교수님과 상의 후에)

 

이건 이렇게 마무리하면 되고,

 

Proposal 발표자료는 제출한 Overleaf를 필두로 10분짜리 발표 PPT 후딱 만들자.

 

KDBC + KSC 논문이 졸업논문 실험 2가지 중 첫 번째 STEP이고,

 

두 번째 STEP이 바로 Finetuning인데, 이거 유의미하면 솔직히 Top-tier급이 아닌가 싶긴 하다 ㅋ;;

 

PEFT에 대해서 어느 정도 공부를 하고 Finetuning 들어가는 것으로 합시다. 이건 10월말~11월에 거쳐서 마무리 짓기!

Dataset 평가도 BIRD / SPIDER / BEAVER 전부 때려보자.