|
出典: Big Fishのデータライフ 大規模モデルの開発後、自然言語を用いたデータ分析を可能にすることがBI分野の焦点となりました。最も重要な点は、データ分析の問題を実行可能なSQLに変換し、ビジネス理解とデータ抽出の間にある大きなギャップを埋めることです。 本日は、ChatdSQLの実装アプローチについて解説します。以下では、「 4月1日時点の50歳以上の顧客の地域別購買額を統計的に計算する」という要件を例に、SQLの組み立てと実装プロセスを説明します。 I. 要件分析 要件分析は、自然言語をSQL文に変換するプロセス全体の最初のステップです。具体的には、以下の側面が含まれます。 1. サポートするデータ統計問題の種類を決定します。 (1)集計クエリ:平均、合計、カウントなど (2)時系列分析:月次売上、四半期利益など (3)多次元分析:地域、年齢層、性別など異なる次元でのデータ分析など この場合の「地域別買物金額統計」は、多次元分析と集計という統計問題を含んでいます。 2. サポートされているデータ ソースとテーブル構造を決定します。 (1)データソース:データは、リレーショナルデータベース(MySQL、PostgreSQL)、NoSQLデータベース(MongoDB、Cassandra)、分散データウェアハウス(Snowflake、Redshiftなど)など、さまざまな種類のデータベースに保存できます。 (2)データテーブルの構造:テーブル名、フィールド名、フィールドタイプなど、各データテーブルの構造を理解します。これは、自然言語の要件を特定のデータベースフィールドに正確にマッピングできるようにするためです。 このケースには、以下に示すように、CustomerInfo テーブルと ShoppingRecords テーブルが関係します。
後続の操作を簡素化するために、ここでは、大規模モデルが質問に継続的に回答する機能を備えており、2 つのテーブルの内容がこの質疑応答セッションのコンテキストになっていると想定します。 3. 対象ユーザーと利用シナリオを理解する (1)対象ユーザー:このシステムを使用する主なユーザーグループを把握します。管理者、データアナリスト、ビジネス担当者、あるいはデータベースの経験がない一般ユーザーなどが考えられます。 (2)ユースケース:ユーザーがこのシステムを使用する可能性が最も高い具体的なシナリオを把握します。レポート作成、リアルタイムデータ監視、それともビジネス上の意思決定支援でしょうか? 初期のChatSQLは、非常にシンプルなデータ取得ロジックしか実装できませんでした。IT担当者向けではなく、IT担当者にとって必要でもありません。むしろ、SQLを理解していないビジネス担当者や経営陣を対象としていました。 ビジネス担当者は、マーケティング目的で先月のARPUが50を超えたユーザーのリストなど、特定のデータを迅速に取得したいと考えています。一方、マネージャーは特定のディメンションの指標データを迅速かつ柔軟に取得したいと考えていますが、自分で指標を探したり、他の人に尋ねたりするには半日かかります。例えば、杭州の利益成長率を知りたい場合などです。ChatSQLはまさにこのような場面で威力を発揮します。 要件分析のこの段階を通して、システムが解決すべき具体的な問題とその解決方法をより明確に理解することができます。これにより、その後の設計と実装の方向性が明確になります。 II. 大規模モデルは基本要素を特定する SQLを用いて統計分析を行うには、ディメンション、メトリック、条件、時間という4つの重要な要素を明確に定義する必要があります。要件記述からこれらの4つの要素を正確に抽出する必要があります。 (1)次元を特定する:文章の中で次元を表す単語(地域、時間など)を見つける。 (2)指標を特定する:文中にある指標(買い物金額、回数など)を表す単語を見つける。 (3)条件を特定する:フィルタリング条件を表す単語を文中から見つけます。 (4)時間を特定する:時間がある場合は、文中で時間の範囲を示す単語を見つけます。 これには大規模モデルの意味理解能力が必要です。ChatGPT4を例にとると、大規模モデルに次のように尋ねることができます。 質問: 「XX業界の自然言語処理の専門家、統計学者、データ分析者を想定し、以下の業務要件を理解し、統計要素に分解し、{【指標】:例:「オンラインユーザー数」、【時間】:例:「2020年5月」、【ディメンション】:例:「都市」、【条件】:例:「収入100元以上」}の形式で出力してください。要件の説明:4月1日時点の50歳以上の顧客の購買金額を地域別に統計的に分析してください。」 チャットGPT4: [指標]: 買い物金額 [日付]: 4月1日 [ディメンション]: 地域 [条件]: 年齢 > 50歳 ご覧のとおり、chatgpt は 4 つの重要な要素を正確に抽出しました。これは重要なステップです。 III. フィールドマッピング [メトリクス]、[ディメンション]、[条件]は、ベクトル検索によって最も類似した列を見つけ、そこからテーブル名と列名を抽出するために使用されます。あるいは、より大きなモデルから直接答えを得ることもできます。 質問: 買い物金額、地域、年齢(50歳以上)、および時間を、CustomerInfoテーブルとShoppingRecordsテーブルの対応するフィールドと一致させてください。出力形式は、Shopping Amount -> ShoppingRecords.shopping_amountとなります。 チャットGPT4: 買い物金額 -> ShoppingRecords.shopping_amount; 地域 -> CustomerInfo.region; 年齢 > 50 歳 -> CustomerInfo.age; 時間 -> ShoppingRecords.shopping_date IV. SQLアセンブリ 大規模モデルは継続的な対話をサポートし、chatgpt が先行するセマンティック分析に基づいて組み立てられた SQL を直接提供できるようにします。 質問: 4 月 1 日の 50 歳以上の顧客の地域別の買い物金額を計算するために、フィールド一致関係に基づいてコンパイルされた SQL ステートメントを提供してください。 チャットGPT4: 実際、ChatGPT4 は統計的な意図を推測し、正しく組み立てられた SQL を提供できるほどスマートです。 V. 大規模モデルの課題 上記の結果はChatGPT 4に基づいており、かなり理想的です。しかし、真に実用的なChatSQLを実装するには、実際には解決すべき多くの問題があります。 1. 大規模モデルの能力の問題 現在のモデルのほとんどはchatgpt4とは大きく異なります。望ましい結果を得るには、より多くのプロンプトを提供し、より多くの補助ツールを使用する必要があることがよくあります。 次に、chatgpt 3.5 を使用してプロセスをもう一度実行し、どのような問題が発生する可能性があるかを確認し、その解決方法を説明します。 (1)大規模モデルは基本要素を特定する 質問: あなたがXX業界の自然言語処理の専門家、統計学者、データ分析者であると仮定して、 以下の業務要件を理解し、統計要素に分解し、{【指標】:例:「オンラインユーザー数」、【時間】:例:「2020年5月」、【ディメンション】:例:「都市」、【条件】:例:「収入100元以上」}の形式で出力してください。要件の説明:4月1日時点の50歳以上の顧客の買い物金額を地域別に統計的に分析してください。 チャットGPT3.5: 1. 指標:買い物金額 2. 日付: 4月1日 3. ディメンション: 地域 4. 条件:50歳以上のお客様 ご覧のとおり、ChatGPT3 では条件に「顧客」が含まれているため、後続の条件フィールドのマッピングが妨げられています。 (2)フィールドマッピング 質問: 買い物金額、地域、50歳以上の顧客、および時間を、CustomerInfoテーブルとShoppingRecordsテーブルの対応するフィールドに入力してください。出力形式は、Shopping Amount -> ShoppingRecords.shopping_amountとなります。 チャットGPT3.5: 買い物金額 -> ShoppingRecords.shopping_amount 地域 -> CustomerInfo.region 50歳以上の顧客 -> CustomerInfo.age > 50 時間 -> ShoppingRecords.shopping_date 確かに、「50歳以上の顧客」という定義は、特定の分野には当てはまりません。解決策としては、以下の2つが考えられます。 最初の方法は、プロンプトの単語を調整することです。 質問: 「買い物金額、地域、顧客年齢(50歳以上)、および時間を、CustomerInfoテーブルとShoppingRecordsテーブルの対応するフィールドと一致させてください。出力形式は、Shopping Amount -> ShoppingRecords.shopping_amountです。」フィールドを直接一致させることができない場合は、一致させる意味に最も近いフィールドを選択してください。 チャットGPT3.5: 買い物金額 -> ShoppingRecords.shopping_amount 地域 -> CustomerInfo.region 50歳以上の顧客 -> CustomerInfo.age(直接一致はできませんが、顧客の年齢情報を表します) 時間 -> ShoppingRecords.shopping_date この時点で、ようやく正しいフィールドと一致しましたが、普遍性を実現するには、提案語を継続的に最適化する必要があります。 2つ目のアプローチは、単語分割、品詞タグ付け、エンティティ認識を用いて、エンティティ名「顧客年齢」を個別に識別し、他のフィールドと照合するものです。これは、特定のドメインにおける大規模モデルの限界に対処するための具体的な手法ですが、ChatSQLの複雑さを大幅に増大させます。 (3)SQLアセンブリ 質問: 「フィールドの一致関係に基づいて、「4 月 1 日の 50 歳以上の顧客の地域別の買い物金額の統計分析」の構築された統計 SQL ステートメントを提供してください。」 チャットgpt3.5: ChatGPT 3.5はコンテキストベースなので、このシンプルなSQLを組み立てることができます。Wenxin Yiyanのような大規模なモデルでもテストしましたが、このシンプルなシナリオでは基本的に問題ありません。 しかし、統計的要件の柔軟性は高すぎます。統計用語を少し変えて、様々なモデルのパフォーマンスを見てみましょう。 質問: 「地域別昨日のショッピング支出の前年比増加率」 チャットGPT4: ChatGPT4 の組み立てられた SQL は正しく、日ごとの前年比の比較の概念を正確に理解しています。 チャットGPT3.5: ChatGPT 3.5 の SQL はほぼ正しいですが、バグがあります。 まず、null値が考慮されていないため、前年同日のデータがない場合、前年比成長率の計算に問題が生じる可能性があります。 次に、完全性の問題があります。LEFT JOIN を使用すると、昨年データが存在しなかった地域は NULL として表示されます。NULL に対して数学演算を実行すると、結果も NULL になります。これはサブクエリの問題です。 3 番目は、パフォーマンスの問題です。特にテーブルが非常に大きい場合、サブクエリはクエリのパフォーマンスに影響を及ぼす可能性があります。 全体的に、かろうじて合格点でした。 心からの言葉: Wenxin Yiyan が提供したSQLは完全に間違っています。日ごとの前年比の概念を理解しておらず、構文もエラーだらけで、基本的に使い物になりません。 ChatSQLの難しさは、各段階における大規模モデルの欠点を補うために、特定のシナリオに合わせてカスタマイズされた自然言語モデルを多数開発し、適切なツールを装備し、多くのプロンプト語を最適化して、扱いにくい大規模モデルを段階的に誘導し、SQLの組み立てという目標を達成しなければならないという点にあります。このコストが特に高くなると、ChatSQLは失敗に終わります。 2. データ管理の問題 ChatSQLの成功は、企業のデータカタログの完全性にも左右されます。重要なステップは、大規模モデルにおいて4つの要素を企業のデータディクショナリのメタデータと正確に一致させることです。企業のデータディクショナリのビジネスメタデータと技術メタデータが不完全な場合、一致率は非常に低くなり、ChatSQLは役に立たなくなります。 現状では、メタデータを一時的に補足することでしか問題を解決できませんが、ChatSQLのスケールアップに伴い、このアプローチは持続不可能になります。企業は、データカタログを日常的に運用できる、より包括的なデータガバナンスシステムを構築する必要があります。そうでなければ、データに基づくあらゆる大規模モデルのイノベーションを実現することは困難になるでしょう。 3. ChatdSQLシナリオの問題 前述の通り、ChatSQLの初期機能は限定的であり、開発者やデータリトリーバーにとっての価値は限られていました。現在、ChatSQLを使用するには、以下の2つの条件を満たす必要があります。 まず、リアルタイムおよびほぼリアルタイムのデータに対する需要が強いです。 2 番目は、SQL 開発スキルが不足しているか、データ アーキテクチャに不慣れであることです。 ChatSQLが活用されるのは、これら2つの条件が満たされた場合のみです。想定されるシナリオは2つあります。1つは、ビジネス担当者がデータを迅速に取得する必要がある場合、もう1つは、マネージャーが迅速かつ柔軟に指標を確認する必要がある場合です。これらの条件が満たされない場合は、しばらく様子を見ましょう。 結局のところ、ChatSQLが成功するのは、垂直分野におけるビジネス分析の範囲を継続的に絞り込みつつ、大規模モデリング機能を継続的に強化していくというバランスをとっている企業だけです。ChatSQLが真に成功すれば、BI分析の強化も自然と実現するでしょう。 |