Socherの自然文の問合せをSQLに変換する論文を読む
テニス2時間 英語できず
(1) Socherの自然言語の問合せをSQLに変換する論文を読む
「Seq2SQL: Generating Structured Queries from Natural Language using Reinforcement Learning」
https://einstein.ai/static/images/layouts/research/seq2sql/seq2sql.pdf
現在SNSで話題になっている自然言語の問合せをSQLに変換するモデルです。
翻訳モデルとしてseq2seqが有名でしたが、これはRNNで適当に人間が解釈できる言葉に変換していたに過ぎません。しかし本モデルは計算機を動かすSQL文の生成モデルなので曖昧性が許されません。
(1.1) 手法
そこで曖昧性を排除するために2つのモデルと知識ベースを導入して達成しています。
・Augment Pointer Network
曖昧性の除去のため、どの様なDataBaseを対象にしているかを反映した次の様なベクトルを作って学習させています。
[検索対象になるテーブルのカラム、SQL文、自然言語の問合せ文」
この様な学習用のベクトルが必要なため、膨大な知識ベースを構築しています。
例えば次の様なQuestionには学習用のベクトルは次となります。
[<col>pick,CFL Team,Player,Position,Collage;<sql>SELECT COUN..;<quesiton> How many CFL teams are from College]
学習用ベクトルから分る様に完全な教師付モデルになっています。
この学習用ベクトルを入力として
Encode(BiLSTM 2層) → Decode(LSTM 2層)
で学習用ベクトルにあるSQL文を教師データとして下記のseq2SQLでネットワークの重みを学習させています。
・seq2SQL
これは上記のAugment Point Nettworkの学習結果を次の種類別に最適なSQL語を選択しています。
集約種類(Aggregation) 数 最大 最小 検索の種類の判断
カラム選択(Select) テーブルのカラム名の選択
条件(where) 検索条件文の作成
ここで注意すべきは、集約種類とカラム選択は完全な教師付モデルとして
入力文とSQL語との相互情報量が低減する様にencoder-decoderの重みを調整しています。
しかし条件は入力文とSQL語の対応関係では律し得ない表現があるので、検索後の結果の一致度合いを報酬として強化学習も導入しています。
・知識ベースWikiSQL
学習用のベクトルを作成するため、膨大な学習用の知識ベースを作成していることがわかります。
問合せ文は、空白があるテンプレートを用意して空白は計算機が埋める方法で大量に生成させています。これが自然文になっているかは人手で検査しています。
(1.2) 結果
普通のseq2seqによるSQL文の生成結果比較です。
ここで
は検索結果が一致
は生成文が正しい
Devはパラーメータ・調整後の試験を示す
(1.3) 感想
・複雑な自然言語の問合せ成功例が記述されていないので、どれだけ柔軟な問合せが
可能か明瞭でない。
・大規模な学習用データWikiSQLを構築して初めて成功した。
今までNLP→SQLモデルが成功しなかったのは、大規模な学習用データを
構築できなかったからと考えられる。
この点wikiSQLはクラウド・フアンディングで資金を調達して構築している。
・これだけの知識ベースを使っても成功率は50%程度しか達成していない。
この辺の理由が明確でない。