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






