Hugging Face Dataset Viewer API와 DuckDB-NSQL-7B를 활용한 Text2SQL

Hugging Face는 DuckDB-NSQL-7B 모델과 Hugging Face Dataset Viewer API를 함께 사용하여 Text-to-SQL 기능을 구현하는 워크플로우를 시연했습니다. 이 통합을 통해 사용자는 120,000개가 넘는 공개 데이터셋을 자연어로 질의할 수 있어, 수동으로 SQL 코드를 작성할 필요가 없습니다.

DuckDB-NSQL-7B 모델 개요

DuckDB-NSQL-7B는 DuckDB SQL에 특화된 최첨단 대형 언어 모델(LLM)입니다. MotherDuck와 Numbers Station이 개발했으며, Meta의 Llama-2-7b를 기반으로 파인튜닝되었습니다.

학습 및 기능

  • 파인튜닝 과정: 모델은 먼저 일반적인 SQL 쿼리 데이터셋으로 파인튜닝된 뒤, DuckDB 전용 텍스트‑투‑SQL 쌍으로 추가 정제되었습니다.
  • 다재다능성: 표준 SELECT 문뿐만 아니라 공식 문서와 확장을 활용한 다양한 유효한 DuckDB SQL 문을 생성할 수 있습니다.

Hugging Face Dataset Viewer API와의 통합

Hugging Face Dataset Viewer API는 LLM에 올바른 컨텍스트를 제공하기 위한 인프라를 제공합니다. 이를 통해 시스템은 120,000개가 넘는 데이터셋의 메타데이터와 데이터 형식에 프로그래밍 방식으로 접근할 수 있습니다.

주요 API 기능

  • 스키마 조회: 데이터셋의 분할, 컬럼 이름 및 데이터 타입을 제공합니다.
  • 데이터 접근: 任意 인덱스의 행을 다운로드하고, 데이터셋을 자동 변환된 Parquet 파일 형태로 접근할 수 있게 합니다.
  • 메타데이터: 데이터셋 크기(행/바이트), 전체 텍스트 검색 및 필터링 옵션을 제공합니다.

기술 구현 워크플로우

Text-to-SQL 파이프라인은 자연어 질문을 데이터 결과로 변환하기 위해 다음과 같은 순서를 따릅니다:

1. 스키마 추출

모델에 필요한 컨텍스트를 제공하기 위해 시스템은 데이터셋 스키마를 가져옵니다. 예를 들어 world-cities-geo 데이터셋을 사용할 경우, API를 통해 첫 번째 Parquet 파일을 가져와 DuckDB로 첫 행을 기반으로 테이블을 시뮬레이션하고 Data Definition Language(DDL) CREATE 문을 추출합니다.

2. 프롬프트 구성

모델은 지시문, 데이터베이스 스키마, 사용자의 질문을 포함하는 구조화된 프롬프트가 필요합니다. 프롬프트 형식은 다음과 같습니다:

### Instruction:
Your task is to generate valid duckdb SQL to answer the following question.
### Input:
Here is the database schema that the SQL query will run on:
{ddl_create}
### Question:
{query_input}
### Response (use duckdb shorthand if possible):

3. SQL 생성 및 실행

  • 모델 추론: 프롬프트는 DuckDB-NSQL-7B 모델에 전달됩니다( transformers 파이프라인, AutoModelForCausalLM 또는 GGUF 양자화 버전의 llama.cpp 로 실행 가능).
  • 쿼리 수정: 모델이 생성한 쿼리는 일반적인 data 테이블을 참조하므로, 출력 결과에서 FROM data를 Hugging Face 뷰어에 호스팅된 실제 Parquet 파일 URL로 교체합니다.
  • 실행: 최종 SQL 쿼리는 DuckDB를 사용해 실행됩니다. DuckDB는 URL을 통해 Parquet 파일을 직접 조회할 수 있어, 필터링된 데이터를 데이터프레임 형태로 반환합니다.

배포 옵션

DuckDB-NSQL-7B 모델은 하드웨어 및 성능 요구 사항에 따라 여러 방법으로 배포할 수 있습니다:

  • Hugging Face Transformers: 표준 파이프라인 또는 토크나이저/모델 로딩.
  • llama.cpp: 최소 설정과 높은 성능을 제공하는 로컬 또는 클라우드 추론에 사용되며, GGUF 양자화 버전(DuckDB-NSQL-7B-v0.1-q8_0.gguf)을 활용합니다.

Sources