ChatSQL: ChatGPT を有効にしてプレーンテキストで SQL クエリを作成できるようにする

ChatSQL: ChatGPT を有効にしてプレーンテキストで SQL クエリを作成できるようにする

翻訳者 |ブガッティ

レビュー | Chonglou

ChatGPT2020年6月リリースされ OpenAIによって開発されました。それは多くの分野革命的な変化をもたらしました。これらの領域の 1 つは、データベース クエリの作成です ChatGPTを介してプレーンテキストからデータベースクエリを生成できますあまりよく知らないデータベースを理解するのに役立ちます

ChatGPT人気により、人工知能は徐々に私たちの日常生活組み込まれ、急速に発展しています本題に入る ChatGPTについて簡単に見てみましょう

ChatGPTの機能を完全に理解するにはその基盤となるアーキテクチャを完全に把握する必要がありますChatGPTGPTアーキテクチャ基づいて開発されていますそれではまずTransformerを見てみましょう

プロジェクトに直接アクセスするには、ここをクリックしてください: https://github.com/ademakdogan/ChatSQL?ref=hackernoon.com。

図1. Transformerのエンコーダとデコーダ

Transformer はseq2seqフレームワークを使用して、あるシーケンスを別のシーケンス変換できます。シーケンスは順序を定義します。たとえば、文を単語の連続として考えることができます Transformer は、テキスト翻訳などの自然言語処理(NLP)の問題を解決するためにも使用できます。このアーキテクチャをトレーニングするには、大量のラベル付きデータが必要です。これをトランスフォーマーが学習するのは困難ですこの問題を解決するには転移学習を使用することができますTransformer は、エンコーダーとデコーダーの 2 つの部分(1を参照)構成されており、どちらも巧みな言語表現を取得するのに優れています。

この能力により、各部分から言語モデルを構築できるようになりますエンコーダー積み重ねることで、トランスフォーマーの双方向エンコーダー表現(一般にBERTと呼ばれる)が得られます同様に、デコーダーユニットを積み重ねることで、生成的事前トレーニング(つまり、 GPT を取得できますこのではGPTのみ焦点を当てます GPTのコンテキスト転移学習を考慮すると便利ですモデルを最初からトレーニングする場合、パラメータは最初にランダムに設定されるため、通常は膨大な量のデータが必要になります。しかしパラメータが偶然に必要な値と一致または整列するシナリオを想像してみてください。この場合、必要な結果を得るために大規模なデータセットは必要ありません。私たちの理解しているように、 BERTGPT は転移学習の概念で使用されます

したがって、 GPTトレーニングは 2 つの部分に分かれています1 つは事前トレーニング部分で、ここではGPTアーキテクチャをトレーニングして言語が何であるかを理解しますもう 1 つは微調整部分で、ここでは転移学習を使用して、 GPTアーキテクチャが特定の言語タスク適切に機能するようにさらにトレーニングします

図2. 次の単語の予測の例

GPT に、ランダムな単語のシーケンスを入力として受け取り、次に最も適切な単語を予測できるアーキテクチャがあります例示的な予測を図2示します

言語モデリングは、言語の基本的な側面を理解するための理想的な基盤として選択され微調整が容易です文自体が入力ラベルと出力ラベルの両方として機能できるため、自己教師ありタスクと呼ばれることがよくあります。

図3. ChatGPT図

ChatGPTについて議論を続けましょう。図3に示すように ChatGPTプロセス全体は3 つの主要なステップに分けられます。最初のステップでは、言語自体を理解するために事前にトレーニングされたGPTモデルが使用されます次のステップでは、モデルを微調整してユーザープロンプトを効果的に処理しそれらのプロンプトに基づいて適切な応答を生成します。このプロセスを容易にするために、ラベル付けされたデータが人間のラベル付け担当者提供されますラベル付け担当者はプロンプトを提供するだけでなく、各プロンプトに対する望ましい応答も指定します。これにより、入力プロンプトと対応する出力応答の両方が存在するため、 GPTモデル教師付き微調整が容易になります

次のステップでは、最初のステップで得られた教師あり調整モデルが使用されます。単一のプロンプトがモデルに渡され複数の応答が生成されます。これら応答の品質は人間の評価者によって評価され、格付けされます。生成された各応答には対応する報酬が割り当てられ、それを使用して別のGPTモデル (報酬モデル)をトレーニングします報酬モデル自体は、最初のプロンプトと応答1 つを入力として受け取り、出力として報酬を生成する機能を持つモデルです。この報酬は、応答の質または良さを定量化します。

3 番目のステップでは、目に見えないキューが、教師ありの調整されたモデルのレプリカに渡されます。これにより応答が生成されそのランクまたは品質が報酬モデルを使用して評価されます。得られたランクは、すでに微調整されたモデルをさらに改良するために使用されますこれは、ランクをPPOモデルの損失関数組み込むことによって実現されモデルのパラメータをバックプロパゲーションによって更新できるようになります。特に興味深いのは、このプロセスによってモデルが無害に動作するだけでなく現実的な応答を生成すること可能になるという点です。これは、報酬自体が応答の品質に基づいて生成されるという事実によるものです

チャットSQL

それではChatGPTPythonを使用してプロジェクトを作成しましょうこのプロジェクトではLangChainフレームワークを使用します。

私たちの目標は、プレーンテキストを使用してデータベースから情報を取得することです。この目的のためにターゲット データベースとして MySQL を使用します。ただし、このアプローチは他のデータベースでクエリを生成するためにも使用できます。サンプルデータベースを以下に示します。

すべてのコードはここにあります( https://github.com/ademakdogan/ChatSQL )

 +-----+--------------------------------------------------------+------------------------+-------------------+--------+------------------+ | ID | Title | Author | Genre | Height | Publisher | +-----+--------------------------------------------------------+------------------------+-------------------+--------+------------------+ | 1 | Fundamentals of Wavelets | Goswami, Jaideva | signal_processing | 228 | Wiley | | 2 | Data Smart | Foreman, John | data_science | 235 | Wiley | | 3 | God Created the Integers | Hawking, Stephen | mathematics | 197 | Penguin | | 4 | Superfreakonomics | Dubner, Stephen | economics | 179 | HarperCollins | | 5 | Orientalism | Said, Edward | history | 197 | Penguin | | 6 | Nature of Statistical Learning Theory, The | Vapnik, Vladimir | data_science | 230 | Springer | | 7 | Integration of the Indian States | Menon, VP | history | 217 | Orient Blackswan | | 8 | Drunkard's Walk, The | Mlodinow, Leonard | science | 197 | Penguin | | 9 | Image Processing & Mathematical Morphology | Shih, Frank | signal_processing | 241 | CRC | | 10 | How to Think Like Sherlock Holmes | Konnikova, Maria | psychology | 240 | Penguin | | 11 | Data Scientists at Work | Sebastian Gutierrez | data_science | 230 | Apress | | 12 | Slaughterhouse Five | Vonnegut, Kurt | fiction | 198 | Random House | | 13 | Birth of a Theorem | Villani, Cedric | mathematics | 234 | Bodley Head | | 14 | Structure & Interpretation of Computer Programs | Sussman, Gerald | computer_science | 240 | MIT Press | | 15 | Age of Wrath, The | Eraly, Abraham | history | 238 | Penguin | | 16 | Trial, The | Kafka, Frank | fiction | 198 | Random House | | 17 | Statistical Decision Theory' | Pratt, John | data_science | 236 | MIT Press | | 18 | Data Mining Handbook | Nisbet, Robert | data_science | 242 | Apress | | 19 | New Machiavelli, The | Wells, HG | fiction | 180 | Penguin | | 20 | Physics & Philosophy | Heisenberg, Werner | science | 197 | Penguin | | 21 | Making Software | Oram, Andy | computer_science | 232 | O'Reilly | | . | ....... | ....... | .... | ... | .... | | . | ....... | ....... | .... | ... | .... |

ChatSQL は 2 つの主要な部分で構成されています。まず、指定されたプレーンテキストからChatGPT によってMy SQLクエリが生成されます。生成されたクエリを実行します。 2 番目のステップでは、データベースから返された結果が評価されます。この段階では、結果をユーザーに直接提示することも、 ChatGPT送り返してさらに分析および解釈することもできます。したがって、ChatGPT を使用してデータベース対話することができます

ユーザーが 175ページ以上178ページ未満フィクションジャンルを表示してください。著者は「Doyle, Arthur Conan」以外である必要があります とすると、この場合、次のコマンドを使用できます

 python3 chatsql.py -p 'Show me the book type fiction which they height bigger than 175 and smaller than 178. The author shouldn't be 'Doyle, Arthur Conan'. '

その結果以下の情報が得られました

 CHATGPT QUERY------------------: SELECT * FROM bt WHERE Genre = 'Fiction' AND Height > 175 AND Height < 178 AND Author != 'Doyle, Arthur Conan' RAW RESULT------------------: [(32, 'Pillars of the Earth, The', 'Follett, Ken', 'fiction', 176, 'Random House'), (37, 'Veteran, The', 'Forsyth, Frederick', 'fiction', 177, 'Transworld'), (38, 'False Impressions', 'Archer, Jeffery', 'fiction', 177, 'Pan'), (72, 'Prisoner of Birth, A', 'Archer, Jeffery', 'fiction', 176, 'Pan'), (87, 'City of Joy, The', 'Lapierre, Dominique', 'fiction', 177, 'vikas'), (128, 'Rosy is My Relative', 'Durrell, Gerald', 'fiction', 176, 'nan')] PROCESSED RESULT------------------ : The books 'Pillars of the Earth, The' by Ken Follett, 'Veteran, The' by Frederick Forsyth, 'False Impressions' by Jeffery Archer, 'Prisoner of Birth, A' by Jeffery Archer, 'City of Joy, The' by Dominique Lapierre, and 'Rosy is My Relative' by Gerald Durrell are all fiction books with 176 or 177 pages published by Random House, Transworld, Pan, Vikas, and Nan, respectively.

データベースの列名が正しい場合、 C hat GPT はそれらの名前を理解しそれに応じてクエリに応答します。ただし、場合によってデータベース内の列名が意味をなさなかったり、ChatGPT がコンテキストを完全に理解できないことがありますしたがって、システムの正常な動作を確保するためにはデータベースに関する事前情報を ChatGPT に提供する必要がありますinfo.jsonファイルを使用して情報を追加できます。

 +-----+--------------------------------------------------------+------------------------+-------------------+------+------------------+ | ID | aa | bb | cc | dd | ee | +-----+--------------------------------------------------------+------------------------+-------------------+------+------------------+ | 1 | Fundamentals of Wavelets | Goswami, Jaideva | signal_processing | 228 | Wiley | | 2 | Data Smart | Foreman, John | data_science | 235 | Wiley | | 3 | God Created the Integers | Hawking, Stephen | mathematics | 197 | Penguin | | 4 | Superfreakonomics | Dubner, Stephen | economics | 179 | HarperCollins | | 5 | Orientalism | Said, Edward | history | 197 | Penguin | | . | ....... | ....... | .... | ... | .... | | . | ....... | ....... | .... | ... | .... |

以下に示すように、名前が不適切に付けられたデータベースがあるとしますこの場合、データベースに関する必要な情報はinfo.jsonファイル入力されます

 {“bt”: “Table Name”, “aa”: “Title of the book”, “bb”: “Author of the book”, “cc”: “Type of book”, “dd”: “Height of the book”, “ee”: “Book Publisher”}

次に同じコマンドを使用します:

 python3 chatsql.py -p 'Show me the book type fiction which they height bigger than 175 and smaller than 178. The author shouldn't be 'Doyle, Arthur Conan'. '

データベース内の列名が適切に選択されていない場合でも、正しい情報を提供しているため、Chats GPT は正しいクエリを生成ます

 {'query': "SELECT aa, bb, cc, dd FROM bt WHERE cc = 'fiction' AND dd > 175 AND dd < 178 AND bb != 'Doyle, Arthur Conan'", 'raw_result': "[('Pillars of the Earth, The', 'Follett, Ken', 'fiction', 176), ('Veteran, The', 'Forsyth, Frederick', 'fiction', 177), ('False Impressions', 'Archer, Jeffery', 'fiction', 177), ('Prisoner of Birth, A', 'Archer, Jeffery', 'fiction', 176), ('City of Joy, The', 'Lapierre, Dominique', 'fiction', 177), ('Rosy is My Relative', 'Durrell, Gerald', 'fiction', 176)]", 'processed_result': '\nThe books "Pillars of the Earth, The" by Ken Follett, "Veteran, The" by Frederick Forsyth, "False Impressions" by Jeffery Archer, "Prisoner of Birth, A" by Jeffery Archer, "City of Joy, The" by Dominique Lapierre and "Rosy is My Relative" by Gerald Durrell are all fiction and have page lengths of 176 or 177.'}

次のプロジェクトでは、無料のモデル (Llama) を使用してプロンプトからクエリ ( Mongoおよび SQL) を生成します。

  • プロジェクトコードリポジトリ: https://github.com/ademakdogan/ChatSQL
  • GitHub: https://github.com/ademakdogan
  • リンクトイン: https://www.linkedin.com/in/adem-akdoğan-948334177/

元のタイトル: ChatSQL: ChatGPT を有効にしてプレーンテキストから SQL クエリを生成できるようにする、著者: Adem Akdogan


<<:  世界モデルが大きな貢献を果たしました! 20以上の自動運転シナリオの偽データがリアルすぎる…

>>:  音楽駆動型デジタルヒューマン技術の詳細な説明

ブログ    
ブログ    

推薦する

アイソレーションフォレスト: ビッグデータにおける最高の異常検出アルゴリズム

Isolation Forest または「iForest」は、わずかなパラメータのみで外れ値を検出で...

洪水の知らせを聞いたらすぐに行動を起こしましょう!ロボットは風と波の守護者となることを目指す

災害に直面して、すべての関係者が行動を起こした。人民解放軍部隊が被災者の救出に派遣されているとみられ...

自己一貫性を利用して大規模モデルの推論能力を向上させたGoogleは、ベンチマークの数学問題の75%を解決しました。これはGPT-3よりも20%高い数値です。

言語モデルはさまざまな NLP タスクで目覚ましい成功を収めていますが、その推論能力は不十分な場合が...

量子化学計算と機械学習に基づいて、肉眼で検出可能な蛍光分子をゼロから作成する

蛍光分子を設計するには、分子の光吸収など、分子構造に直接関連するものだけでなく、相互に関連する複数の...

「AI+コンピューティングパワー」が海外企業に「活力」を与えた

海外に進出する企業は、さまざまな市場のニーズをより正確に理解し、適応するために、大量の国境を越えたデ...

ディープラーニングを使用して、写真用の強力な画像検索エンジンを構築します

[[412644]]数日前、鮮明に覚えている昔の写真を見返したいと思ったのですが、どこにあるのか全...

「あなたのことを理解します」に向けて:ロボットは「他人の視点から考える」ことができる

「あなたはロボットですか?なぜ私の立場になって考えられないのですか?」人々が争いを抱えるたびに、この...

人工知能が遠隔患者ケアに革命を起こす

パンデミックにより、遠隔患者ケアのための人工知能(AI)の進歩が加速した。医師は、デジタル患者モニタ...

人工知能の現状を理解するための12枚の写真

スタンフォード大学の人間中心の AI 研究所 (HAI) は毎年、人工知能の現状をまとめた膨大なデー...

...

時間畳み込みネットワーク: 時系列の次の革命?

この投稿では、最近の TCN ベースのソリューションをいくつかレビューします。まず、動き検出のケース...

...

人工知能は鉄道の乗客の安全を守ることができるか?

高速鉄道網がますます充実するにつれ、列車は人々が長距離を移動する際に好まれる交通手段となってきました...

...

ドローンによる配達は近づいているが、商業利用にはまだ問題点を解決する必要がある

都市から農村まで、わが国の宅配便や電子商取引企業がドローン物流と配達に注力したことで、国産ドローンの...