原創|行業資訊|編輯:陳俊吉|2017-11-16 10:39:18.000|閱讀 381 次
概述:人腦具備不斷積累經驗的能力,依賴經驗我們便具備了分析處理的能力,比如我們要去菜場挑一個西瓜,別人或者自己的經驗告訴我們色澤青綠、根蒂蜷縮、紋路清晰、敲聲渾響的西瓜比較好吃。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
人腦具備不斷積累經驗的能力,依賴經驗我們便具備了的能力,比如我們要去菜場挑一個西瓜,別人或者自己的經驗告訴我們色澤青綠、根蒂蜷縮、紋路清晰、敲聲渾響的西瓜比較好吃。
我們具備這樣的能力,那么機器呢?機器不是只接收指令,處理指令嗎?和人腦類似,可以喂給機器歷史數據,機器依賴建模算法生成模型,根據模型便可以處新的數據得到未知屬性。以下便是機器學習與人腦歸納經驗的類別圖:
在同程內部,我們對應用的一些團隊做了了解,發現他們普遍的處理步驟如下:
這個過程中存在一些痛點:
因此我們覺得可以構建一套平臺化的產品直接對線上數據進行建模實驗,節省機器學習的開發成本,降低機器學習的應用門檻。
在算法庫方面,我們選擇了 Spark,相比于 R 或者 Python,Spark 具備分布式計算的能力,更高效。
ml 和 mllib 都是 Spark 中的機器學習庫,目前常用的機器學習功能兩個個庫都能滿足需求。ml 主要操作的是 DataFrame,相比于 mllib 在 RDD 提供的基礎操作,ml 在 DataFrame 上的抽象級別更高,數據和操作耦合度更低。
ml 提供 pipeline,和 Python 的 sklearn 一樣,可以把很多操作 (算法 / 特征提取 / 特征轉換) 以管道的形式串起來,對于任務組合非常便利,如 StringToIndexer、IndexerToString、VectorAssembler 等。
從架構設計上來說,不管是算法單元、特征工程單元、評估單元或者其他工具單元,我們認為都可以以組件的形式來設計。借助通用的接口行為以及不同的實現可以達到松耦合、易擴展的目的。
上圖是整個設計類圖的一部分,實際上我們做了較多層次的抽象以及公用代碼。下面看看核心類 BaseTask:
run 方法的實現是一套模板,步驟如下:
每個組件只要實現自己的核心邏輯 execute 方法就可以了。
基于上述的設計目標,機器學習平臺第一個版本的架構如下:
流程 & 評估視圖
第一個版本我們并沒有提供太多的算法組件,只有線性回歸和邏輯回歸,但是基于組件化的思想,我們非常有信心在后期快速迭代。
除了算法較少外,結合業務反饋與自身思考。我們覺得機器學習平臺可以做更多的事:
第二個版本中,我們首先基于原有的設計框架擴充完善了相關實用組件:
同時在第二個版本中,我們在細節上又做了一些完善:
離線計算
我們提供了‘字段落地’的工具組件,可以將預測結果以 csv 的格式落入 hdfs 中:
周期性調度 & 宏變量支持
我們的另一款產品:大數據開發套件(BDK),函蓋周期性調度的功能,機器學習平臺的建模實驗可以以子任務的形式嵌入其中,結合宏變量(某種規則的語法替換,例如’/%Y/%m/%d’可以表示為當前天等等)用戶可以在我們的平臺中托管他們的建模試驗,從而達到周期性離線計算的目的。
架構
綜上,豐富組件及完善功能、離線計算結果落地、結合 BDK 進行周期性離線計算是我們平臺第二個版本主要關注的,具體架構有了以下演進:
實時預測
在我們的平臺中可以通過建模實驗訓練模型,模型可以通過 PMML 這樣的標準導出,同樣也可以通過我們的模型導出功能將模型以 parquet 格式保存在 Hdfs 相應的目錄上。用戶可以得到這些模型標準,自己去實現一些功能。但是我們覺得實時預測的功能在我們平臺上也可以抽象出來。于是 3.0 的架構中我們開發了提供實時預測服務的 tcscoring 系統:
tcscoring 系統的依賴介質就是模型的 PMML 文件,用戶可以在機器學習平臺上直接部署訓練完成了的模型對應的 PMML 文件,或者通過其他路徑生成的 PMML 文件。部署成功后會返回用于預測的 rest 接口供業務使用:
當然,PMML 的部署也可以結合 BDK 設置成周期性調度,這些結合模型的周期性訓練,整個訓練 + 預測的過程都可以交給機器學習平臺 +BDK 實現托管。
交叉驗證
在機器學習平臺的第三個版本中,我們還有個關注點就是交叉驗證,之前的版本中用戶一次只能實驗一組超參數,有了交叉驗證,用戶便可以在一次實驗中配置多組超參數,在訓練集中在按比例進行循環拆分,一部分訓練,一部分驗證,從而得到最優模型:
迭代完 3 個版本后,機器學習平臺抽象出了很多通用的東西,但是還有一些個性化的東西沒有辦法很好地變現。我們的想法是對于用戶來說,最好的個性化途徑就是讓用戶自己寫代碼,我們會嘗試開放接口自定義插件,同時利用動態編譯技術加載這些個性化的組件,融合進建模流程中。
我們目前也在嘗試融合 spark ml 之外的算法包,如使用度較廣的 xgboost 等。另一方面目前的算法還是基于傳統的機器學習算法,對于深度學習,不管是嵌入 tensorflow 還是使用一些第三方的深度學習庫,如 Deeplearning4j 等。我們接下來會嘗試融合這些 spark ml 之外的算法包。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn