SQL脚本实现算法模型的训练,预测

前言

搜索团队正好需要计算一些词汇的相似性,这个用Word2Vec是很方便的。于是我立马安排算法团队帮个忙弄下。但回头想想,因为这么点事,打断了算法手头的工作,这简直不能忍。

由于我司内部已经在使用基于StreamingPro的Skone平台,通过对SQL做enhance,已经能实现类似hive的脚本引擎了。如果上面的word2vec能直接也用类似sql的语言完成,那开发只要打开web,写几条SQL就自己完成了。

这个时候就给自己定了个目标:简单的算法,研发可以通过这个feature自己完成,尽可能减少对正在做攻关的算法团队的打搅。

使用演示

详细实现代码参看xql-dsl 分支。首先我们需要启动StreamingPro作为一个sql server ,如何启动 现在你可以通过rest接口提交SQL脚本给该服务了。

首先,我们加载一个csv文件:

load csv.`/tmp/test.csv` options header="True" as ct;

csv内容如下:

body
a b c
a d m
j d c
a b c
b b c

这个csv文件被映射为表名ct。只有一个字段body。现在我们需要对body字段进行切分,这个也可以通过sql来完成:

select split(body," ") as words from ct as new_ct;

新表叫new_ct,现在,可以开始训练了,把new_ct喂给word2vec即可:

train new_ct as word2vec.`/tmp/w2v_model` where inputCol="words";

word2vec表示算法名, /tmp/w2v_model 则表示把训练好的模型放在哪。where 后面是模型参数。

最后,我们注册一个sql函数:

register word2vec.`/tmp/w2v_model` as w2v_predict;

其中w2v_predict是自定义函数名。这样,我们在sql里就可以用这个函数了。我们来用一把:

select words[0] as w, w2v_predict(words[0]) as v from new_ct as result;

给一个词,就可以拿到这个词的向量了。

我们把它保存成json格式作为结果:

save result as csv.`/tmp/result`;

结果是这样的:

WX20180113-131009@2x.png

最后完整的脚本如下:

load csv.`/tmp/test.csv` options header="True" as ct;
select split(body," ") as words from ct as new_ct;
train new_ct as word2vec.`/tmp/w2v_model` where inputCol="words";
register word2vec.`/tmp/w2v_model` as w2v_predict;
select words[0] as w, w2v_predict(words[0]) as v from new_ct as result;
save overwrite result as json.`/tmp/result`;

大家可以用postman测试:

WX20180113-131211@2x.png

支持算法(不断更新)

  • NaiveBayes
  • RandomForest
  • GBTRegressor
  • LDA
  • KMeans
  • FPGrowth
  • GBTs
  • LSVM

总结

通过将机器学习算法SQL脚本化,很好的衔接了数据处理和训练,预测。同时服务化很好的解决了环境依赖问题。当然终究是没法取代写代码,但是简单的任务就可以用简单的方式解决了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏瓜大三哥

VS2详细设计(二)

DVIIN1_CLK为输入视频源的随路时钟,用于检测分辨率的时钟,行分辨率的检测从视频源的数据有效信号DVIIN1_DE的上升沿开始计数,直到DVIIN1_DE...

1103
来自专栏算法+

pytorch 移动端框架 thnets 附c示例代码

前年年前做一个手机移动端图像识别项目的时候, 先后尝试了mxnet,thnets,caffe,tensorflow. 当时的情况是,mxnet内存管理奇差,内存...

4867
来自专栏人工智能头条

实战:从0搭建完整 AI 开发环境写出第一个 AI 应用

那么,作为多年的程序员,或者准备着成为新一代程序员的读者们,该如何为智能时代做好准备,成为 AI 时代的程序员呢?

3995
来自专栏CreateAMind

ROS探索总结(十一)——机器视觉

机器视觉在计算机时代已经越来越流行,摄像头价格越来越低廉,部分集成深度传感器的混合型传感器也逐渐在研究领域普及,例如微软推出的Kinect,而且...

1862
来自专栏CSDN技术头条

机器学习算法线上部署方法

我们经常会碰到一个问题:用了复杂的GBDT或者xgboost大大提升了模型效果,可是在上线的时候又犯难了,工程师说这个模型太复杂了,我没法上线,满足不了工程的要...

63210
来自专栏人工智能头条

图解TensorFlow架构与设计

8786
来自专栏机器之心

学界 | 中科院计算所开源Easy Machine Learning:让机器学习应用开发简单快捷

选自Github 机器之心编译 今日,中科院计算所研究员徐君在微博上宣布「中科院计算所开源了 Easy Machine Learning 系统,其通过交互式图...

3295
来自专栏媒矿工厂

Ittiam优化VP9,turnaround时间大幅减少

libvpx是Google开发的视频编解码器VP8和VP9的开源软件实现库。libvpx中包含了VP9视频编码算法,相比H.264/AVC,在高...

3155
来自专栏CSDN技术头条

NNabla:索尼开源的一款神经网络框架

NNabla是一款用于研究、开发和生产的深度学习框架。NNabla的目标是要能在台式电脑、HPC集群、嵌入式设备和生产服务器上都能运行。 安装 安装NNabla...

2236
来自专栏编程

基于Python的人脸识别库,离线识别率高达99.38%!

-欢迎 原文该项目是要构建一款免费、开源、实时、离线的网络 app,支持组织者使用人脸识别技术或二维码识别所有受邀人员。有了世界上最简单的人脸识别库,使用 Py...

2908

扫码关注云+社区

领取腾讯云代金券