- Gemini 기반의 Text-to-SQL 기능은 Google Cloud 전반에서 개발자와 비기술 사용자의 생산성을 높이는 데 활용됨
- 실제 환경에서는 비즈니스 맥락 부족, 사용자 의도 해석 어려움, SQL 방언 차이로 인해 정확한 SQL 생성이 어려움
- Google은 이를 해결하기 위해 지능형 데이터 검색, 문맥 기반 학습, 의미 계층화 기법 등을 도입함
- 모델 자체의 한계는 다중 생성 후 최적 선택(self-consistency), 검증 후 재프롬프트, SQL 방언별 학습 등으로 극복함
- 평가와 개선 측정에는 자체 벤치마크와 LLM을 심판으로 활용하는 기법을 포함해 실환경 적용 가능성을 높이고 있음
Techniques for improving text-to-SQL
텍스트에서 SQL로의 전환: Google Cloud의 현황
- 조직은 신속하고 정확한 데이터 인사이트를 위해 SQL을 활용함
- Gemini는 자연어로부터 직접 SQL을 생성하는 text-to-SQL 기능을 제공
- 이 기능은 개발자뿐 아니라 비기술 사용자에게도 유용함
- 현재 BigQuery Studio, Cloud SQL Studio, AlloyDB Studio, Vertex AI 등에서 이 기능을 제공
Text-to-SQL 기술의 주요 과제
1. 비즈니스 맥락 제공의 어려움
- 정확한 SQL 작성을 위해선 LLM에게 데이터베이스 구조, 컬럼 의미, 실제 데이터 내용 등과 같은 충분한 컨텍스트 제공이 필요
- 컨텍스트는 명시적 정보(스키마, 컬럼 정보 등)와 암묵적 정보(특정 데이터의 비즈니스 의미 등) 모두 포함
- 데이터베이스 구조나 데이터셋의 변형, 스키마의 변화 등에 맞춰 LLM을 계속적으로 훈련(fine-tuning)하는 방식은 현실적으로 비용이 높음
- 비즈니스 지식이나 의미 정보가 제대로 정리되어 있지 않고, 훈련 데이터로 전환하는 것 역시 어려움이 존재
- 예시: DBA가
pcat_extension테이블의cat_id2 = 'Footwear'의 의미를 모르면 신발 판매 조회 SQL도 작성 불가함 — LLM도 동일하게 컨텍스트 부족시 정확하지 않은 질의 생성 위험 있음
2. 사용자 의도 해석 문제
- 자연어 질의는 SQL에 비해 명확성 부족이 흔함
- 실제 데이터 분석가나 엔지니어는 질문이 불분명할 경우 추가 질문을 통해 명확히 할 수 있지만, LLM은 주어진 질문에 바로 답을 생성하려는 경향으로 인해 잘못된 정보(hallucination) 위험이 있음
- “가장 많이 팔린 신발은?” 같은 질문에서 ‘가장 많이 팔린’의 기준(주문 수, 매출액 등)이나 결과 수 등에 대한 세부 기준이 모호함
- 기술적 역량이 있는 사용자는 대략적 SQL을 시작점으로 삼을 수 있지만, 비전문가는 정확히 동작하는 SQL이 더 중요함
- 효과적으로 작동하기 위해선 LLM이 후속 질문, 추론 설명, 유저 가이드 기능을 지원해야 사용자의 의도를 명확히 파악 가능함
3. LLM의 생성 한계
- LLM은 문서 요약, 정보 추출 등에는 강점 있지만, 정확한 SQL 문법이나 덜 쓰이는 SQL 기능에 대해선 취약점 있음
- SQL 방언별로 문법이 다르며, 사소한 차이도 높은 정확성을 요함
- 예: BigQuery에서는
EXTRACT(MONTH FROM timestamp_column)을 사용하지만, MySQL에선MONTH(timestamp_column)을 써야 함 - 복잡한 명세 준수에 꾸준히 맞춰 SQL을 생성하는 것이 LLM에는 쉽지 않은 과제임
Google Cloud의 Text-to-SQL 향상 기법
문제: 스키마 및 비즈니스 맥락
- 의미 기반 검색 및 랭킹
- 맥락 내 학습
- 데이터 샘플링 및 연결
- 의미 계층 구축
- 사용 패턴 및 히스토리 분석
문제: 사용자 의도 해석
- LLM을 통한 명확화
- 개체 식별, 관련 정보 확인 후 적절한 후속 질문 유도
문제: LLM 한계 극복
- Self-consistency로 다중 쿼리 생성 후 최적 선택
- 유효성 검증 및 리프롬프트
- SQL 방언 예시 포함한 맥락 학습
- 모델 파인튜닝
주요 기술 적용 예시
SQL-aware 모델
- Gemini는 고품질 SQL 생성을 위해 다양한 파인튜닝 버전 사용
- SQL 방언별 정확도 확보를 위해 모델 버전 혼합 및 맞춤형 조정 수행
사용자 질문 명확화 (Disambiguation)
- 질문이 모호할 경우 명확화 질문 생성
- 예: "가장 잘 팔리는 신발?" → “주문 수 기준인가요, 매출 기준인가요?”로 유도
의미 기반 검색 및 맥락 구축
- 다단계 의미 매칭 기반 벡터 검색으로 관련 테이블, 컬럼 식별
- 유저 쿼리 기록, 비즈니스 규칙 예시 등을 포함해 프롬프트 구성
- 긴 컨텍스트 윈도우 지원으로 대규모 스키마 대응 가능
검증 및 재생성
- LLM 생성 쿼리의 파싱, Dry-run 등으로 명시적 오류 탐지
- 오류가 감지되면 재프롬프트로 수정 유도
Self-consistency
- 한 쿼리 대신 다양한 방식으로 다중 쿼리 생성
- 여러 모델에서 동일한 쿼리를 추천할 경우 정확도 향상
평가 및 성능 측정
- 기존 벤치마크(BIRD-bench 등)는 유용하지만 실제 스키마 반영에 한계 존재
- Google은 자체 합성 벤치마크 세트를 구축
평가 전략
- SQL 방언과 엔진별 기능 포괄: 쿼리 외 DDL, DML, 관리 작업까지 포함
- 평가지표: 사용자 반응, 오프라인 지표, LLM-as-a-judge
- 지속적 평가: 새로운 모델, 프롬프트 기술의 유효성 신속 확인 가능
마무리
- Google Cloud의 다양한 제품에서 text-to-SQL 기능을 실험 가능
- 예: BigQuery Studio, CloudSQL/AlloyDB/Spanner Studio, AlloyDB AI