
Java開(kāi)發(fā)機(jī)器學(xué)習(xí)庫(kù)Tribuo
學(xué)習(xí)庫(kù)提供了分類、回歸、聚類、模型開(kāi)發(fā)等的工具,也為許多流行的第三方機(jī)器學(xué)習(xí)庫(kù)提供了統(tǒng)一的接口。使用Tribuo從其他系統(tǒng)和語(yǔ)言部署模型很方便,它提供了指向ONNX Runtime、TensorFlow和XGBoost的接口。其中,對(duì)onnx模型的支持允許在Java中部署一些Python軟件包(例如pytorch)訓(xùn)練的模型。
Oracle提到,他們這些年來(lái)致力于將機(jī)器學(xué)習(xí)模型部署到大規(guī)模的生產(chǎn)系統(tǒng)中。在這個(gè)過(guò)程中,他們發(fā)現(xiàn),企業(yè)的期望往往與現(xiàn)有的機(jī)器學(xué)習(xí)庫(kù)提供的功能之間存在著鴻溝。
舉個(gè)例子,大型的軟件系統(tǒng)通常希望可以使用可自我描述的構(gòu)造塊,并可以判斷何時(shí)的輸入與輸出是無(wú)效的。然而大多數(shù)機(jī)器學(xué)習(xí)庫(kù)仍然依靠一堆浮點(diǎn)數(shù)組來(lái)訓(xùn)練模型。在部署時(shí),輸入是一個(gè)浮點(diǎn)數(shù)組,并且產(chǎn)生另一個(gè)浮點(diǎn)數(shù)組作為預(yù)測(cè)輸出。關(guān)于這些數(shù)組中任何一個(gè)的含義,或輸入/輸出浮點(diǎn)數(shù)應(yīng)該是什么樣的描述,都留給Wiki和錯(cuò)誤跟蹤器,或被寫為代碼注釋。Oracle指出,開(kāi)發(fā)者不會(huì)希望為每個(gè)機(jī)器學(xué)習(xí)模型添加另一個(gè)數(shù)據(jù)庫(kù)表只是為了解釋輸出浮動(dòng)數(shù)組的含義。
另一方面,在生產(chǎn)中跟蹤模型也很棘手,因?yàn)樗枰獠肯到y(tǒng)來(lái)保持已部署模型與訓(xùn)練過(guò)程和數(shù)據(jù)之間的鏈接。Oracle的機(jī)器學(xué)習(xí)研究小組認(rèn)為,將這些額外的要求直接嵌入機(jī)器學(xué)習(xí)庫(kù)會(huì)好得多。
編程語(yǔ)言上,大多數(shù)流行的機(jī)器學(xué)習(xí)庫(kù)都用Python和R等動(dòng)態(tài)語(yǔ)言編寫,而多數(shù)企業(yè)系統(tǒng)是基于Java等靜態(tài)類型語(yǔ)言的。這就要求企業(yè)同時(shí)使用不同語(yǔ)言來(lái)編寫代碼,并確保其運(yùn)行,也會(huì)因此產(chǎn)生更多的代碼維護(hù)成本和系統(tǒng)開(kāi)銷。
此次開(kāi)源的Tribuo則能夠妥善處理這些問(wèn)題。Tribuo具有數(shù)據(jù)加載管道、文本處理管道和功能級(jí)別轉(zhuǎn)換,可在數(shù)據(jù)加載后對(duì)其進(jìn)行操作。它知道自己輸入/輸出了什么,并可以描述每個(gè)輸入/輸出的范圍和類型。
使用Tribuo從其他系統(tǒng)和語(yǔ)言部署模型也很方便,它提供了指向ONNX Runtime、TensorFlow和XGBoost的接口。其中,對(duì)onnx模型的支持允許在Java中部署一些Python軟件包(例如pytorch)訓(xùn)練的模型。
所有模型和評(píng)估都包括一個(gè)可序列化的出出對(duì)象,該對(duì)象記錄了模型或評(píng)估的創(chuàng)建時(shí)間、數(shù)據(jù)的身份以及應(yīng)用于它的任何轉(zhuǎn)換,以及培訓(xùn)師的超等值器。在評(píng)估中,此來(lái)源信息還包括使用的特定模型。證明信息可以提取為JSON,或者直接使用Java序列化進(jìn)行序列化。對(duì)于生產(chǎn)部署,可以編輯來(lái)源信息,并替換為哈希,以便通過(guò)外部系統(tǒng)提供模型跟蹤。
Tribuo目前支持Java 8及更高版本。Oracle表示該機(jī)器學(xué)習(xí)庫(kù)已經(jīng)在公司的內(nèi)部生產(chǎn)中運(yùn)轉(zhuǎn)了數(shù)年。