前言
搜索团队正好需要计算一些词汇的相似性,这个用Word2Vec是很方便的。于是我立马安排算法团队帮个忙弄下。但回头想想,因为这么点事,打断了算法手头的工作,这简直不能忍。
由于我司内部已经在使用基于StreamingPro的Skone平台,通过对SQL做enhance,已经能实现类似hive的脚本引擎了。如果上面的word2vec能直接也用类似sql的语言完成,那开发只要打开web,写几条SQL就自己完成了。
这个时候就给自己定了个目标:简单的算法,研发可以通过这个feature自己完成,尽可能减少对正在做攻关的算法团队的打搅。
使用演示
详细实现代码参看xql-dsl 分支。首先我们需要启动StreamingPro作为一个sql server , csv内容如下: 这个csv文件被映射为表名ct。只有一个字段body。现在我们需要对body字段进行切分,这个也可以通过sql来完成: 新表叫new_ct,现在,可以开始训练了,把new_ct喂给word2vec即可: word2vec表示算法名, 最后,我们注册一个sql函数: 其中w2v_predict是自定义函数名。这样,我们在sql里就可以用这个函数了。我们来用一把: 给一个词,就可以拿到这个词的向量了。 我们把它保存成json格式作为结果: 结果是这样的: [email protected] 最后完整的脚本如下: 大家可以用postman测试: [email protected] NaiveBayes RandomForest GBTRegressor LDA KMeans FPGrowth GBTs LSVM 通过将机器学习算法SQL脚本化,很好的衔接了数据处理和训练,预测。同时服务化很好的解决了环境依赖问题。当然终究是没法取代写代码,但是简单的任务就可以用简单的方式解决了。body
a b c
a d m
j d c
a b c
b b c
select split(body," ") as words from ct as new_ct;
train new_ct as word2vec.`/tmp/w2v_model` where inputCol="words";
/tmp/w2v_model
则表示把训练好的模型放在哪。where 后面是模型参数。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 result as csv.`/tmp/result`;
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`;
支持算法(不断更新)
总结
作者:祝威廉
链接:https://www.jianshu.com/p/70a8febdaf64
共同學習,寫下你的評論
評論加載中...
作者其他優質文章