Eat Study Love

먹고 공부하고 사랑하라

Data Science/Research

[논문작업] SQL2NL for NL2SQL (1)

eatplaylove 2025. 11. 27. 20:22

너무 놀았다.. 이제는 피할 수가 없는 졸논작업

 

박사에 비하면 큰 관심이 없는 게 석사논문이기도 하고,,

 

사실 내가 경력채용으로 가려고 하는 분야와 크게 주제가 맞진 않지만

 

석사과정은 자고로 '연구하는 방법'을 익히는 시간이라고 하지 않던가!

 

너어무 놀았지만, 그래도 이러쿵 저러쿵 연구했던 지난 날의 흔적들을 다 모아보는 시간이라 자기만족을 위해서라도 좀 유의미하게 내용을 정리해야 한다.

 

일단, 초록발표 + 예비심사는 끝났고.. 그 때 발표했던 내용을 필두로 논문작업을 해야한다. 꽤나 내용이 많으니까 시간 있을 때 조금씩 적어놔야 나중에 덜 버벅거릴 거 같다. 엄청난 규모의 텀프로젝트라고 보면 된다.


1. 틀잡기

 

논문틀은 국룰이 있다. 기타 규격들이 다 반영된 #Overleaf Latex를 쓰는 것이 백 번 쉽다.. 그냥 워드/한글로 쓰는 것과는 비교가 불가할 정도로 편하다.

 

논문의 목차, Content는 아래와 같이 구성하며 기본적으로 English로 적는다. Global 시대에 맞게 ㅎ

 

- 표지 / 인준

- Abstract : 예비심사 때와 유사하게 쓰면 될 듯

- Contents (목차)

1. Introduction : 주절 주절 설명하면 됨
2. Background : NL2SQL , SQL2NL 동향을 쭉 쓰면 될 듯
3. Motivation : SQL2NL의 중요성, 가치가 올라간다.. 를 쓰면 될 듯
4. Methodology : 실험 Flow 등을 여기서부터 슬 Figure로 포함하면 될 듯. 실험 Evaluation이 관건인데 이걸 어떻게 할 지를 명확하게 써야 한다. Matrix를 쓴다면 어떤 친구를 쓸 지, 그리고 Human based 평가를 한다면 어떤 기준으로 Reviewer를 선정할지 등등
--> Fiinetuning까지 활용하냐? 이거 중요....

5. Experiments : 실험Setting과 결과에 대한 얘기니까, 사실 여긴 Figure / Table 외에는 내용적으론 들어갈 말이 없다.

6. Conclusion : 국룰! 좀 더 많은 Domain에서 실험이 필요하다. 다양한 LLM에서 실험이 필요하다 등등으로 마무리. 그리고 우리 연구의 장점/시사점을 언급하며 마무리

7. Appendix : 실험에 쓰인 Prompt, 실제 Gold / Pred Query 등등, Rule based 코드 등을 쓰면 될 듯

- Bibliography (출처)

- 국문초록

 

2. 내용구성

진짜 오랜만에 연구를 하려니까 내용을 좀 까먹었다..

다시 한 번 Remind 해보자... 얼른 실험같은 거 끝낼 거 끝내고, Data도 뽑을 거 다 뽑아놔야 맘편히 쉴 수 있다.

기본적으로 Table , Figure도 각 4~5개씩은 들어가야 할 것이고, 논문 설명용 그림도 PPT를 쓰든 뭘 쓰든 해서 적어야 하고,

Prompt 같은 것도 논문에 적합하게 다 Figure 형태로 써야 하는데 갑갑하기 그지 없다.

 

일단 내용구성부터..

 

Finetuning실제로 하냐 안 하냐가 차이가 크다...!

 

SQL2NL은 KDBC까지의 내용이 지금까지 달려온 부분이고, KSC에서 Rule-based SQL2NL 부분을 좀 추가하긴 했다.

 

예비심사 발표 기준으로, 나의 연구방향

 

 

여기서 1st step은 SQL2NL을 하는데, NL2SQL Task를 그대로 이용하는 것이다. 주로 Dataset은 BIRD / Spider를 이용했고 학위논문엔 Spider 2.0을 추가하는 것을 검토해보자.

 

그리고, 학위논문에 Step1 RAG부분은 넣고 싶다. Text2Vec을 처음 사용했다는 것은 좀 유의미하다고 판단해서 그렇다.

Text2Vec Embedding용 Function의 일부도 Appendix에 넣기..!

 

Step1의 내용은 사실 KDBC선에서 다 끝났고,

 

거기서 추가로 받은 예비심사 피드백이 요건데

 

 

이것을 반영한 Rule based Output을 만드는 놈은 KSC에서 논문을 썼다.

(진짜 무진장 놀았는데도, 중간에 할 건 했나보다 나란 사람도 ㅋ ;; )

 

KSC 에서도 내 기억이 맞다면 SQLGlot 기준으로 SQL->AST구조->Rule based parsing을 진행했었고, .Evaluation은 다른 Nl2SQL (그냥 Naive LLM 썻었음 귀찮아서 ;;) 을 이용해서 결과를 평가했었다.

 

어쨌든 결론적으로 Step1 과 예비심사요지에 대해선 KDBC / KSC 논문을 좀 다듬으면 Data좀 나올 거 같다.

++) 추가로 해야하는 건 Spider 2.0 Data추가하기 --> Dev set이든 뭐든 Data를 1K이상 구해서 Sampling 해놓자... 이것 때문에 논문이 너무 길어진다 싶으면 "Evaluating NL2SQL via SQL2NL" 논문을 참고해서 결과를 Appendix에다가 넣어도 될듯하다. 역시,, 잘 만들어진 top-tier 논문 하나만 잘 follow-up해도 학위논문 하나는 뚝딱 만들 수 있는 거 같다.

 

이제 문제는 Step2 Fine-tuning이다... 사실 지금껏 Fine-tuning을 해본적이 단 한 번도 없어서, 이번 분기 채용준비(이직ㅋ)를 하면서 동시에 모델링 작업하며 경험을 자소서나 Project 파일에 녹일려고 했는데, 전부 Cut당해서 의욕이 없었다.

 

그래도.. 명색이 Datascience를 공부하고, MLDL 강의를 수강했던 사람인데 Model finetuning 한 번 안 해보고 졸업하는 건 너무 짜친다. 그래서 시도는 해봐야 할듯

 

 

Step1에서 잘 만들어진 SQL2NL 모델을 NL2SQL Model 의 Data augmentation 용으로 사용해보자는 것이다.


실험할 건 많은데, 어떤 실험이 중요하며, 진짜 다 필요한 실험인가.. 와 내용구성을 어떻게 할 지 정해야겠다.

 

논문이 무슨 실험레포트도 아니고 중구난방으로 실험값만 늘여놓으면 의미가 너무 퇴색된다.

 

어떻게 해야 깔끔하게 논문을 쓸 수 있을 지좀 보자..

 

To-do list

1. Dataset 확보
기존 BIRD / Spider 1.0 Dev set 일부만 쓰던 것 -> Spider 2.0 Pair set 일부 추가 ( 1K 이상 )

2. 내가 실험적으로 보여줄 것

  a. LLM을 통한 SQL2NL 최적화
 : 기존 KDBC논문활용 + 내용추가 / SQL-to-Vec Embedding 개념 소개 -> Background 또는 Methology + Embedding function code는 Appendix에 후첨 / Schema Linking는 기본으로 깔고, Few-shot prompt를 RAG + 1:1 diff function(AST구조 설명도 추가) 하는 Hybrid방식 소개 / 이거 평가는 간단하게 BERT / BLEU Matrix 활용 기존처럼. 그리고 시간차이도 보여주기.(KDBC논문 적극참고) 다만, Figure는 GPT랑 쌔쌔쌔해서 잘 만든다쳐도, Table같은 경우는 Overleaf Template에 맞게 설정 잘 하기.

  b. LLM없이 SQL Parsing Rule based SQL2NL 방식
 : 기존 KSC 논문을 활용한다 + 내용추가 / Parsing 된 형태를 Figure로 제시(KSC논문 적극참고) / 이건 NL2SQL Model을 이용해서 정확도를 평가한 것... 요런 방식도 활용방안이 있으며 LLM call 없으니까 편하다고 제시,,

  c. SQL-to-NL for NL-to-SQL(이게 관건!!) 위 a , b는 지금까지 SQL2NL에 대한 LLM이 있냐 없냐로 나눌 수 있는 서로 다른 모델을 제시한 것이다. 이제 이것들을 논문제목에 맞게 NL-to-SQL에 활용할 수 있어야 하는데.. 얼른 Fine tuning을 진행해야 한다.
PEFT 를 잘 공부해서 NL2SQL Model ( 그냥 SOTA Naive LLM 사용하자..) 이 틀린 문제에 대해서 SQL2NL을 이용해 Data augmentation을 하고 이놈을 PEFT로 추가 학습시키는 것.

 C 中 '비교군'
 1. Naive LLM ( Finetuning 자체가 효과가 있는지 없는지 비교하는 용도 ) --> 이것도 정확도 몇 개 뽑아놓자 아니면 Data massage
 2. Naive LLM + 일반적인 Finetuning 1 cycle
 3. Naive LLM + 틀린 문제를 a 기법으로 PEFT
 4. Naive LLM + 틀린 문제를 b 기법으로 PEFT ( 예비심사요지 평가 반영 ) , 근데 이건 Rule based라
 5. Naive LLM + 틀린 문제를 그냥 LLM에 '이와 유사한 문
 
 b로 SQL2NL 때린 것을 LLM으로 사람의 언어와 비슷하게 NL생성해서 학습시키는 것..을 비교해보는 것도 고려할 것

3. Reference 정리 : GPT를 이용하든 배경지식을 이용하든 중간중간 Reference정리를 잘 할 것


위 2-b에 대한 내용을 정리하면서 겸사겸사 KSC 발표자료를 만드는 것도 포인트다.

 

시급하게 해야할 것 -> PEFT / 파인튜닝 방법 찾기(이거 Prompt를 써서 학습시키나..? 기본적인 Schema Linking은 제공되는 상태로 튜닝하는지 체크)

GPT로 Finetuning시키면 편하다고 했으니 가격 / 성능 모두를 고려해서 GPT - 5 mini 사용.

 

와.. 그리고 대대적인 Code작업도 필요할 거 같다.

Dataset 얼른 Json형태로 준비해서 NL2SQL 평가까지 가능하게(KSC에서 EX or EM 평가헀을 때 처럼) 전부 준비

--> Finetuning용 Dataset 다량과, Test용 Dataset 일부 분리해서 준비

 

a를 다시 깔끔하게 정리해서 보여주고 ---> 이번에야 말로 BERT, BLEU 말고 Human based 평가까지 넣기

b를 다시 깔끔하게 정리해서 보여주고 ---> NL2SQL을 사용한 평가이니까 EX hit ratio( 논문에 설명 必 ) 라는 개념으로 평가

 

a,b를 통해 SQL2NL Task를 보여주고,

 

이것을 NL2SQL Task에 적용하는 Fintuning (위 c 항목) 효과를 보여주기. 당연히 3,4가 1,2에 비해 학습을 더 많이 시킨건 맞지만, 1 < 2 << 3 , 4 이렇게 효과가 좀 Dramatic하게 나왔으면 좋겠다.

그냥 1 < 2 < 3, 4 꼴이면 비교군으로 3,4에서 추가 PEFT한 만큼 새로운 Dataset pair를 학습시키는 case를 추가하면 될듯

아니면 5번의 경우를 비교군으로 보여줘서 LLM한테 그냥 시키는 거보다 우리 SQL2NL 모델을 시키는 것이 낫다..는 것을 강조.

 


 

아니 근데 애매하다..

 

b의 경우 input SQL에 대해서 Rule based이기 때문에 NL을 단 하나 만들어 낼 수 있는 것이라 PEFT가 의미가 있나 싶다.

b를 어떻게든 살려야 KSC건 예비심사요지 반박이건 하는건데..

 

일단 a의 경우 finetuning 중 LLM이 틀린 문제에 대해서 일반 LLM한테 틀린 Gold NL을 넣어서..는 이미 Gold NL을 넣어서 틀린 SQL을 도출했으니까, Gold SQL을 갖고 NL을 3개 정도 만들어보라고 하고 / 우리의 a 모델에 Gold SQL을 갖고 NL을 3개 정도 만들어보라고 한 뒤 각각 PEFT로 학습시켜서 성능비교하는 것은 의미가 있겠다.

 

문제는 b를 건드는 것..

b로 만든 SQL2NL의 결과는 SQL의 해석이라 일반적인 NL2SQL에 쓰일 수가 없다.

수학성적 칼럼이 있고, 거기에 수학점수가 쫙 있는 DB가 있다고 했을 때 "가장 수학점수가 높은", "수학점수 1등", "수학점수 최상위" 등등의 NL을 SQL2NL b 모델로는 만들어 낼 수 없다. 그저 SQL을 그대로 해석한 것이라 the most, the biggest, No 1, top score 등등의 말을 알지를 못한다.

 

그럼 이건 PEFT가 아닌 아예 다른 종류의 학습을 Finetuning을 시켜야 할듯

b를 이용하려면, 일단, 우리가 Gold SQL / Gold NL가지고 Nl2SQL모델 Finetuning을 시킨다고 했을 때

Gold NL / Gold SQL / Gold SQL to NL 을 모두 학습시켜보는 건 어떠할까?

 

아.... 이 부분을 고민해봐야 할듯 b를 NL2SQL모델 강화를 위해 어떻게 써먹냐..................?

적당히 SHOW좀 하다가 쓸 데 없다는 엔딩으로 마무리 지어야 할 수도 있겠다 ㅠㅠ

 

a는 사용처가 명확한디....

 

오라클도 b의 case를 안 건드는데는 다 이유가 있지 않을꼬..

 

b 결과물을 다시 사람의 언어로 LLM을 통해 쓰는 건 의미가 있나 싶다.. LLM call 줄일려고 b를 쓰는건데

 

에효..

 

b의 활용처를 좀만 더 고민해보고 얼른 실험data 쌓고 논문 내용 채워나가기로..!!!