こんにちは、HEARTCOUNT チームの briley です。
データ分析を始める時、どのようなデータをどこから探せばいいのか分からないという経験はありませんか? 今日からそのような悩みはしないでください!
誰でも簡単に必要なデータを照会し、必要なデータセットを生成することができる HEARTCOUNT ABI の Text-To-SQL 機能について紹介します。
今回のブログでは、Text-To-SQL (TTS)とは何かを定義し、開発過程で経験した試行錯誤、その過程を経て誕生した HEARTCOUNT ABIのTTSの使用方法を共有します。
それでは、始めましょう。
実務者必須の能力 SQL?
ビッグデータ時代に入り、データは企業の重要な資産として浮上し、これにより、データベース管理やデータ分析は企業や組織で核心的な技術として位置づけられています。
企業はデータをより効果的に管理・活用するための必須ツールとしてSQL (Structured Query Language)を導入してきました。SQLは企業のデータ管理、分析、そして意思決定において重要な役割を果たし、これは現代のビジネス環境で高い価値を生み出しています。
しかし、SQLは文法が複雑で、データベース構造に対する理解が必要なため、多くの業務担当者にとっては一種の宿題として認識されています。
SQLとは一体どのようなものでしょうか?
簡単な例として、以下のデータを見てみましょう。 ある企業の人事情報が以下のようにデータベースに格納されているとします。
「マーケティングチームに年齢が35歳以上の係長は合計何人ですか?」をSQLに変換してみましょう。
SELECT COUNT("ID")
FROM "社員情報"
JOIN "部署情報" ON "社員情報"."部署コード" = "部署情報"."部署コード"
WHERE "部署情報"."部署名" = 'マーケティング' AND "社員情報"."年齢" >= 35
AND "社員情報"."役職" = '係長'
どうですか? おそらく、ほとんどの人は「これって何?」と感じると思います。確かに日常言語のように楽な言語ではありません。このようにSQLは強力ですが、それだけデータベース構造と文法に対する理解と学習が必要な言語です。
SQLを知らなくてもデータ検索ができる理由
では、私たちは必ずSQLを勉強する必要があるのでしょうか? 答えは「いいえ」です。今、私たちには TTS (Text-To-SQL)という強力なツールがあるためです。
いったいTTSが何であるか、SQLを知らなくてもいいのでしょうか?
つまり、見慣れないSQLを使うことなく、「マーケティングチームに35歳以上の係長は全部で何人いますか?」と入力するだけで、目的のデータを取得することができる非常に強力な技術です。
そんなものあるんですか、じゃあ誰がSQLを学ぶんですか?
さて、TTSに興味が湧きましたか? それでは、本格的にTTSについて説明しましょう。
TTS (Text-To-SQL)とは何ですか?
とても簡単です。定義通りです。私たちの日常の言語をSQLに変えてくれる技術です! それでは、TTSはどのように作られるのでしょうか? ちょうどこの素晴らしい技術をBIソリューションに溶け込ませた事例があります。それがHEARTCOUNT ABIです。
ABIのText-to-SQLは、ユーザーが入力したテキストを実行可能な正確なSQLに変換するために、自然言語を構造化言語に再構成した後、Large Language Model (LLM)を利用します。
HEARTCOUNT ABIのText-to-SQLは何が良いのですか?
以下のようなユーザー側の利点があります。
- 業務可能領域の拡張: 通常、業務に必要なデータを抽出するために、データ担当者に抽出条件を要求し、その後、他の作業をしながらデータの配信を待ちます。その過程で、要求者の要求条件が誤って伝達される場合もしばしば発生します。Text to SQLを活用すれば、直接データを抽出することができ、作業の効率を高めることができます。
- 業務効率の向上: データ管理者は一日に何十回もデータ抽出作業を繰り返し実行しています。データ抽出条件が少し変更されただけでも、似たようなデータを新たに抽出しなければならないという不便さが存在します。Text-to-SQLを活用すれば、SQLの専門家でない人でも必要なデータを直接抽出することができるため、データ管理者の繰り返しの作業負担が軽減されます。
- 最適化されたSQL: データ担当者は、実行されるクエリをモニタリングし、データベースの負荷を最小限に抑えるように管理する必要があります。ABIのText-to-SQLは、テーブルのキーやインデックスの情報を考慮して最適なクエリを生成します。
- データ・アクセシビリティの向上: 自然言語を活用してデータベースから直接データを照会することで、手作業によるデータ処理や不必要な複雑さが減少し、質問に対する回答を迅速に得ることができます。これにより、すべてのユーザーがデータベースから必要な情報にすばやくアクセスできるようになります。
近くて遠いあなた... Text-to-SQL
「いや、あんなに良い点がたくさんあるんだから、さっさとABIに適用してみよう!」
...は私たちだけの勘違いでした。ABIのText-to-SQLを設計して開発する過程で考えもしなかった問題にぶつかり、何度も試行錯誤を経験しました。今、その経験を通じて得た知識を共有したいと思います。
- 様々なデータベース構造への対応: Text-to-SQLは様々な形式と構造のデータベースに対応できる必要があります。データベースごとに異なるスキーマやテーブル構造を理解して処理するための一般化された方式を開発する必要があります。
- 整合性のあるメタデータ抽出: 正確な回答を得るためには、質問に関連するメタデータを適切に抽出する必要があります。しかし、LLMを呼び出して回答を受けることができるトークンの数には制限があります。この制限を克服するために、ABI TTSはメタデータ抽出プロセスを2回に分けて、抽出したメタデータを再構築するロジックを追加しました。
- 生成されたクエリの補正: ユーザーが入力した質問を正確に理解し、目的の結果を照会するためには、正しいクエリを生成する必要があります。しかし、質問の曖昧さや同音異義語などにより、ユーザーの意図を誤って理解し、不正確なSQLを生成する可能性があります。このような問題を解決するために、自分でエラーを修正することができるObserverモジュールを追加しました。
- クエリ実行の効率化: Text-to-SQLが生成するSQLクエリは、正確性だけでなく、実行効率も考慮しなければなりません。大量のデータを照会したり、インデックス化されていない条件でデータを照会してデータベースに負荷を与えるクエリを避けなければなりません。このため、テーブルのキーやインデックスの情報を照会し、これらの情報を活用して最適化されたクエリを生成します。
- セキュリティの強化: Text-to-SQLはSQLの専門家ではない人でもデータベースに直接アクセスできるため、ユーザー別のデータアクセス権限を明確に設定する必要があります。ABI TTSは、ユーザーのダッシュボードアクセス権限をそのまま適用し、許可されたデータのみアクセスできるように設定しました。
ベールを脱いだ HEARTCOUNT ABI Text-to-SQL
様々な試行錯誤を経験し、何度も変化を重ねたABIのTTSはどのような姿でしょうか。
Text-to-SQLは複数のモジュールで構成されており、以下のモジュールを組み合わせてユーザーが望むワークフローを作成することができます。
Data Indexer
データベースのスキーマ構造、テーブルリスト、テーブル別の列リストや説明、インデックスを照会して、トークンを最小化する構造に変換するインデックス化の作業を実行するモジュールです。(実際のデータは照会しません)
Prompt Manager
質問に最適な回答を提供するために、プロンプト(Prompt)を生成して管理するモジュールです。
LLM + Parser
- LLM: 大規模言語モデル(Large Language Model)でユーザーが入力した質問と関連するテーブルのリストを抽出し、それに基づいてSQLクエリを作成します。ABI Text-to-SQLはGPT-4を使用します。
- Output Parser: LLMから提供された回答を希望する形式で解析(パース)するモジュールです。SQL QueryやQueryの詳細な説明を提供します。
Validator
- SQL Executor: 生成されたSQLを実行し、正しい結果が照会されるか確認するモジュールです。結果の照会時に、DBの負荷を防ぐためにデフォルトで10個の結果のみ照会します。
- Observer: 1~6回のモジュールを繰り返し実行し、モジュールごとの結果を観察し、自らエラーを修正して最適な結果を導き出すモジュールです。このモジュールを使用すると、回答の精度を向上させることができますが、応答時間とコストが増加します。
HEARTCOUNT ABI Text-to-SQL、簡単ですか?
ABIのText-to-SQLを使用する方法はとても簡単です。ユーザーは照会したいデータベースを選択し、質問を入力するだけです。商品情報が保存されているデータベースを選択し、「商品のカテゴリー別の商品の件数」という質問を入力するとどうなりますか?
ABIのText-to-SQLは、ユーザーが入力した質問を分析し、選択したデータベースの構造とマッチングして質問をSQLクエリに正確に変換します。その後、ユーザーは生成されたSQLを実行して目的の結果を確認することができます。
それだけでなく、ユーザーは回答されたクエリをデータセットとして保存することができます。このように保存されたデータセットは、後で必要な場合に再利用したり、ダッシュボードやHEARTCOUNTで利用することができます。
ただし、ユーザーの質問が曖昧であったり、必要な情報が明確でない場合には、正確でない、または不完全なSQLクエリが生成される可能性があります。
しかし、心配する必要はありません。 HEARTCOUNT ABIでは、数回クリックするだけで、ユーザーは直接データを照会することができます。したがって、画面上でデータ構造を確認し、間違った内容をすぐに修正することができます。