データベースから任意のデータを引っ張ってくるために必要な、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音声アシスタントに組み込まれることを想像してみください。
人間の言葉で直接データベースを操作できてしまうと思うと、ちょっと今までのサービス、システムの形がまた変わりそうな予感がします……!