導讀:Alink是基於Flink流批一體的機器學習平台,提供一系列算法,可以幫助處理各種機器學習任務,比如統計分析、機器學習、實時預測、個性化推薦和異常檢測。除了提供Java API也提供了PyAlink,可以輕松部署到單機及集群環境,通過Jupyter、Zepplin等notebook使用。Alink已在阿里巴巴內部支持了眾多的應用場景,並在2019年11月的Flink Forward Asia大會上宣布開源,隨后不斷迭代發布新的版本,增強功能,提升易用性。
本文主要介紹基於Flink平台的機器算法的功能、性能與使用實踐,幫助大家快速上手Alink機器學習平台。其中重點介紹了python語言使用的PyAlink的方法和實例,同時對FM算法進行了詳細的介紹,幫助大家更好上手Alink並在實際工作中得到廣泛應用。
主要圍繞下面倆點展開:
-
Alink基本介紹
-
ALink快速入門
01Alink基本介紹
首先跟大家介紹一下Alink的基本情況:
1. 什么是Alink?
Alink是由阿里計算平台事業部研發的基於Flink的機器學習算法平台,名稱由Alibaba Algorithm AI Flink Blink 單詞的公共部分組成。
Alink提供了豐富的算法庫並天然可以支持批式和流式的處理,幫助數據分析和應用開發人員完成從數據處理、特征工程、模型訓練、預測多節點端到端整體流程。
Alink提供Java API和Python API兩種方式進行調用,Java API方便工程人員快速將Alink接入到現有系統中,Python API也叫PyAlink是方便提供機器學習同學完成快速的實驗。
2. Alink功能介紹
Alink作為一個重要的機器學習的平台,覆蓋機器學習各階段13大類的62項功能點,囊括了機器學習核心的分類算法、聚類算法、回歸算法三類算法,並附帶了4項模型評估的方法,同時還包括關聯規則和協同過濾算法、相似度算法等數據挖掘方面算法。
-
在算法完成部分后,也提供了評估模型的評估方法,包括二分類評估、多分類評估、回歸評估、聚類評估。
-
在算法應用之前Alink為使用者准備了數據預處理、異常檢查、文本處理等輔助功能處理工具。
-
在在線學習方面Alink也准備了FTRL,可以在線狀態中訓練,在實時場景中提供模型實時更新機制,增強學習模型調整等時效性。
-
在機器學習中的模型選擇與調試參數服務,為大家提供有效的參數調優。
3. Alink性能比對
利用加速比對Alink與Sparkml進行性能評測。具體的測試方法是使用相同的測試數據,相同的參數,用Sparkml的計算時間除以Alink的計算時間。從下圖實際測試對比數據可知,Alink在大部分算法性能優於Spark,個別算法性能比Spark弱,整體是一個相當的水平。
4. Alink建設進展
2019年7月發布Alink version 1.2.0:
-
支持Flink多版本 1.11、1.10、1.09;
-
支持多忘記系統:本地文件系統,Hadoop文件系統,阿里雲oss文件系統;
-
CSV格式讀取、導出組件支持各文件系統;
-
推出AK格式讀取、導出組件,簡化文件數據操作;
-
支持模型信息摘要、輸出;
-
FM分類、回歸算法;
2019年6月發布Alink version 1.1.2:
-
新增30個數據格式轉化組件;
-
支持多版本Hive數據源;
-
在Pipline和LocalPredictor中指出SQL Select操作;
2019年4月發布Alink version 1.1.1:
-
提升使用體驗,參數檢查方面更加智能;
2019年2月發布Alink version 1.1.0:
-
支持Flink1.1.0和Flink1.9的平台部署問題,PyAlink增加兼容PyFlink的功能;
-
改進UDF/UDTF功能;
-
支持JAVA Maven安裝和 Python PyPl安裝;
-
支持多版本的Kafka數據源;
2018年12月發布Alink version 1.0.1:
-
重點解決windows系統上的安裝問題。
2018年11月首次發布Alink version 1.0,在Flink Forword Aisa大會上開源。
02Alink快速入門
接下來為大家詳細的介紹Alink的使用方式:
1. 使用Maven構建Alink項目簡介
Java使用者借助Maven中央倉庫,大家只需要4步就可以很容易的構建出Alink項目。第一步:創建項目;第二步:修改pom文件,導入Alink項目jar包;第三步:拷貝修改Alink Java Demo Code;第四步:構建運行;
詳細過程可以參考:
http://zhuanlan.zhilu.com/p/110059114
2. PyAlink安裝實踐
Python使用者借助PyPl,也可以兩部構建Alink的使用環境。第一步,針對不同操作系統調整部署環境,包括MacOS、Windows、阿里雲服務器。第二步,從PyPl選擇最新版本的PyAlink安裝,如果之前有PyAlink需要先卸載舊版本,再通過PyPl進行安裝。
① PyAlink任務在notebook上運行
PyAlink的運行方式分為兩種,一種是本地運行,一種是集群運行;在Alink1.1.1以后優化了運行集群運行地址指定的方式,用戶可以更簡潔的運行PyAlink的任務。
② 基於PyFlink的Alink
Alink Operator與PyFlink Table可以相互轉化,方便串聯Flink和Alink的工作流。在1.1.1新版本中還提供了getMLEnv接口,能直接使用flink的提交運行方式直接進行提交 run -py *.py 往集群提交作業。例如:直接使用 python keans.py 。
③ PyAlink使用體驗的改進
為方便的使用PyAlink,最新版本也對於兩個方面進行了優化。一個是Python UDF運行中將自動檢測python3命令,確定運行版本。另一個優化是對DataFrame和BatchOperator互轉性能做了提升,優化后性能提升了80%左右;對collectToDataFrame進行了同樣的優化。
3. Alink支持的數據源
Alink支持批式和流式5種類型的數據源,其中批式數據源包括文件數據源、Hive、Mysql、內存數據;流式數據源主要是針對Kafka。
① 讀寫Kafka示例
以邏輯回歸模型為例使用Kafka分為四步:第一步定義Kafka數據源;第二步使用json提取組件解析Kafka中的數據,完成數據類型轉換;第三步加載邏輯回歸模型,對流數據進行預測;第四步將預測結果再次寫出到Kafka。
② 將JSON格式的字符串解析為多列
Alink也針對json格式的數據進行手機游戲買賣地圖解析組件JsonToColumnsStreamOp,比json_parser更方便的處理json格式到表格字段列格式的數據轉化。
③ 日志的字符串解析為多列
在PyPlink中可以通過分布方式進行處理,先處理【】括號內的數據,再處理CSV格式的數據,PyPlink提供了select選擇組件和link管道組件。
④ Alink類型轉換組件
Alink框架中常用Columns、Vector、Triple等類型的數據作為算法的輸入輸出,但用戶可能會有多種輸入輸出數據類型的需求。因此Alink提供了全面的類型轉換組件,作為銜接使用戶數據與Alink算法數據的橋梁。
Alink共支持Tripile、CSV、JSON、KV、Columns、Vector等6種類型的數據兩兩相互轉換。
批組件中,Alink實現了6種類型的數據兩兩相互轉換的全部30個組件;流組件中,實現了除Triple作為輸入外的共25個組件。
Alink對於眾多的組件使用有一些組件命名規律,組件命名格式參考:原始格式A To 目標格式【流式|批式】Op(),例如:TripleToJsonBatchOp()可以通過批式處理將Trip類型的數據轉化為Json格式的數據。
在數據相互轉化時,輸入類型和輸出類型具有特定的參數。輸入對應參數即可對組件進行配置。大家可以看到這樣的轉化規律性是非常強的,使得大家對於格式轉化的工作變的更加輕松。
⑤ 優化枚舉類型參數
在實際開發過中,Alink結合Java開發IDE編輯器的自動提示功能,為選擇器提供了參數聯想選擇的提示功能。
方便開發者對於模型參數的調整,避免參數過多,反復查手冊的情況。
對於數量列名稱的優化,也有針對原始數據的優化,針對錯位列名也提供錯誤提示功能。
對於開發的開發速度和開發質量的幫助。
4. 統一的文件系統操作介紹
Alink提供了統一的文件系統操作接口,為開發者屏蔽掉對接各類文件系統的繁瑣差異。無論是本地文件系統、hadoop、雲存儲的oss相同功能都可以使用相同名稱的接口獲得相同的調用意圖和返回結果。
在確定文件的位置后,獲取到文件的輸入流輸出流,提供文件拷貝、保存、讀取功能的完備性。
在針對不同環境的文件系統構造實例是需要進行特定配置后,就可以利用統一的文件操作,使用標准化接口完成。
5. 數據文件
了解統一文件對象創建和操作接口后,我們看一下一個實際CSV文件的操作轉化實例。構建一個基於httpl網址數據文件,針對實際的處理過程是創建文件操作實例,使用數據格式轉化組件CSVSrouceBatchOp完成數據schema的構建,完成批次文件的處理操作執行。輸出執行后的文件內容並通過內容計數來驗證文件在轉化過程中內容。
統一文件系統代帶來的好處,通過一樣的代碼完成各環境中的數據處理邏輯。
6. FM算法
Alink在處理大規模稀疏數據場景,提供具有線性計算復雜度的FM算法。針對線性模型的特點,最大的特征是每個函數有一個特征,並且這個特征跟整體函數關系有一個權重。為解決線性模型的表達力,也可以組織一個二階多項模型來增強線性模型對於復雜度的描述能力。
在二階模型中參數更豐富,效果更好的代價是權重矩陣wij將是一個1/2 N方的計算復雜度,當特征增加時,維度也將隨之增大,造成實際計算中計算力的不足。
因子分解機將是一個較好的折中,在分解機中,每個特征對應着一個向量,向量的權重就是兩個向量的內積。一個向量取幾十維或者上百維,一般就是取一百維,權重系數就是100xn,計算更可控。模型所帶來的計算量就可以帶來更好的計算效果和更合理的計算代價。