如何將SQL語句進行自動翻譯

如何將SQL語句進行自動翻譯

這裏我們利用SQL-to-Text Generation with Graph-to-Sequence Model一文, 給大家簡單介紹一下如何對SQL語句進行自動翻譯

首先我們來談談這個動機, 我覺得最大的動機可能是爲了讓非技術人員可以瞭解SQL語句的意義, 進而提出來一種解決方案, 對SQL語句進行自動化的翻譯.

說到自動化翻譯, 其實就是自然語言處理方面的問題了, 那麼之前就有人做過類似的工作, 比如使用規則, 或者模板進行嚴格形式的翻譯

Georgia Koutrika, Alkis Simitsis, and Yannis E Ioannidis. 2010. Explaining structured queries in natural language. In Data Engineering (ICDE), 2010 IEEE 26th International Conference on, pages 333–344. IEEE

利用規則的翻譯很顯然是十分僵硬的, 也就是說, 翻譯出來的東西不流暢, 不想自然語言, 那麼在神經網絡盛行的今天, 很快就有人提出了, 直接使用Seq2Seq模型來進行翻譯, 這個Seq就是Sequence, 序列的意思, 或者Tree2Seq的模型, 我們用RNN或者LSTM可以對語言進行編碼, 序列化, 然後再用一個RNN或者LSTM進行解碼, 得到翻譯結果, 當然這是最簡單的編碼解碼的框架, 實際上可能複雜一點.

但是, 由於序列並不能很好的說明一些內部的結構信息, 舉個例子

SELECT company WHERE assets > val0 AND sales > val0 AND industry_rank <= val2 AND revenue = val3

翻譯:
which company has both the market value and assets higher than val0, ranking in top val2 and revenue of val3

如果是序列的話, 很有可能就翻譯不出both the market value and assets higher than val0, 要察覺相同的作用的詞在一個序列中其實是困難的, 而如果我們先轉換成圖結構, 那就簡單多了.

圖結構

故, 給出這麼一個框架:

  • 首先, 我們有SQL語句, 作爲輸入
  • 將SQL語句轉換成一個有向圖
  • 再通過Graph2Seq模型, 將有向圖翻譯出來
    • 利用每個點的k跳個鄰居節點進行點嵌入的編碼
    • 利用所有點的點嵌入生成全局的嵌入
    • 利用全局嵌入進行解碼得到最後的翻譯結果

下面我們講講如何進行有向圖的轉換

有向圖的轉換

將SQL語句轉換成有向圖其實十分簡單, 我們關注於兩個句法:

  • SELECT句法
    我們將爲SELECT a這樣的句子, 創建一個SELECT節點和一個a節點, 注意到每一個節點都是有一個文本屬性, 我們直接將其文本屬性賦值爲其名字. 注意到可能會有一些聚集選項, 比如你可能是COUNT, MAX這樣的, 我們直接創建一個節點連上相應的列節點, 文本屬性爲相應的聚集名稱.

  • WHERE句法
    WHERE可能有很多條件, 如上圖所示, 我們將創建許多個條件節點, 然後用AND, OR, NOT這樣的邏輯節點來進行連接, 最終全部都連到SELECT節點上.

這裏的Graph2Seq模型參考自Kun Xu, Lingfei Wu, Zhiguo Wang, and VadimSheinin. 2018. Graph2seq: Graph to sequence learning with attention-based neural networks. arXiv preprint arXiv:1804.00823

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章