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 からファインチューニングされています。
トレーニングと機能
- Fine-tuning Process: モデルは最初に一般的な SQL クエリの広範なデータセットでファインチューニングされ、その後 DuckDB 固有のテキスト‑to‑SQL ペアでさらに洗練されました。
- Versatility: 標準的な
SELECT文に加えて、DuckDB-NSQL-7B は公式ドキュメントや拡張機能を利用したものを含む、幅広い有効な DuckDB SQL 文を生成できます。
Hugging Face Dataset Viewer API との統合
Hugging Face Dataset Viewer API は、LLM にクエリ生成に必要な正しいコンテキストを提供するインフラストラクチャを提供します。これにより、システムはプログラムから 120,000 以上のデータセットのメタデータやデータ形式にアクセスできます。
主な API 機能
- Schema Retrieval: API はデータセットのスプリット、列名、データ型を提供します。
- Data Access: 任意のインデックスの行をダウンロードでき、データセットを自動変換された Parquet ファイルとしてアクセス可能にします。
- Metadata: API はデータセットのサイズ(行数/バイト数)、全文検索、フィルタリングオプションを提供します。
技術的実装ワークフロー
Text-to-SQL パイプラインは、自然言語の質問をデータ結果に変換するための特定の手順に従います:
1. スキーマ抽出
モデルに必要なコンテキストを提供するため、システムはデータセットのスキーマを取得します。例えば、world-cities-geo データセットを使用する場合、システムは API 経由で最初の Parquet ファイルを取得し、DuckDB を使って最初の行からテーブル作成をシミュレートし、データ定義言語(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 生成と実行
- Model Inference: プロンプトは DuckDB-NSQL-7B モデルに送信されます(
transformersパイプライン、AutoModelForCausalLM、または GGUF 量子化バージョン用のllama.cppで実行可能)。 - Query Modification: モデルが汎用的な
dataテーブルを参照するクエリを生成するため、出力はFROM dataを Hugging Face ビューアでホストされている Parquet ファイルの実際の URL に置き換えるように修正されます。 - Execution: 最終的な SQL クエリは DuckDB を使用して実行され、URL 経由で Parquet ファイルに直接クエリを投げ、フィルタリングされたデータをデータフレームとして返します。
デプロイオプション
DuckDB-NSQL-7B モデルは、ハードウェアやパフォーマンス要件に応じて複数の方法でデプロイできます:
- Hugging Face Transformers: 標準パイプラインまたはトークナイザー/モデルのロード。
- llama.cpp: ローカルまたはクラウド推論に最小限のセットアップで高性能を提供し、特に GGUF 量子化バージョン(
DuckDB-NSQL-7B-v0.1-q8_0.gguf)を利用します。