让AI造福金融,支付宝端到端AI系统SQLFlow实践
SQL 语言除了有非常简洁的优势之外,在数据科学领域,SQL 语言的已有用户量大,并且在不断的增加。这里也有两个统计图,统计了数据科学类任务所使用的工具的流行程度和增长趋势。SQL 语言流行程度排名第三,增量排在第四名。数据科学领域正在更多的使用 SQL 是我们希望使用 SQL 语言描述AI任务的原因。除了在表达能力上 SQL 语言有非常简洁的优势之外,在蚂蚁内 MaxCompute 被广泛使用也是我们选择 SQL 的一个原因。 如何使用SQLFlow SQL语句构建AI任务 SQLFlow 是一个开源项目,您可以在任意环境部署 SQLFlow。SQLFlow 提供了两种用户界面:基于 Jupyter Notebook 的 Web 图形界面和命令行工具。在 Jupyter Notebook 中,输入的 SQL 语句会发送到 SQLFlow server 完成编译和执行。 对于模型训练任务,SQLFlow拓展了标准 SQL 语法,增加了 TO TRAIN 从句来描述模型训练。我们以 iris(鸢尾花)数据集为例,训练数据格式如下图: 训练的 SQL 语句是: SELECT * FROM iris.train TO TRAIN DNNClassifier WITH model.n_classes = 3, model.hidden_units = [10, 20] LABEL class INTO my_dnn_model; 其中 SELECT * FROM iris.train 部分使用一个标准的SQL语句,获取模型训练的数据,这个SQL语句可以是任意的 SELECT 语句,比如包含嵌套、JOIN等操作也是支持的。第二行 TO TRAIN DNNClassifier 指定训练的模型是 DNNClassifier,DNN分类器。第三行 WITH 语句指定了模型训练需要的一些参数。LABEL class 指定使用数据库中的 class 列作为训练标签,INTO my_dnn_model 指定训练好的模型保存的名字。运行这条SQL语句,SQLFlow会开始模型的训练,并保存一个叫做my_dnn_model 的模型用于预测,评估、解释等。 然后我们可以使用下面的这段SQL进行模型评估: SELECT * FROM iris.test TO EVALUATE my_dnn_model WITH validation.metrics="Accuracy" LABEL class INTO iris.evaluate_result; 其中, SELECT * FROM iris.test 指定使用另一个表 iris.test 作为验证集,TO EVALUATE my_dnn_model 指定要评估的模型是我们刚才训练的my_dnn_model,LABEL class 指定评估数据集中的标签列为 class,INTO iris.evaluate_result 指定评估指标的输出表。模型评估任务执行完成之后,就会输出如下图这样的评估指标的表。您也可以在SQL语句中使用 WITH 指定要输出的指标,就会作为结果表的一列数据输出。 在模型训练完成之后,我们可以使用下面的 SQL语句进行预测: SELECT * FROM iris.pred TO PREDICT iris.pred_result.class USING my_dnn_model; 我们使用的预测表 iris.pred 的 class 列是空的,是希望输出的结果。SQL 语句中 TO PREDICT iris.pred_result.class 指定预测结果输出到表 iris.pred_result 的 class 列。USING my_dnn_model 指定使用之前训练的 my_dnn_model 这个模型来预测新的数据,这样 SQLFlow 将预测的结果输出到表:iris.pred_result 的 class 列。 有时,我们希望进一步地了解模型,模型究竟是怎么通过输入得到输出,就需要「解释」训练好的模型,看到底哪些输入会如何影响模型的输出。SQLFlow深度集成了SHAP和Tensorflow的模型解释功能,只需要编写如下的SQL语句: SELECT * FROM iris.test TO EXPLAIN my_dnn_model; 在使用 Jupyter Notebook 的情况下可以输出下面的模型解释结果的图。从图中可以看到,输入数据中的特征 petal_length 对模型判断鸢尾花的类别起到至关重要的帮助。 SQLFlow目前提供了充足的常用模型库,使得我们可以快速使用 SQL 语句实验、验证最终构建 AI Pipeline。目前已经支持的模型包括深度学习常用的网络包括 DNN, RNN, LSTM 的分类、回归,基于XGBoost的树模型的分类回归以及 Deep Embedding Clustring,kmeans聚类模型,还有常见的金融行业模型包括评分卡模型,ARIMA, STL时间序列模型等。 使用SQL程序构建端到端AI工作流 SQLFlow 不仅可以使用SQL语句完成 AI 应用中的模型训练,评估,预测,解释等单个任务,还可以将一整个SQL 程序(包含许多SQL语句的一个SQL程序)编译成为一个完整的工作流任务执行。在之前列出的「构建AI应用的常见流程」中,SQLFlow已经支持和计划支持的步骤标注在了图中。 其中绿色标注的是目前 SQLFlow 已经支持的。SQLFlow 可以支持多种 SQL 引擎的方言,包括MySQL, Hive, MaxCompute,并在逐步扩展。不论 SQLFlow 对接的是哪种数据库引擎,只要是当前对接的数据库支持的 SQL 语句,都可以被SQLFlow识别并发送至对应引擎执行,以此来支持使用SQL语言完成的数据抽取、预处理的工作。SQLFlow还计划使用 TO RUN 关键字来拓展自定义数据预处理、特征工程的能力。SQLFlow在训练时可以支持可选的 COLUMN 从句,将支持多种常见的数据转换的操作,比如归一化、随机化、Embedding、分桶等。另外,SQLFlow 也计划支持可以直接将训练好的模型部署到在线 Serving 的系统。 这样,我们可以编写一大段 SQL 语句,完全交给SQLFlow 编译和执行。包括使用JOIN操作的SQL语句,从各个表抽取需要的数据,使用标准SQL完成预处理或者使用自定义函数完成预处理,最后开始训练和预测的 SQL 语句。 (编辑:应用网_阳江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |