SQL을 자연어로: Seq2SQL과 강화학습 기반 질의 생성
초록
Seq2SQL은 질문‑테이블 스키마를 입력으로 받아 SQL을 자동 생성하는 딥러닝 모델이다. SQL 구조를 활용해 출력 공간을 크게 축소하고, 조건절의 순서가 의미 없는 부분을 강화학습(Policy Gradient)으로 학습한다. 80 654개의 손‑라벨링된 예시를 포함한 WikiSQL 데이터셋을 공개했으며, 기존 Seq2Seq 기반 모델 대비 실행 정확도 35.9 %→59.4 %, 논리형식 정확도 23.4 %→48.3 %로 크게 향상시켰다.
상세 분석
Seq2SQL은 기존의 순차‑생성(seq2seq) 방식이 갖는 두 가지 근본적인 한계를 극복한다. 첫째, SQL은 고정된 키워드와 테이블‑컬럼 이름으로 이루어진 제한된 어휘 집합을 가진다. 논문은 입력 시퀀스를 <col>‑컬럼명, <sql>‑SQL 키워드, <question>‑질문 토큰으로 구성하고, 이를 양방향 LSTM으로 인코딩한다. 이후 포인터 네트워크를 이용해 입력 토큰을 직접 선택함으로써 어휘 공간을 컬럼·키워드·질문 토큰의 합집합으로 제한한다. 이는 일반적인 소프트맥스 출력보다 훨씬 작은 후보 집합을 제공해 학습 효율과 정확도를 동시에 높인다.
둘째, WHERE 절의 조건은 순서가 바뀌어도 동일한 결과를 반환한다는 특성을 가진다. 기존 교차 엔트로피 손실은 정확한 토큰 순서를 강제하기 때문에, 정답과 순서가 다른 정답(예: age > 18 AND gender='M' vs gender='M' AND age > 18)을 부정적으로 학습한다. Seq2SQL은 이 문제를 강화학습으로 해결한다. WHERE 절을 토큰‑단위로 샘플링하고, 생성된 전체 SQL을 실제 DB에 실행해 얻은 결과에 따라 보상을 부여한다. 보상은 +1(정답), -1(잘못된 결과), -2(구문 오류)로 정의되어, 정책 그래디언트( REINFORCE )를 통해 조건절 생성 정책을 직접 최적화한다.
모델은 세 개의 서브모듈로 구성된다. (1) Aggregation 모듈은 질문에서 “how many”, “maximum” 등 집계 연산을 추출한다. 입력 인코딩에 대한 어텐션 가중치를 이용해 집계 토큰( COUNT, MIN, MAX, NULL 등)의 확률을 구하고, 교차 엔트로피 손실로 학습한다. (2) SELECT 모듈은 컬럼 포인터를 사용해 질문과 가장 연관된 컬럼을 선택한다. 각 컬럼은 별도 LSTM으로 인코딩되고, 질문 인코딩과의 내적을 통해 스코어를 산출한다. (3) WHERE 모듈은 앞서 언급한 강화학습 기반 포인터 디코더이다. 조건절 토큰을 순차적으로 샘플링하고, 최종 SQL을 실행해 보상을 얻는다. 전체 손실은 L = L_agg + L_sel + L_whe 로 구성되어, 세 모듈을 동시에 최적화한다.
데이터 측면에서 논문은 WikiSQL이라는 대규모 벤치마크를 구축했다. 위키피디아의 HTML 테이블 24 241개에서 자동 생성된 질문 템플릿을 인간이 패러프레이즈하도록 설계했으며, 두 명의 검증자가 의미 일치를 확인한다. 최종 데이터셋은 80 654개의 (질문, 테이블 스키마, SQL) 삼중항을 포함하고, 기존 GeoQuery, ATIS 등과 비교해 규모와 다양성에서 10배 이상 크다. 또한 원본 테이블을 JSON·SQL 형태로 제공하고, 실시간 실행을 위한 엔진도 공개한다.
실험 결과, Seq2SQL은 기존 Dong & Lapata(2016) 기반 Seq2Seq 모델(실행 정확도 35.9 %)을 크게 앞선다. 강화학습을 적용하지 않은 Augmented Pointer Network는 53.3 %의 실행 정확도를 기록했지만, WHERE 절 순서 문제로 여전히 한계가 있었다. Seq2SQL은 59.4 % 실행 정확도와 48.3 % 논리형식 정확도를 달성했으며, 특히 집계·SELECT 모듈은 교차 엔트로피로 높은 정확도를 유지하면서, WHERE 모듈은 RL 덕분에 순서에 무관한 정답을 효과적으로 학습한다.
한계점으로는 현재 WHERE 절이 단일 컬럼·연산·값 형태만 지원한다는 점이다. 복합 조건(OR, NOT, 서브쿼리 등)이나 조인(JOIN) 구문은 다루지 않으며, 복잡한 스키마에 대한 일반화 성능은 추가 연구가 필요하다. 또한 보상 설계가 이진(정답/오답) 형태라서 미세한 질의 차이를 구분하기 어렵다. 향후 연구에서는 다중 테이블 조인, 서브쿼리, 그리고 보상 함수를 정밀화해 보다 복잡한 SQL을 학습하도록 확장할 수 있다.
댓글 및 학술 토론
Loading comments...
의견 남기기