螞蟻金服開源機(jī)器學(xué)習(xí)工具SQLFlow,機(jī)器學(xué)習(xí)比SQL還簡單
5月6日,螞蟻金服副 CTO 胡喜正式宣布開源機(jī)器學(xué)習(xí)工具 SQLFlow:“未來三年,AI 能力會(huì)成為每一位技術(shù)人員的基本能力。我們希望通過開源 SQLFlow,降低人工智能應(yīng)用的技術(shù)門檻,讓技術(shù)人員調(diào)用 AI 像 SQL 一樣簡單。”
目前,SQLFlow已經(jīng)在GitHub上獲得1636個(gè)Star,236個(gè)Fork。(GitHub地址:https://github.com/sql-machine-learning/sqlflow)
SQLFlow 的目標(biāo)是將 SQL 引擎和 AI 引擎連接起來,讓用戶僅需幾行 SQL 代碼就能描述整個(gè)應(yīng)用或者產(chǎn)品背后的數(shù)據(jù)流和 AI 構(gòu)造。其中所涉及的 SQL 引擎包括 MySQL、Oracle、Hive、SparkSQL、Flink 等支持用 SQL 或其某個(gè)變種語言描述數(shù)據(jù),以及描述對(duì)數(shù)據(jù)的操作的系統(tǒng)。而這里所指的 AI 引擎包括 TensorFlow、PyTorch 等深度學(xué)習(xí)系統(tǒng),也包括 XGBoost、LibLinear、LibSVM 等傳統(tǒng)機(jī)器學(xué)習(xí)系統(tǒng)。
從 SQL 到機(jī)器學(xué)習(xí)
SQLFlow 可以看作一個(gè)翻譯器,它把擴(kuò)展語法的 SQL 程序翻譯成一個(gè)被稱為 submitter 的程序,然后執(zhí)行。 SQLFlow 提供一個(gè)抽象層,把各種 SQL 引擎抽象成一樣的。SQLFlow 還提供一個(gè)可擴(kuò)展的機(jī)制,使得大家可以插入各種翻譯機(jī)制,得到基于不同 AI 引擎的 submitter 程序。
SQLFlow 對(duì) SQL 語法的擴(kuò)展意圖很簡單:在 SELECT 語句后面,加上一個(gè)擴(kuò)展語法的 TRAIN 從句,即可實(shí)現(xiàn) AI 模型的訓(xùn)練?;蛘呒由弦粋€(gè) PREDICT 從句即可實(shí)現(xiàn)用現(xiàn)有模型做預(yù)測(cè)。這樣的設(shè)計(jì)大大簡化了數(shù)據(jù)分析師的學(xué)習(xí)路徑。
此外,SQLFlow 也提供一些基本功能,可以供各種 submitter 翻譯插件使用,用來根據(jù)數(shù)據(jù)的特點(diǎn),推導(dǎo)如何自動(dòng)地把數(shù)據(jù)轉(zhuǎn)換成 features。這樣用戶就不需要在 TRAIN 從句里描述這個(gè)轉(zhuǎn)換。
以上這些設(shè)計(jì)意圖在 SQLFlow 的開源代碼中都有體現(xiàn)。當(dāng)然,SQLFlow 開發(fā)時(shí)間還比較短,仍然存在很多做的不夠細(xì)致的地方。螞蟻金服將其開源的另一個(gè)目的,就是希望能夠和各個(gè) SQL 引擎團(tuán)隊(duì)和各個(gè) AI 團(tuán)隊(duì)一起打造這座橫跨數(shù)據(jù)和 AI 的橋梁。
以下是使用樣本數(shù)據(jù)Iris.train 訓(xùn)練Tensorflow DNNClassifer模型,并使用訓(xùn)練模型運(yùn)行預(yù)測(cè)的示例。你可以看到使用SQL編寫一些優(yōu)雅的ML代碼有多酷:
- sqlflow> SELECT *
 - FROM iris.train
 - TRAIN DNNClassifier
 - WITH n_classes = 3, hidden_units = [10, 20]
 - COLUMN sepal_length, sepal_width, petal_length, petal_width
 - LABEL class
 - INTO sqlflow_models.my_dnn_model;
 - ...
 - Training set accuracy: 0.96721
 - Done training
 
- sqlflow> SELECT *
 - FROM iris.test
 - PREDICT iris.predict.class
 - USING sqlflow_models.my_dnn_model;
 - ...
 - Done predicting. Predict table : iris.predict
 - ...
 - Training set accuracy: 0.96721
 - Done training
 
 
 
 
 

















 
 









 