自然言語からSQL文を生成!リクルートのAI A3RT「SQL Suggest API」でクエリを作る

このエントリーをはてなブックマークに追加

データベースから任意のデータを引っ張ってくるために必要な、SQL文。

たとえば、





SELECT name FROM member WHERE gender = male;

という命令(クエリ)を出すことで、データを取得します。上記のSQL文を日本語に変換すると「性別が男性である名前をmemberテーブルから取得」となります。

エンジニアであれば、さくっとこなせるかもしれませんが、サービス改善などのPDCAをスピーディーに回すとなると、マーケティング担当者やいわゆるWeb担当者も、扱えるほうがいいに決まってますよね。

ただ、やはりハードルが高いのも事実。

そこで紹介したいのが “日本語の質問文をSQLに変換する” リクルートAI A3RTの『SQL Suggest API』です。

『SQL Suggest API』って?

SQL Suggest APIは、ニューラルネットワークを使った文の生成モデル「Seq2Seq(sequence to sequence)」を応用した技術です。

質問文とSQLの組み合わせを大量に学習させることで、未知の質問文に対するSQLの予測が可能になります。

SQLというとややこしくなりますが、シンプルにSQLを英語に置き換えたとしましょう。

英語の文章をSQL Suggest APIに与えることで、英単語を受け取り、その翻訳に対応する日本語の単語を出力してくれます。

Seq2Seqは系列を入力として系列を出力するので、文章を単語の系列として入力させることで、対応した文章を生成してくれる、ということですね。そして人の言語ではなく、データベース言語に対応したのが『SQL Suggest API』です。

さっそくその実力を試してみます。

日本語の質問文をSQL文に翻訳する

今回は、SQL Suggest APIにデフォルトで用意されている天気のSQL文を返す学習モデルを利用します。

通常、天気情報を取得しようとすると、

  • 時間
  • 場所
  • その他条件

を考慮したSQL文を作る必要があります。

SQL Suggest APIを使えば、条件などを考慮してSQL文に落とし込む必要はなく、シンプルに「今日の東京の天気は?」と質問すれば良いだけです。

レスポンス結果として返ってきたのは、こちら。

{
    "status": 0,
    "message": "ok",
    "sql": "SELECT temperature FROM <schema>.<table> WHERE dt = '<date>' AND location = 'Tokyo';"
}

シンプルな例ですが、これ普通にめちゃくちゃ便利じゃないですか?

以下のような文章も試してみましょう。

30日前の北海道の降水量取りたい

{
    "status": 0,
    "message": "ok",
    "sql": "SELECT precipitation FROM <schema>.<table> WHERE dt = '<date>' AND location = 'Hokkaido';"
}

こちらも適切なSQL文を返してくれています。

今回は天気のSQL文を予測する学習モデルを利用していますが、独自のデータを学習させたモデルを作ることも可能です。
※データサイズ5MB以下、データ行数100行以上、1万行以内の制限あり

SQL文予測は、始まりに過ぎない

SQL Suggest APIは、日本語をSQL文(データベース言語)へ翻訳していますが、ほんの始まりに過ぎません。

もちろん現状の技術と、データベース言語が比較的短い文章で機能するという理由から、SQL Suggest APIがデータベース言語であるSQLにフォーカスしているのはあると思います。

しかし、SQL Suggest APIがチャットボットやGoogle Home、Alexaなど、AI音声アシスタントに組み込まれることを想像してみください。

人間の言葉で直接データベースを操作できてしまうと思うと、ちょっと今までのサービス、システムの形がまた変わりそうな予感がします……!