paint-brush
本番環境レベルの Text2SQL エンジンを構築する方法@datastax
175 測定値 新しい歴史

本番環境レベルの Text2SQL エンジンを構築する方法

DataStax11m2024/08/13
Read on Terminal Reader

長すぎる; 読むには

text2SQL における LLM の役割について学び、この機能に固有の課題について議論し、Skypoint チームの新しい text2SQL エンジンである SherloQ について詳しく説明します。
featured image - 本番環境レベルの Text2SQL エンジンを構築する方法
DataStax HackerNoon profile picture

データベースの操作には、多くの場合、ある程度の技術的専門知識が必要となり、多くの人にとってデータに簡単にアクセスできなくなることがあります。会社の財務数値と傾向を把握する必要がある財務担当役員について考えてみましょう。従来、この役員はデータベースから必要なデータを抽出するために SQL アナリストに頼らなければなりませんでした。この依存関係により、特に役員が目的の洞察を得るためにクエリを複数回調整する必要がある場合、遅延やコミュニケーションのギャップが生じる可能性があります。


しかし、自然言語を構造化クエリ言語ステートメントに変換する機能である text2SQL が状況を変えました。text2SQL を使用すると、財務担当役員は自然言語を使用してデータベースと直接対話できます。たとえば、ユーザーは「先月の各顧客の平均注文額はいくらでしたか?」などのビジネス関連の質問を入力できます。


Text-to-SQL AI エンジンは質問を処理し、対応する SQL クエリを生成します。


Select customer_id, AVG(order_value) AS average_order_value FROM orders WHERE order_date >= DATE_SUB(CURRDATE(), INTERVAL 1 MONTH) GROUP BY customer_id;


次に、データベースに対して実行し、結果をユーザーに表示します。


この記事では、text2SQL における LLM の役割を説明し、この機能に固有の課題について議論し、 Skypointチームによって開発された非常に正確で堅牢な text2SQL エンジンである SherloQ について説明します。

text2SQL における LLM の役割

大規模言語モデル(LLM) の助けにより、text2SQL の変換機能が大幅に向上しました。これらのモデルは、膨大な量のデータと強力なニューラル ネットワーク アーキテクチャを使用して、人間のようなテキストを理解して生成します。多様なデータセットでトレーニングすることで、LLM は自然言語を SQL クエリに変換するなど、さまざまなタスクを一般化できます。


たとえば、論文「 言語モデルは少数の学習者です」では、LLM が最小限の例でタスクを実行する方法を示し、限られたデータで新しいタスクに適応する能力を強調しています。このアプローチにより、タスク固有の広範なデータの必要性が大幅に軽減され、さまざまなアプリケーションで LLM を展開しやすくなります。


Spider: 複雑でクロスドメインなセマンティック解析とテキストから SQL へのタスクのための大規模なヒューマン ラベル付きデータセット」は、さまざまなドメインにわたる複雑な SQL クエリのモデルをトレーニングおよび評価するための包括的なデータセットを提供します。このデータセットは、モデルのパフォーマンスに関する堅牢なベンチマークを提供することで、text2SQL の最先端技術を進歩させる上で極めて重要な役割を果たしてきました。


さらに、「 PALM: Pathways による言語モデルのスケーリング」では、モデル サイズの拡大やトレーニング パスウェイの最適化などの高度なトレーニング手法によって、text2SQL を含むさまざまなアプリケーションでモデルのパフォーマンスを向上させる方法について説明します。


これらの LLM は制御された環境では非常に効果的ですが、実稼働環境では課題に直面することがよくあります。これには、あいまいなプロンプトの処理、複雑なデータベース スキーマの管理、リアルタイム パフォーマンスの確保などが含まれます。さらに、これらのモデルを既存のシステムに統合するには、変化するデータやユーザー要件に適応するために多大な労力と継続的なメンテナンスが必要です。このタスクに適した 3 つの LLM を次に示します。

SQLコーダー

SQLcoder の主な目的は、自然言語入力を SQL クエリに変換することです。他の汎用モデルとは異なり、SQLCoder は SQL 固有のデータに改良されているため、SQL クエリの理解と生成に特に効果的です。SQLCoder は、text2SQL システムの複雑なクロスドメイン ベンチマークである Spider データセットで顕著なパフォーマンスを発揮します。


SQLCoder は、トレーニングでは見られなかった新しいスキーマに対して、64.6% の精度で正しい SQL クエリを生成します。これは、その 10 倍以上のサイズのモデルである GPT-3.5-turbo や text-davinci-003 よりも優れています。これは、実稼働環境にとって重要な、多様で複雑な SQL クエリを処理できる SQLCoder の能力を強調しています。

GPT3.5/GPT4 の

GPT-3.5 と GPT-4 (Generative Pre-trained Transformer) は、最も高度で効果的な汎用言語モデルの一部です。どちらのモデルも、少量学習に優れており、最小限の例で新しいタスクにすばやく適応するため、限られた入力から SQL クエリを作成するのに最適です。


たとえば、Spider データセットで評価した場合、GPT-3.5-turbo ではトレーニングでは見られなかった新しいスキーマで正しく生成された SQL クエリの割合が 60.6% であるのに対し、GPT-4 では 74.3% を達成しています。


これらのモデルは、特にコンテキストを理解し、複雑な自然言語入力から正確な SQL クエリを生成する際に、堅牢なパフォーマンスを発揮します。ただし、汎用設計のため、SQL 生成などの特殊なアプリケーションで最適な結果を得るには、追加の微調整が必要になる場合があります。

PaLMSQL について

PaLM (Pathways Language Model) SQL は、Google が開発したもう 1 つの強力なモデルです。PaLM SQL の高度な機能とアーキテクチャにより、自然言語を SQL クエリに変換し、複雑で多様なデータベース スキーマを高い精度で処理する効率性が向上します。


LLM の進歩にもかかわらず、運用中の text2SQL に単一の LLM に依存すると問題が生じる可能性があります。単一のモデルでは、エンタープライズ データ環境のさまざまなクエリ、データベース スキーマ、リアルタイムのレイテンシ要件を効果的に処理することはできません。


実稼働環境では、堅牢性、適応性、そして実際のビジネス ユーザーからのあいまいなプロンプトを処理する能力が求められます。したがって、text2SQL エンジンが実稼働レベルと見なされるには、次の 3 つの特性を備えている必要があります。


多様なクエリ作成を理解する能力- 構文的に異なるユーザー プロンプトを同じ SQL クエリに縮小できます。優れた text2SQL エンジンは、データ モデルのコンテキストを念頭に置きながら、ユーザー プロンプトの背後にある動機を理解し、それに応じて SQL クエリを作成できる必要があります。


あいまいなデータベース スキーマとデータ モデルを操作する機能 -実稼働データ モデルは、組織内の複数の異なるチームがデータに貢献し、データのライフサイクルを通じて所有権が何度も変更されるため、混乱が生じやすくなります。


優れた text2SQL エンジンには、ユーザーのためにデータ モデルの曖昧さを解消し、ノイズや曖昧さが幻覚を招かないようにする機能が必要です。これは、多くの実稼働ユーザーを阻む現在の LLM の特性です。


エンジンの動作によってクエリの実行に大きな遅延が発生しないようにする必要があります。ユーザーがリアルタイムで期待する回答は、リアルタイムで返される必要があります。つまり、エンジンは最大で最初の 3 回の試行で最適なクエリを作成する必要があります。

SherloQのご紹介

SherloQ は、クエリを自然言語から SQL に変換する Skypoint の text2SQL エンジンです。クエリ生成にカスタムの社内 LLM を活用することはアーキテクチャの重要な部分ですが、SherloQ の有効性は、データ クエリ機能を強化するように設計された高度なコンポーネントの組み合わせから生まれています。SherloQ は、クエリ変換の精度が高く、エラー処理が堅牢で、運用データベース システムとシームレスに統合できるため、大規模なデータ環境に適しています。



次のいくつかのセクションでは、SherloQ の内部アーキテクチャの詳細を掘り下げ、本番環境で使用して達成した結果の一部を紹介します。

SherloQのアーキテクチャコンポーネント

SherloQ のアーキテクチャには、システムの精度、信頼性、レイテンシを向上させるためにそれぞれが機能する複数の可動部分が含まれています。アーキテクチャの概要は次のとおりです。




ユーザー入力- ユーザー入力は自然言語クエリです。


状態エージェント Eeecutor -実行プロセス全体にわたって状態を追跡する LangChain インターフェイスの実装。Redis と DataStax Astra DB を活用して、実行中の推論とメモリの状態を追跡します。エグゼキュータは、さまざまなモジュール間の調整によって操作のフローを管理します。


これにより、ユーザー入力が正しく解析、処理され、後続のコンポーネントに転送され、入力から SQL クエリ生成までのフローが維持されます。


状態ツール- 状態変数を持ち、その状態をそれぞれのツールに渡す Langchain ベース ツールの拡張クラスです。状態変数を維持することで、状態ツールはそれぞれのツールに転送する必要がある必要なデータを追跡します。これにより、データ フローの一貫性が確保され、エージェント間の遷移中に情報が失われるのを防ぎます。


SherloQ の状態ツール:

  • クエリ生成ツールは、取得した少数のクエリ、データ モデル コンテキスト、および DB スキーマを使用して、最初の SQL クエリを生成します。解析されたスキーマ情報を使用し、コンテキストの例から学習することで、生成された SQL クエリの精度と関連性を高めます。


  • 再試行ツールは、クエリ実行中にスローされたエラーを分析し、エラーを解決するクエリを再生成します。


  • DB ツールは、クエリ生成に役立つデータベース スキーマと対応するメタデータ (注釈、コメントなど) を取得するのに役立ちます。取得されたスキーマ情報は、時間ベースのキャッシュ メカニズムを使用してキャッシュされ、パフォーマンスを最適化し、データベース クエリを削減します。また、データベースに対してクエリを実行し、結果またはエラー スタック トレースを返します。

SherloQ のパフォーマンスを向上させるためのデータ入力とテクニック

SherloQ のパフォーマンスを向上させるために、いくつかの手法を採用し、モデルに重要なデータ入力を提供します。これらは、構造化分解、少数のサンプル、データ モデル コンテキストの取得、リフレクション、再試行メカニズムで構成されます。各部分は、自然言語入力から正確で関連性の高い SQL クエリを生成するモデルの能力を向上させるために不可欠です。

構造分解

構造化分解では、ユーザー プロンプトが基本的な部分に分解されます。クエリの重要なコンポーネントに焦点を当てて識別すると、モデルが正確な SQL を生成するのに役立ちます。例:


入力: XYZ 社が供給するすべての品目の現在の在庫数量はいくらですか?

出力: ["現在入手可能な数量", "すべてのアイテム", "XYZ社提供"]

少数ショットの例

モデルには、いくつかの SQL サンプルの形式で参照質問が与えられ、類似のパターンに基づいて SQL クエリを生成するのに役立ちます。これらのサンプルにより、モデルは意図したクエリの構造と形式を認識できるようになり、さまざまなプロンプトに対して新しい SQL クエリを正確に生成する能力が向上します。次にいくつかの例を示します。


例1

入力: 在庫数が 20 個未満のアイテムを表示します。

出力: SELECT * FROM stock WHERE quantity_available < 20;


例2

入力: 価格が 100 ドルを超える商品を扱うベンダーをリストします。

出力: SELECT * FROM vendors WHERE Vendor_ID IN (SELECT Vendor_ID FROM items WHERE Unit_Price > 100);


当社のベクター データベースであるAstra DBからセマンティック類似性マッチングを使用して、最も類似した数ショットの例を動的に選択します。ベクター データベースを使用すると、新しい入力クエリに構造と内容が最も近い例を見つけることができ、モデルが最も関連性の高いパターンを活用して正確な SQL クエリを生成できるようになります。


当社の実稼働環境では、クエリごとに平均 2 つの少数ショットの例を使用します。当社の経験上、精度を向上させるために少数ショットの例を単に追加するだけでは、スケーラブルな方法とは言えません。

データモデルコンテキスト

データ モデル コンテキストには、SQL クエリの作成に役立つドメイン固有の詳細が含まれています。たとえば、病院ネットワークの財務データのコンテキストでは、財務メトリック コードとその説明などが含まれます。このコンテキストは、作成された SQL クエリがドメインのデータ構造と一致することを確認するためにモデルによって使用されます。データ モデル コンテキストを含めることはオプションであり、テーブルが複雑で、SQL クエリを形成するためにドメインの知識が必要な場合にのみ必要です。


例えば:

メトリック コード: 「MGMTFEE」 -> 説明: 「物件の管理のために徴収される手数料 - 管理手数料」

SQL DB スキーマ

SQL DB スキーマは、利用可能なデータの構造化された表現です。スキーマは、テーブルとその列の両方に注釈を付けることで強化されます。スキーマには、テーブル名と説明、列、その説明、およびデータ型が含まれます。


スキーマを提供すると、モデルがデータベース構造と各テーブルおよび列に関連付けられた意味を理解するのに役立ち、生成された SQL クエリが構文的に正しく、正しいデータベース要素を使用することが保証されます。

反射

リフレクションとは、モデルが自身の過去の応答、動作、または生成されたコンテンツを評価および判断する機能を指します。これにより、モデルはエラーや弱点を特定して修正することで、応答を改良できます。このプロセスには、クエリ生成フェーズでのフィードバックとともに、Sherloq エンジンが以前に確認したクエリを考慮することが含まれます。


これらのシナリオは、モデルが過去に見た類似の質問の成功を再現したり、失敗を回避したりするのに役立ちます。このステップでは、Astra DB も活用して、現在のクエリと意味的に最も類似したクエリを見つけます。

再試行メカニズム

SherloQ には、データベースから受信したエラーを使用した再試行メカニズムが組み込まれています。生成された SQL クエリでエラーが発生すると、エンジンは定義済みのテンプレートを持つエージェントを使用してクエリを修正します。


「」」

あなたの仕事は、質問から生成された不正な SQL クエリを修正して、ANSI SQL と互換性を持たせることです。次のガイドラインに従ってください。質問、データベース スキーマ、および受信したエラー メッセージを慎重に分析して、正確な回答が得られるようにします。混乱を避けるために、テーブル エイリアスを使用します。


たとえば、 SELECT t1.col1, t2.col1 FROM table1 AS t1 JOIN table2 AS t2 ON t1.id = t2.id


配給を計算するときは、必ず分子を浮動小数点数に変換してください。以下の形式を使用します。

タスク:

質問 [QUESTION] {user_input} [/QUESTION] に対応する SQL クエリを生成します。正しいクエリは次のとおりです: {sql_query} 前回の実行中に受信したエラー メッセージは次のとおりです: {error_message}

応答:

上記の入力に基づいて、修正された SQL クエリは次のとおりです: {response_sql} “””

結果の比較: SherloQ 実装前と実装後

SherloQ は、高度な LLM と適切に設計されたシステムを使用することで、コンテキストに対してより正確で関連性の高い SQL クエリを生成します。ここでは、レイテンシと精度の指標を使用して、SherloQ の前後のユーザー プロンプトの結果を比較します。

1つの生産質問を使用した比較

ここでは、当社の実稼働顧客である、有名な高齢者向け住宅運営会社を取り上げます。同社のユースケースの 1 つは、財務チームが Skypoint のプラットフォームを使用して、さまざまな高齢者向け住宅施設の統合財務指標を理解し、推論することです。


ユーザープロンプト: 「2022 年を通じて施設 CM のハウスキーピング費用の四半期ごとの傾向を決定します。」


SherloQ以前

  • 生成されたクエリ

    • SELECT SUM(Total_Amount_Numerator) / SUM(Total_Amount_Denominator) AS Housekeeping_Expenses FROM skypoint_metric_fact_denormalized_vw WHERE Facility_Name = 'CM' AND Year = 2022 AND Metric_Name = 'Housekeeping Expense' GROUP BY Quarter_Number';


  • 特定された問題

    • クエリは Quarter_Number でグループ化しますが、選択しないため、不完全な結果が発生する可能性があります。

    • Metric_Code のようなより具体的な識別子の代わりに Metric_Name を使用します。

    • SUM(Total_Amount_Denominator) では、ゼロによる潜在的な除算は処理されません。


  • 平均遅延: 29秒

    SherloQ 以前のセットアップでは、GPT-3.5 とプロンプト エンジニアリング、およびユーザー プロンプトごとに 5 回以上の少数ショットのクエリを組み合わせて使用していました。


SherloQで

  • 生成されたクエリ
    • SELECT Year, Quarter_Number, SUM(Total_Amount_Numerator) / COALESCE(SUM(NULLIF(Total_Amount_Denominator,0)),1) AS Housekeeping_Expenses FROM skypoint_metric_fact_denormalized_vwWHERE Metric_Code = 'EXPOTHHOU' AND Facility_Name = 'CM' AND Year = 2022 GROUP BY Quarter_Number, Year ORDER BY Quarter_Number ASC;


  • 改善点が確認
  • クエリには Quarter_Number が含まれており、必要な四半期の内訳が提供されます。
  • Metric_Code フィールドが使用され、メトリックのより正確な識別子が提供されます。
  • COALESCE(SUM(NULLIF(Total_Amount_Denominator,0)),1) 関数は、ゼロ除算エラーの可能性を処理します。
  • 結果は四半期の傾向を反映するために Quarter_Number 順に並べられます。
  • 平均遅延: 10 秒


以下は、本番環境のワークロードのベンチマークに基づいて、SherloQ の使用前と使用後の精度と信頼性について報告した結果です。

  • SherloQ以前
    • 精度: 65%

    • 信頼性: 60%


  • SherloQで
    • 精度: 92%

    • 信頼性: 90%


上記の結果は、キャッシュの影響を打ち消すために個別の識別子を使用してすべてのプロンプトを 100 回実行する内部ベンチマーク スイートから抽出されたものです (内部システムとモデルの両方)。スイートは、返された応答をベンチマーク応答と比較することで精度を測定し、同様の応答が返される頻度を測定することで信頼性を測定します。


この比較により、自然言語クエリを正確な SQL クエリに変換する SherloQ の利点が明確に示されています。SherloQ 後、全体的なパフォーマンスは 30% 向上しました。以前に生成されたクエリには、不完全な結果やエラー処理の欠如などの問題があり、精度と信頼性の両方に影響を与えていました。


SherloQ を使用すると、生成されるクエリはより正確で効率的、かつ堅牢になり、レイテンシ、精度、信頼性が大幅に向上します。この機能強化は、信頼性の高いデータ取得を実現する SherloQ の能力を示しており、データ クエリ プロセスの最適化を目指す組織にとって SherloQ は貴重なツールとなります。


Skypoint プラットフォームの他の部分を調べたり、SkyPoint AI のデモを予約したりするには、 Skypoint の Web サイトにアクセスしてください。


スカイポイントの主任 AI エンジニア Alok Raj 氏と、スカイポイントのエンジニアリング責任者 Sayandip Sarkar 氏による記事