Aerosolve

為人類打造的機器學習套件
4,707
作者Hector Yee

這是一個從頭開始設計,以人性化為目標的機器學習函式庫。它與其他機器學習函式庫的不同之處在於:

此函式庫旨在與稀疏、可解釋的特徵一起使用,例如搜尋中常見的特徵(搜尋關鍵字、篩選條件)或定價(房間數量、位置、價格)。對於具有非常密集、非人類可解釋特徵的問題,例如原始像素或音訊樣本,其解釋性較差。

專注於可解釋性的原因有幾個:

  • 您的語料庫是新的且未完全定義,您希望更深入了解您的語料庫
  • 擁有可解釋的模型可讓您快速迭代。找出模型差異最大的地方,並深入了解需要哪些新的特徵。
  • 除錯雜訊特徵。透過繪製特徵權重,您可以發現有錯誤的特徵,或將它們擬合到曲線中,並發現異常複雜的特徵(通常表示過度擬合)。
  • 您可以發現不同變數與目標預測之間的關係。例如,對於 Airbnb 需求模型,繪製評論和 3 星評論的圖表比許多巢狀 if-then-else 規則更具可解釋性。

如何開始?

aerosolve 的構件 託管在 bintray 上。如果您使用 Maven、SBT 或 Gradle,您可以直接指向 bintray 作為儲存庫,並自動提取構件。

查看圖像印象演示,您可以在其中學習如何教導演算法以點描派的風格繪畫。圖像印象演示。

還有一個基於流行的機器學習基準的收入預測演示。收入預測演示。

特徵表示

本節深入探討 基於 Thrift 的特徵表示法。

特徵被分組到稱為特徵族的邏輯群組中。這樣做的原因是我們可以一次對整個特徵族表達轉換,或將兩個不同的特徵族相互作用以建立新的特徵族。

每個 FeatureVector 有三種特徵:

  • stringFeatures - 這是一個特徵族到二元特徵字串的映射。例如,「GEO」-> {「舊金山」、「CA」、「USA」}
  • floatFeatures - 這是一個特徵族到特徵名稱和值的映射。例如,「LOC」-> {「緯度」:37.75,「經度」:-122.43}
  • denseFeatures - 這是一個特徵族到浮點數密集陣列的映射。除了圖像內容分析程式碼外,實際上不使用。

範例表示

範例是建立訓練資料和評分的基礎單位。單一範例由以下組成:

  • context - 這是範例中出現一次的 FeatureVector。例如,它可以是表示搜尋會話的特徵。例如:「關鍵字」->「免費停車」
  • example(0..N) - 這是表示被評分項目的 FeatureVector 的重複列表。這些可以對應於搜尋會話中的文件。例如:「房源城市」->「舊金山」

擁有此結構的原因是:

  • 在 RPC 期間,甚至在磁碟上,為數百個項目擁有一個上下文可以節省大量空間
  • 您可以計算一次上下文的轉換,然後將轉換後的上下文與每個項目重複應用
  • 擁有項目列表允許使用基於列表的損失函數,例如成對排名損失、支配損失等,我們可以一次評估多個項目

特徵轉換語言

本節深入探討 特徵轉換語言

特徵轉換透過一個獨立的轉換器模組應用,該模組與模型分離。這允許使用者分解轉換,或例如在評分之前提前轉換資料。例如,在應用程式中,語料庫中的項目可以提前轉換並儲存,而上下文在執行階段之前是未知的。然後,在執行階段,可以轉換上下文並將它們與每個轉換後的項目組合,以獲得最終的特徵向量,然後將其饋送到模型。

特徵轉換允許我們即時修改 FeatureVector。這讓工程師可以快速且受控地迭代特徵工程。

以下是一些常用的特徵轉換範例:

  • 列表轉換。指定要套用其他轉換的中繼轉換。
  • 交叉轉換。僅對 stringFeatures 進行操作。允許兩個不同的字串特徵族之間進行交互。例如,「關鍵字」交叉「房源城市」建立新的特徵族「關鍵字x城市」->「免費停車^舊金山」
  • 多尺度網格轉換為 2D 座標建構多個巢狀網格。適用於建模地理位置。

請參閱相應的單元測試,了解這些轉換的功能、它們操作的特徵類型以及它們期望的配置。

模型

本節涵蓋可除錯模型

儘管模型目錄中有幾個模型,但只有兩個是主要的可除錯模型。其餘的是實驗性模型或子模型,它們為可解釋模型建立轉換。

線性模型。支援鉸鏈、邏輯、epsilon 不敏感迴歸、排名損失函數。僅對 stringFeatures 進行操作。任務的標籤儲存在一個特殊的特徵族中,並在配置中由 rank_key 指定。請參閱 線性模型單元測試,了解如何設定模型。請注意,結合量化和交叉,您可以從「線性」模型中獲得令人難以置信的複雜性,因此它實際上不是您常規的線性模型,而是一些更複雜的東西,可以認為是一個枝繁葉茂、非常寬的決策樹,有數百萬個分支。

樣條模型。通用加性線性分段樣條模型。訓練在高解析度下進行,由特徵範圍的最小值和最大值之間的 num_buckets 指定。在每次迭代結束時,我們嘗試將線性分段樣條投影到低維函數中,例如具有 Dirac delta 端點的多項式樣條。如果投影的 RMSE 高於閾值,我們會讓樣條保持在高解析度分段線性模式。這讓我們可以除錯有錯誤或異常複雜的特徵的樣條模型(例如,當我們期望某種平滑度時,上下跳躍)。

  • 增強樹樁模型 - 小型緊湊模型。不太可解釋,但在小尺寸下,對特徵選擇很有用。
  • 決策樹模型 - 僅在記憶體中。主要用於為線性或樣條模型產生轉換。
  • Maxout 神經網路模型。實驗性模型,主要用作比較基準。

支援

使用者群組:https://groups.google.com/forum/#!forum/aerosolve-users