SQL腳本實(shí)現(xiàn)算法模型的訓(xùn)練,預(yù)測(cè)

前言

搜索團(tuán)隊(duì)正好需要計(jì)算一些詞匯的相似性,這個(gè)用Word2Vec是很方便的。于是我立馬安排算法團(tuán)隊(duì)幫個(gè)忙弄下。但回頭想想,因?yàn)檫@么點(diǎn)事,打斷了算法手頭的工作,這簡(jiǎn)直不能忍。

由于我司內(nèi)部已經(jīng)在使用基于StreamingPro的Skone平臺(tái),通過(guò)對(duì)SQL做enhance,已經(jīng)能實(shí)現(xiàn)類似hive的腳本引擎了。如果上面的word2vec能直接也用類似sql的語(yǔ)言完成,那開發(fā)只要打開web,寫幾條SQL就自己完成了。

這個(gè)時(shí)候就給自己定了個(gè)目標(biāo):簡(jiǎn)單的算法,研發(fā)可以通過(guò)這個(gè)feature自己完成,盡可能減少對(duì)正在做攻關(guān)的算法團(tuán)隊(duì)的打攪。

使用演示

詳細(xì)實(shí)現(xiàn)代碼參看xql-dsl 分支。首先我們需要啟動(dòng)StreamingPro作為一個(gè)sql server ,如何啟動(dòng)
現(xiàn)在你可以通過(guò)rest接口提交SQL腳本給該服務(wù)了。

首先,我們加載一個(gè)csv文件:

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

csv內(nèi)容如下:

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

這個(gè)csv文件被映射為表名ct。只有一個(gè)字段body。現(xiàn)在我們需要對(duì)body字段進(jìn)行切分,這個(gè)也可以通過(guò)sql來(lái)完成:

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

新表叫new_ct,現(xiàn)在,可以開始訓(xùn)練了,把new_ct喂給word2vec即可:

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

word2vec表示算法名, /tmp/w2v_model 則表示把訓(xùn)練好的模型放在哪。where 后面是模型參數(shù)。

最后,我們注冊(cè)一個(gè)sql函數(shù):

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

其中w2v_predict是自定義函數(shù)名。這樣,我們?cè)趕ql里就可以用這個(gè)函數(shù)了。我們來(lái)用一把:

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

給一個(gè)詞,就可以拿到這個(gè)詞的向量了。

我們把它保存成json格式作為結(jié)果:

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

結(jié)果是這樣的:
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測(cè)試:


WX20180113-131211@2x.png

支持算法(不斷更新)

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

總結(jié)

通過(guò)將機(jī)器學(xué)習(xí)算法SQL腳本化,很好的銜接了數(shù)據(jù)處理和訓(xùn)練,預(yù)測(cè)。同時(shí)服務(wù)化很好的解決了環(huán)境依賴問(wèn)題。當(dāng)然終究是沒(méi)法取代寫代碼,但是簡(jiǎn)單的任務(wù)就可以用簡(jiǎn)單的方式解決了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容