AutoML 即通過自動化的機器學習實作人工智能模型的快速建構,它可以簡化機器學習流程,友善更多人利用人工智能技術。近日,軟體行業巨頭 Salesforce 開源了其 AutoML 庫 TransmogrifAI。Salesforce Einstein 資料科學進階總監 Shubha Nabar 在 Medium 上撰文介紹了該 AutoML 庫,包括工作流程和設計原則等。
- GitHub 連結:https://github.com/salesforce/TransmogrifAI
- TransmogrifAI 官網:https://transmogrif.ai/
在過去的十年中,盡管機器學習取得了巨大的進步,但是建立生産就緒的機器學習系統仍然十分困難。三年前,當我們開始将機器學習功能建構到 Salesforce 平台上時,我們發現建構企業級的機器學習系統更是難上加難。為了解決我們遇到的問題,我們建構了 TransmogrifAI,一個用于結構化資料的端到端自動機器學習庫。今天,這個庫已經在生産中幫助驅動我們的 Einstein AI 平台。在這裡,我們很高興與開源社群共享這個項目,使其他開發人員和資料科學家能夠大規模、快速地建構機器學習解決方案。
當我們為消費類産品賦予機器學習能力時,資料科學家往往關注的是大量容易了解的用例和資料集。相反,企業中資料和用例的多樣性使得用于企業級産品的機器學習需要面對另一種挑戰。對于 Salesforce 來說,我們的客戶希望預測一系列結果,從客戶流失情況、銷售預測以及商機轉化率,到電子郵件營銷點選率、網站購物、接受出價、裝置故障、逾期付款等。對于企業客戶來說,確定其資料受保護、不向其他組織或競争者共享資料是十分關鍵的。這意味着我們必須為任何給定的用例建構使用者定制化的機器學習模型。即使我們可以建構全局模型,但是由于每個使用者的資料是唯一的,有着不同的模式、形态、由不同的業務流程引入的偏差,建構全局模型的做法是沒有任何意義的。為了讓機器學習真正服務于客戶,我們必須針對每個用例使用每個客戶的獨特資料,建構和部署數千個個性化的機器學習模型。
在不雇傭大量資料科學家的情況下,唯一實作這一目标的途徑就是自動化。目前,大多數 auto-ML 解決方案要麼非常狹隘地關注整個機器學習工作流的一個小部分,要麼就是為圖像、語音和語言這樣的非結構化、同質資料建構的。而我們需要的解決方案應該能夠大規模地為異質結構化資料快速生成資料效率高的模型。在詞典中,「Transmogrification」意為「變換的過程」,這種變換通常以一種令人驚訝或者神奇的方式進行,這也正是 TransmogrifAI 為 Salesforce 所做的——使資料科學團隊将客戶資料轉化為有意義的、可操作的預測。如今,成千成萬的使用者定制化機器學習模型已經部署在了這個平台上,為每天超過 30 億個預測賦能。
下文我們将介紹 TransmogrifAI 的工作流,讨論設計思想,并給出了一些幫助人們使用這個庫或為其貢獻代碼的連結。
TransmogrifAI 的工作流
通常來說,建構優秀機器學習模型所需的研究和開發任務是很龐大的工作。資料準備、特征工程和模型訓練的繁瑣工作是一個疊代的過程,需要花費資料科學家數周甚至數月的時間才能得到成熟的自動化模型。TransmogrifAI 是一個基于 Scala 語言和 SparkML 架構建構的庫,它恰好可以實作這一目标。隻需短短的幾行代碼,資料科學家就可以完成自動化資料清理、特征工程和模型選擇工作,得到一個性能良好的模型,然後進行進一步的探索和疊代。
TransmogrifAI 封裝了 5 個主要的機器學習元件:

TransmogirifAI 的工作流
特征推斷:任何機器學習工作流程的第一步都是準備資料。資料科學家會收集所有相關的資料,并且對不同的資料源進行壓縮、連接配接和聚合處理,進而提取出可能具有預測能力的原始信号。接着,提取出的信号會被轉存到一個靈活的資料結構(通常被稱為 DataFrame)中,以便在工作流的下遊進行進一步的操作。盡管這些資料結構簡單且易于操作,但它們并沒有保護資料科學家免于下遊錯誤,如「關于資料類型的錯誤假設」或者「資料中存在空值」等。是以,資料科學家有可能整夜運作工作流程,而第二天早上才發現失敗了,僅僅可能是因為她試圖将兩個字元串相乘(該資料類型的乘法操作通常不被允許)。
在 TransmogrifAI 中,我們通過允許使用者為資料指定一個模式,并自動提取出原始預測器和作為「特征」的響應信号來解決這個問題。特征是強類型的,TransmogrifAI 支援豐富的可擴充特征類型層次結構。這種層次結構可以超越原始的類型,支援更細微的資料類型,例如地理位置、電話号碼、郵編等,即資料科學家想要差別對待的資料類型。除了允許使用者指定資料類型之外,TransmogrifAI 還能自己進行推斷。例如,如果它檢測到具有低基數(唯一值較少)的文本特征實際上是潛在的類别特征,它就會對其進行分類并且進行适當的處理。強類型特征使開發人員能夠在編譯時而不是運作時就發現大部分錯誤。它們也是自動化機器學習工作流程中常見的特定類型下遊處理的關鍵。
TransmogrifAI 的特征類型層次圖
Transmogrification(即自動化特征工程):盡管強類型特征對資料推理非常有幫助,還能将下遊錯誤降到最低,但所有的特征最終都需要轉換為一種能夠展示資料規律的數值表示形式,以便機器學習算法可以很容易地利用這些特征。這個過程被稱為特征工程。有數不清的方法可以對上圖所示的特征類型進行轉換,而如何找到最恰當的方法則是資料科學的藝術了。
舉個例子,我們不妨問問自己:如何才能将美國某個州的名稱(例如加利福尼亞 CA、紐約 NY、德克薩斯 TX 等)轉換為一個數字。一種可能的方法是将每個州的名稱映射到區間在 [1, 50] 的數字。而這種編碼的問題是,它沒有儲存關于各個州地理位置鄰近性的資訊。然而,在試圖對購物行為進行模組化時,這種地理位置的鄰近性可能是一個很重要的特征。我們可以嘗試的另一種編碼方法是使用每個州的中心與美國的中心之間的距離。這種方法可以在某種程度上解決上面提到的問題,但它仍然不能對各州位于美國的北部、南部、西部還是東部這類資訊進行編碼。這隻是對于一個特征的簡單例子,想象一下,如果我們面對成百上千個這樣的問題,那該有多複雜!特征工程之是以極具挑戰性,是因為并沒有一種對于所有需要考慮的因素完全恰當的方法,而成功的方法在很大程度上取決于我們試圖優化的問題。
将數十種不同的特征類型自動轉換成數值向量,這就是 TransmogrifAI 名字的由來。TransmogrifAI 為所有其支援的特征類型提供大量的技術支撐,這些特征包括電話号碼、電子郵件位址、地理位置甚至文本資料。這些轉換不僅僅是将資料轉化為算法可以使用的格式,TransmogrifAI 還對轉換結果進行優化,使機器學習算法更容易利用這些資料進行學習。例如,它會将年齡等數值特征轉化為最适合特定問題的年齡段,就像适用于時尚行業和财富管理行業的年齡段可能是不同的。
但是,即使我們采取了上述措施,特征工程仍然是一個無止境的遊戲。是以,除了提供這些預設的技術,我們還做了大量的努力,使快速貢獻代碼和共享特征工程技術更加容易,以便開發人員能夠以可複用的方式定制和擴充預設技術。
自動化特征驗證:特征工程可能導緻資料次元的爆炸。而對高維資料的處理往往面臨着許許多多的問題!例如,對資料中特定字段的使用可能随着時間的推移發生變化,在這些字段上訓練出的模型可能在新的資料上表現并不好。另一個巨大的(而且經常被忽視的)問題是後視偏差(hindsight bias)或 data leakage(無法正确解釋因果關系)。當預測時實際不會出現的資訊被「洩漏」到訓練樣本中時,就會出現這種情況。其結果是模型在論文中看起來效果十分好,但是實際上卻毫無用處。試想一個包含多項交易資訊的資料集,其任務是預測可能完成的交易。假設這個資料集中有一個字段為「已完成交易量」(Closed Deal Amount),這個字段隻能在某項交易完成後才能被填充。盲目地應用機器學習算法會認為這個字段具有很強的預測性,因為所有已完成的交易都會有一個非零的「已完成交易量」。但實際上,這個字段不會被仍在進行中的交易所填充,機器學習模型在這些交易上的性能會很差,而預測對于這些交易實際上很重要!這種後視偏差在 Salesforce 尤其造成了很大問題,在 Salesforce 中,未知的自動化的業務流程常常充斥着各種使用者的資料,這使得資料科學家很容易混淆因果關系。
TransmogrifAI 具有一些可以執行自動特征驗證工作的算法,它們将被用來删除掉幾乎沒有預測能力的特征:這些特征的使用會随着時間推移而改變,特征顯示出來的方差為零,或者在訓練樣本中的分布與其預測時的分布具有明顯的差異。TransmogrifAI 使用的這些算法在處理高維資料和未知資料時十分有用,這些資料原本可能會被後視偏差所擾亂。這些算法應用了一系列基于特征類型的統計檢驗,并且利用特征譜(feature lineage)來檢測并消除這種偏差。
自動化的模型選擇:資料科學家進行資料處理的最後一個步驟是将機器學習算法應用到準備好的資料上,進而建構預測模型。資料科學家可以嘗試許多不同的算法,而且可以對每種算法進行不同程度的微調。找到合适的算法和參數設定才能成就性能好的模型。
TransmogrifAI 的模型選擇器在資料上運作不同的機器學習算法,利用平均驗證誤差自動選擇出最好的算法。它還能通過适當地對資料進行采樣并将預測結果重新校準到與真實先驗比對,來自動處理資料不平衡的問題。資料科學家在資料上訓練出的最佳模型和最差模型之間的性能差異往往很大,而探索可能的模型空間對于避免留下太大的模型缺陷十分重要。
超參數優化:超參數優化層是以上所有步驟的基礎。在如今的機器學習社群中,超參數特指機器學習算法中那些可以調節的參數。然而現實是,對以上所有步驟進行有效調節的參數各不相同。例如,在特征工程中,資料科學家可能會調節從分類預測器中得出的二值變量的數量。而處理不平衡資料的采樣率是另一個可以調整之處。對所有這些參數進行調優是一件非常困難的事情,但它确實可以得出一個很棒的模型,這與随機産生的模型在性能上有很大的差别。這也正是 TransmogrifAI 提供一些自動超參數調優技術、一個擴充更多先進調優技術的架構的原因。
在 Salesforce,這樣的自動化技術已經把訓練模型的總時間從數周或數月減少到了幾個小時。而且将這些複雜的過程封裝起來的代碼十分簡單。隻需要下面的幾行代碼就可以指定上面的自動化特征工程、特征驗證和模型選擇工作:
// Read the Deal data
val dealData = DataReaders.Simple.csvCase[Deal](path = pathToData).readDataset().toDF() // Extract response and predictor Features val (isClosed, predictors) = FeatureBuilder.fromDataFrame[RealNN](dealData, response = "isClosed") // Automated feature engineering val featureVector = predictors.transmogrify() // Automated feature validation val cleanFeatures = isClosed.sanityCheck(featureVector, removeBadFeatures = true) // Automated model selection val (pred, raw, prob) = BinaryClassificationModelSelector().setInput(isClosed, cleanFeatures).getOutput() // Setting up the workflow and training the model val model = new OpWorkflow().setInputDataset(dealData).setResultFeatures(pred).train()
使用 TransmogrifAI 預測交易完成的可能性
設計選擇
TransmogrifAI 的設計宗旨是提升機器學習開發者的生産效率,這不僅通過機器學習自動化來實作,還需要通過能夠加強編譯時類型安全、子產品化和複用性的 API 得以實作。下面是我們所做的一些值得注意的設計選擇。
Apache Spark:出于很多因素的考慮,我們選擇在 Apache Spark 架構上建構 TransmogrifAI。首先,我們需要處理資料規模的巨大變化。我們的一些使用者和用例需要基于上千萬條需要聚合或連接配接的記錄來訓練模型,而另外一些使用者和用例則僅僅依賴于幾千條記錄。Spark 具有處理大資料分布式連接配接和聚合的基本方法,這對我們來說十分重要。其次,我們需要能夠在批處理和流處理這兩種模式下提供我們機器學習模型的服務。當使用 Spark 流時,我們可以很容易地将 TransmogrifAI 擴充到這兩種模式中。最後,通過在一個活躍的開源庫上建構 TransmogrifAI,我們可以利用開源社群對該庫進行的持續改進,而不必重新造一個輪子。
特征抽象:SparkML 工作流引入了轉換 DataFrame 的 Transformer 和 Estimator 的抽象。TransmogrifAI 就是建構在這些抽象(上述 Transmogrification、特征驗證和模型選擇,它們都由 Estimator 提供支援)之上的。此外,TransmogrifAI 還引入了特征抽象。特征本質上是一個指向資料幀(DataFrame,一種資料結構)中某個列的類型安全指針,并且包含關于該列的所有資訊,即它的名稱、它包含的資料類型,以及它是如何産生的譜系資訊。
接着,特征成為開發人員與之互動的主要原語(primitive),定義和操作特征更像是在程式設計語言中處理變量,而不是在資料幀(DataFrame)中處理列。特征也是可以共享的,它允許開發人員之間的協作和複用。此外,TransmogrifAI 還能夠容易地定義複雜時間序列聚合和連接配接結果的特征,但要讨論這個主題可能就要再寫一篇博文專門介紹了。
類型安全:特征是強類型的。這允許 TransmogrifAI 對整個機器學習工作流進行類型檢查,并確定盡早發現錯誤,而不是在一個運作流程中花費幾個小時才找出錯誤。類型安全還帶來了其它有利于提高開發人員生産效率的優點,包括支援智能化的內建開發環境(IDE)為完成代碼提出建議。在下圖中,你可以看到你能為一個數值特征執行的所有可能的轉換操作,并且選擇其中之一。
對數值特征進行轉換的 IDE 代碼完成
類型安全還在機器學習工作流的每個階段提高了預期輸入和輸出的透明度。這大大減少了在任何特别複雜的機器學習工作流中不可避免地積累的知識量。
最後,特征類型是針對特定類型的下遊處理工作的關鍵,尤其是對于自動化特征工程和特征驗證。
可定制性和可擴充性:盡管開發人員可以使用自動估計器快速地對模型性能進行調優,對于那些希望對模型具有更多控制能力的使用者,每個開箱即用的估計器都是參數化的,這些參數可以由資料科學家直接設定并調優。此外,人們可以很容易地指定定制的轉換器和估計器用。指定一個定制的轉換器就像定義 lambda 表達式一樣簡單,TransmogrifAI 負責維護所有為你進行序列化和反序列化操作的樣闆檔案。
規模和性能:通過自動化特征工程,資料科學家可以很容易地擴充特征空間,并最終得到讓 Spark 難以處理的大規模資料幀。TransmogrifAI 的工作流通過推斷出實作這些特征所需轉換的有向無環圖(DAG)來解決這個問題,并且通過将在 DAG 同一層次上進行的所有轉換壓縮成同一個操作來優化 DAG 的執行。同時,由于 TransmogrifAI 是建立在 Spark 架構之上的,它會自動地從不斷進行的底層 Spark 資料幀的優化中受益。
結果是,我們可以将自動化的機器學習技術應用在上百萬行、上百列的資料上,并且将處理過程中的特征空間擴充到數萬列。
友善所有人使用 TransmogrifAI
TansmogrifAI 為我們帶來了巨大的變革,它使我們的資料科學家在生産中使用最少的手動調參就能部署數千個模型,将訓練一個性能優秀模型的平均時間從數周減少到幾個小時。這種水準的自動化對于我們為企業提供機器學習服務十分重要,我們相信現在每家企業所擁有的機器學習用例超過它們所擁有的資料科學家,自動化是使機器學習技術普及的關鍵。
Salesforce 是 Apache Spark 項目長期的使用者和貢獻者,我們很高興能夠繼續在開源社群中建構 TransmogrifAI。機器學習具有轉變企業運作模式的潛力,我們相信隻有思想和代碼的開放性交流才能降低使用它的門檻。通過在開源的環境中工作,我們可以将不同的視角聚集在一起,繼續推動技術向前發展,讓每個人都能夠使用它。
想要擷取更多 TransmogrifAI 的入門資料,請檢視項目連結:https://github.com/salesforce/TransmogrifAI。
原文連結:https://engineering.salesforce.com/open-sourcing-transmogrifai-4e5d0e098da2
轉載于:https://www.cnblogs.com/alan-blog-TsingHua/p/9789259.html