Aerosolve

人間用に構築された機械学習パッケージ
4,707
作成者ヘクター・イー

人間にわかりやすいようにゼロから設計された機械学習ライブラリです。他の機械学習ライブラリとの違いは次のとおりです。

このライブラリは、検索(検索キーワード、フィルタ)や価格設定(部屋数、場所、価格)によく見られるような、間疎で解釈可能なフィーチャと共に使用することを目的としています。生のピクセルやオーディオサンプルなどの非常に高密度な非人間解釈可能なフィーチャを持つ問題では、それほど解釈できません。

解釈可能性に焦点を当てる理由はいくつかあります。

  • コーパスが新しく完全に定義されておらず、コーパスについて詳細な情報が必要な場合。
  • 解釈可能なモデルを使用すると、すばやく反復できます。モデルが最も異なって見える箇所を把握し、どのような新しいフィーチャが必要かを見極めます。
  • ノイズの多いフィーチャのデバッグ。フィーチャの重みをプロットすることで、バグのあるフィーチャを発見したり、スプラインにフィットさせたりして、予想外に複雑(通常は過剰適合を示す)なフィーチャを発見したりできます。
  • さまざまな変数間の関係とターゲットの予測を発見できます。たとえば、Airbnb 需要モデルでは、レビューと 3 つ星のレビューのグラフをプロットするほうが、If Then Else ルールを多数ネストするよりも解釈できます。

始め方

aerosolve のアーティファクトはbintray でホストされています。 Maven、SBT、または Gradle を使用している場合は、bintray をリポジトリとして指定するだけでアーティファクトを自動的にフェッチできます。

アルゴリズムにポアンティリズムのスタイルでペイントする方法を教える方法を学ぶことができる画像インプレッションデモを見てみましょう。画像印象主義のデモ。

一般的な機械学習ベンチマークに基づいた所得予測デモもあります。所得予測デモ。

フィーチャ表現

このセクションでは、thrift ベースのフィーチャ表現について詳しく説明します。

フィーチャは、フィーチャファミリーと呼ばれる論理グループにまとめられています。これにより、フィーチャファミリー全体に変換を一括して適用したり、2 つの異なるフィーチャファミリーを相互作用させて新しいフィーチャファミリーを作成したりできます。

FeatureVector あたりのフィーチャには 3 種類あります。

  • stringFeatures - フィーチャファミリーへのバイナリフィーチャ文字列のマッピングです。たとえば、「GEO」-> {「サンフランシスコ」、「カリフォルニア」、「アメリカ合衆国」}
  • floatFeatures: これは、特徴群と、特徴名と値のマッピングです。たとえば、「LOC」->「{「緯度」 : 37.75、 「経度」 : -122.43}」
  • denseFeatures: これは、特徴群と、フロートの配列のマッピングです。画像コンテンツ分析コードを除けば、あまり使用されていません。

例の表現

例は、トレーニングデータの作成とスコア付けの基本単位です。単一の例は次のものから構成されます。

  • context: これは、例の中で 1 回発生する FeatureVector です。たとえば、検索セッションを表す特徴になることがあります。たとえば、「Keyword」->「無料駐車場」
  • example(0..N): これは、スコア付けられているアイテムを表す FeatureVector の繰り返しのリストです。検索セッションのドキュメントに対応できます。たとえば、「LISTING CITY」->「サンフランシスコ」

この構造を持つ理由は次のとおりです。

  • 100 個のアイテムに対して 1 つのコンテキストを持つことで、RPC 中やディスク上でもスペースを大幅に節約できます。
  • コンテキストの変換を一度計算し、変換されたコンテキストを各アイテムと共に繰り返し適用できます。
  • アイテムのリストを持つことで、一度に複数のアイテムを評価するペアワイズランク付け損失、支配損失などのリストベースの損失関数の使用が許可されます。

特徴変換言語

このセクションでは、特徴変換言語について詳しく説明します。

特徴変換は、モデルから切り離された別の変換モジュールを使用して適用されます。これにより、ユーザーは変換を分割したり、スコア付けの前にデータを事前に変換したりできます。たとえば、あるアプリケーションでは、コーパスのアイテムは事前に変換されて格納される一方で、コンテキストはランタイムまでわかりません。次に、ランタイムにコンテキストを変換し、各変換されたアイテムと組み合わせて、モデルに供給される最終的な特徴ベクトルを取得できます。

特徴変換により、FeatureVector をその場で変更できます。これにより、エンジニアは迅速かつ制御された方法で特徴エンジニアリングをすばやく反復できます。

以下に、一般的に使用される特徴変換の例を示します。

  • リスト変換。適用される他の変換を指定するメタ変換
  • 交差変換。StringFeaturesに対してのみ処理されます。2 つの異なる文字列特徴群間の相互作用を可能にします。たとえば、「Keyword」と「LISTING CITY」の交差によって、新しい特徴群「Keyword * city」->「無料駐車場 ^ サンフランシスコ」が作成されます。
  • 多重グリッド変換2D 座標に複数のネストしたグリッドを構築します。地域のモデリングに役立ちます。

対応する単体テストで、これらの変換の機能、処理する特徴のタイプ、および想定される構成を確認してください。

モデル

このセクションでは、デバッグ可能なモデルについて説明します。

model ディレクトリにはいくつかのモデルがありますが、デバッグ可能な主なモデルは 2 つだけです。残りは、説明可能なモデル用に変換を作成する実験的モデルまたはサブモデルです。

線形モデル。ヒンジ、ロジスティック、イプシロン非敏感な回帰、ランキング損失関数をサポートします。文字列の抽出にのみ作動します。タスクのラベルは特別なフィーチャーファミリーに保存され、設定の rank_key によって指定されます。線形モデルのユニットテストでモデルの設定方法をご覧ください。量子化と交差と組み合わせて使用すると、「線形」モデルから驚くほどの複雑さを引き出すことができることに注意してください。そのため、通常の線形モデルではなく、より複雑で、多数の枝を持つ枝ぶりの良い非常に幅広い決定木であると考えることができます。

スプラインモデル。一般化加法線形部分スプラインモデル。トレーニングは、ある特徴の範囲の最小と最大値の間で、num_buckets によって指定された高い分解能で行われます。各イテレーションの終わりごとに、線形部分スプラインを、ディラックデルタのエンドポイントを持つ多項式スプラインなどの低い次元関数に射影しようと試みます。射影の RMSE が閾値を超えた場合は、スプラインを低分解能の部分線形モードのままにします。これにより、バグがあるか、予想外に複雑な特徴(例:ある種の滑らかさを期待しているときに上下に跳躍する)に対してスプラインモデルのデバッグを行うことができます。

  • ブースティングされたスタブモデル - 小さくコンパクトなモデル。あまり明白ではありませんが、小規模な場合に特徴の選択に役立ちます。
  • 決定木モデル - メモリ内のみ。主に、線形モデルまたはスプラインモデルの変換を生成するために使用されます。
  • マックスアウトニューラルネットワークモデル。実験的で、主にベースラインとして使用されます。

サポート

ユーザーグループ: https://groups.google.com/forum/#!forum/aerosolve-users