DIN-SQL: Text-to-SQL을 위한 분해된 인컨텍스트 학습(Decomposed In-Context Learning)
지난주에 저는 텍스트-to-SQL이 정제된 장난감 데이터베이스에서 이름 지정이 엉망이고 도메인 지식과 효율성 제약이 있는 실제 스키마로 이동할 때 LLM이 얼마나 심하게 비틀거리는지 보여준 BIRD 벤치마크를 다루었습니다. DIN-SQL은 제가 가장 먼저 읽었어야 했던 논문입니다. 이 논문은 세심하게 분해된 LLM 프롬프팅 파이프라인이 Spider와 BIRD에서 실제로 무엇을 달성할 수 있는지를 정의했으며, GPT-4가 널리 보급되던 시기에 Mohammadreza Pourreza와 Davood Rafiei가 NeurIPS 2023에서 발표했습니다. BIRD를 통해 한계가 드러난 지금 이 논문을 다시 읽어보니 그 장점과 한계가 훨씬 더 명확하게 보입니다.
논문 요약
DIN-SQL (arXiv:2304.11015)은 극명한 성능 격차를 해결합니다. 2023년 초, 가장 뛰어난 파인튜닝 모델인 RESDSQL-3B+NatSQL은 Spider 테스트 세트에서 79.9%의 실행 정확도에 도달한 반면, 단순한 퓨샷(few-shot) 프롬프팅을 사용한 GPT-4는 개발 세트에서 67.4%에 그쳤습니다. Pourreza와 Rafiei의 가설은 이 격차가 주로 인터페이스 문제라는 것입니다. LLM은 충분한 능력을 갖추고 있지만, 한 번에 SQL을 생성하게 하면 스키마 링킹, 복잡성 분류, 쿼리 합성을 모두 동시에 해결해야 하기 때문입니다. 이를 순차적인 하위 작업으로 분해하고 각 솔루션을 컨텍스트로 전달하면 이야기가 달라집니다.
그들의 파이프라인은 4단계로 구성됩니다. (1) 체인 오브 서트(chain-of-thought) 프롬프팅을 사용하여 자연어 질문을 스키마의 특정 열과 값에 매핑하는 스키마 링킹 모듈, (2) 쿼리를 쉬움(단일 테이블, 조인 없음), 비중첩 복합(조인은 있지만 서브쿼리 없음), 중첩 복합(조인, 서브쿼리, 집합 연산)으로 분류하고 중첩 쿼리의 경우 문제를 하위 쿼리로 분해하는 분류 및 분해 모듈, (3) 복잡성 등급에 맞게 프롬프팅 전략을 조정하는(쉬움은 단순 퓨샷, 비중첩은 NatSQL 중간 표현, 중첩은 다단계 체인 오브 서트) SQL 생성 모듈, (4) 모델이 자신의 출력물에서 DISTINCT 누락이나 DESC 위치 오류와 같은 사소한 실수를 검토하도록 하는 자기 수정(self-correction) 모듈입니다.
핵심 아이디어
- GPT-4 + DIN-SQL은 별도의 작업별 학습 데이터 없이 Spider의 홀드아웃(holdout) 테스트 세트에서 85.3%의 실행 정확도를 기록하며, 당시 최고 수준(SOTA)이었던 파인튜닝된 RESDSQL-3B+NatSQL(79.9%)을 5.4포인 트 앞질렀습니다.
- Spider 개발 세트에서 분해 파이프라인은 GPT-4를 67.4%(퓨샷 베이스라인)에서 74.2%로 6.8포인트 끌어올렸습니다. CodeX Davinci는 61.5%에서 69.9%로 향상되었습니다.
- 어블레이션(Ablation) 연구는 모든 단계가 기여함을 확인해 줍니다. 스키마 링킹만 제거해도 CodeX의 점수는 69.9%에서 65.9%로 떨어지며, 분류 단계를 제거하면 63.1%까지 더 떨어집니다.
- 이득은 주로 쉬움 및 중간 난이도의 쿼리에 집중되어 있습니다. '매우 어려움(extra hard)' 쿼리에서 전체 DIN-SQL + GPT-4 파이프라인은 Spider 개발 세트에서 43.4%에 불과합니다. 분해는 복잡성 자체를 해결하는 것이 아니라 처리 가능한 쿼리에서 피할 수 있는 오류를 줄여줄 뿐입니다.
- 자기 수정은 모델에 따라 민감하게 반응합니다. GPT-4는 잠재적인 개선 사항을 묻는 '부드러운' 프롬프트에 잘 반응하는 반면, CodeX는 SQL이 틀렸다고 가정하는 '일반적인' 프롬프트에 더 잘 반응합니다. 이는 이 모듈이 실제 의미론적 검증보다는 스타일적인 정리를 수행하고 있음을 시사합니다.
- BIRD 개발 세트에서 DIN-SQL + GPT-4는 일반 GPT-4 베이스라인의 46.35%보다 4.4포인트 향상된 50.72%를 기록했습니다. 이는 Spider에서의 이득보다 상당히 작은 수치인데, 이에 대해서는 나중에 다시 다루겠습니다.
유효한 점과 그렇지 않은 점
핵심 결과는 실질적입니다. 텍스트-to-SQL을 명 시적인 하위 작업으로 분해하면 성능이 향상되며, 어블레이션 연구는 개별 모듈의 기여를 신뢰할 수 있을 만큼 명확합니다. 어려운 쿼리일수록 스키마 링킹이 가장 중요한데, 이는 타당한 결과입니다. 질문이 어떤 테이블과 열을 참조하는지 정확히 파악하지 못하면 모델이 올바른 JOIN을 생성할 수 없기 때문입니다.
하지만 몇 가지 의문점이 남습니다. 개발 세트(74.2%)와 테스트 세트(85.3%)의 점수 차이는 의심스럽습니다. 개발 세트는 모델이 이를 기준으로 튜닝되기 때문에 보통 테스트 세트보다 어렵거나 최소한 비슷한 수준입니다. 개발에서 테스트로 가면서 11포인트나 뛰는 것은 이례적입니다. 저자들은 이를 설명하지 않는데, 테스트 세트의 쿼리 난이도 분포가 다르거나, 공식 Spider 리더보드 서버를 통한 테스트 세트 평가 방식이 그들의 개발 세트 평가 방식과 다른 점이 있는지 의구심이 듭니다. 이러한 주의 사항 없이는 85.3%라는 수치를 인용하기 어렵습니다.
BIRD에서의 격차(개발 세트 50.72%)는 Spider에서의 이득보다 확연히 작습니다. BIRD 데이터베이스는 약어 처리된 열 이름, 도메인 특화 용어, 모호한 값들이 포함된 엉망인 실제 스키마를 가지고 있습니다. DIN-SQL의 스키마 링킹 모듈은 Spider의 상대적으로 깨끗한 스키마를 염두에 두고 설계되었습니다. 스키마가 더러워지면 링킹 정확도가 떨어지고 파이프라인의 나머지 부분도 함께 저하됩니다. 이것이 바로 BIRD 논문이 측정한 결과이며, DIN-SQL은 이를 해결하지 못했습니다.
비용과 지연 시간 수치는 상용 시스템에 큰 걸림돌입니다. GPT-4를 사용하면 질문당 약 0.50달러와 60초가 소요됩니다. 하루에 10개의 쿼리를 실행하는 데이터 분석가에게는 괜찮지만, 인터랙티브한 사용에는 전혀 적합하지 않습니다. 논문은 이를 알려진 한계로 제시하지만 이를 줄이기 위한 경로를 제안하지는 않습니다. 몇 달 후 발표된 DAIL-SQL(arXiv:2308.15363)은 명시적인 분해보다 더 나은 예제 선택이 Spider에서 86.6%에 도달할 수 있음을 보여주었습니다. 이는 DIN-SQL보다 훨씬 낮은 비용으로 이를 능가한 것입니다.
자기 수정 모듈은 가장 취약한 부분입니다. 저자들은 이 모듈이 '사소한' 오류를 잡아낸다는 점을 인정합니다. 하지만 이 모듈이 할 수 없는 것은 의미론적 오류를 감지하는 것입니다. 즉, 생성된 SQL이 구문적으로는 유효하고 실행도 되지만 엉뚱한 질문에 답하는 경우입니다. 이는 실제 사용자들에게 더 치명적인 실패 모드입니다.
금융 AI에서 이것이 중요한 이유
Beanquery(BQL)는 Beancount 장부 데이터에 대한 SQL 유사 쿼리 언어입니다. 이는 transactions, postings, balance, prices와 같이 계정 계층 구조, 태그, 메타데이터 필드를 포함한 자체적인 테이블 구조를 가지고 있으며, 이는 일반적인 데이터베이스 스키마와 전혀 다릅니다. BQL에 대한 자연어 인터페이스는 실질적이고 유용한 도구이며(이미 MCP를 통해 이를 구현한 실험적인 beanquery-mcp 서버가 존재합니다), DIN-SQL의 분해 전략은 좋은 출발점이 됩니다.
BQL에서의 스키마 링킹은 관계형 테이블에서의 스키마 링킹과 유사한 문제이지만 두 가지 추가적인 난점 이 있습니다. 계정 이름이 Assets:US:Checking:Bank와 같은 계층적 경로라는 점과, 관련 스키마가 사용자가 묻는 쿼리 유형(손익계산서, 대차대조표, 현금 흐름)에 따라 달라진다는 점입니다. DIN-SQL의 분류 모듈은 직접적인 적응 방안을 제시합니다. 먼저 쿼리 의도(잔액 vs 흐름 vs 가격 조회)를 분류한 다음, 서로 다른 프롬프트 템플릿으로 라우팅하는 것입니다.
실제 세계의 무질서함이 LLM의 텍스트-to-SQL 능력을 저해한다는 BIRD 벤치마크의 결과는 직접적으로 관련이 있습니다. Beancount 장부 역시 사용자 정의 계정 이름, 일관성 없는 통화 기호, 맞춤형 메타데이터 키 등 '지저분'합니다. Spider의 6.8포인트 개선 대비 BIRD의 4.4포인트 개선은 구조화되고 깨끗한 스키마 환경이 실제 BQL 쿼리에서 분해가 얼마나 도움이 될지를 과대평가하게 만든다는 것을 시사합니다. 실제 적용 시에는 더 적은 이득을 예상해야 합니다.
비용 제약은 현실적이지만 여기서는 덜 치명적입니다. 하루에 1020개의 쿼리를 실행하는 개인 금융 사용자는 인터페이스가 정말 유용하다면 하루 510달러의 API 비용을 감당할 수 있을 것입니다. 60초의 지연 시간은 인터랙티브한 사용에 더 큰 문제입니다. 분석 쿼리를 일괄 처리(batching)하는 방식이 대안이 될 수 있습니다.
더 읽어보기
- DAIL-SQL: Text-to-SQL Empowered by Large Language Models: A Benchmark Evaluation (arXiv:2308.15363) — 프롬프트 엔지니어링 전략에 대한 체계적인 연구로, 아키텍처적 분해보다는 예제 선택 에 집중하여 Spider에서 86.6%를 달성했습니다. DIN-SQL에 대한 유용한 대조점입니다.
- RESDSQL: Decoupling Schema Linking and Skeleton Parsing for Text-to-SQL (arXiv:2302.05965, AAAI 2023) — DIN-SQL이 능가한 파인튜닝된 베이스라인입니다. 파인튜닝 방식이 잘하는 것을 이해하면 프롬프팅 방식이 여전히 부족한 부분이 어디인지 명확해집니다.
- MAC-SQL: A Multi-Agent Collaborative Framework for Text-to-SQL (arXiv:2312.11242) — 다단계 분해 아이디어를 선택자(Selector), 분해자(Decomposer), 정제자(Refiner)가 포함된 명시적인 멀티 에이전트 파이프라인으로 확장했습니다. GPT-4로 BIRD에서 59.59%를 기록했으며, 이 분야에서 가장 에이전트 중심적인 접근 방식입니다.
