これはドキュメントのマークダウン ページです。詳細については、Markdown リファレンス (go/documentation-reference) およびドキュメント スタイル ガイド (go/documentation-style) を参照してください。
背景
デシジョン フォレスト学習アルゴリズムは、ニューラル ネットワークや線形予測子のような勾配降下ベースのモデルとは動作が異なります。これらの違いは、さまざまなモデリングの決定に現れますが、トークン化されたテキスト特徴など、アーキテクチャ固有の特徴エンジニアリングを必要とする傾向にある可変長のカテゴリ特徴がデータセットに含まれている場合に特に顕著です。このガイドでは、デシジョン フォレスト モデルのテキスト特徴に対するさまざまな特徴エンジニアリング戦略間のトレードオフについて概説します。
次のセクションでは、これらの特徴を持つデータセットを参照し、ユーザーが特定の製品を購入するかどうかを予測すると仮定します。
特徴 | ユーザーID | 以前の購入 | 製品タイトル | 製品説明 |
データ例 | 1234 | [「テレビ」、「真空」] | 「WiFiルーター」 | 「このルーターは…」 |
この例では、「以前の購入」はスパース テキスト特徴 (またはカテゴリ項目のセット) です。 「製品タイトル」も同様ですが、この例ではトークン化されていません。 「製品の説明」は自然言語の特徴であり、他の特徴とは異なる特性を持っています。これは、語彙が大きい (または制限がない) こと、語順が重要であること、および製品に固有のその他の意味論的および語彙的特性があることが期待されるためです。言語。以下で説明する戦略は、これらすべての機能に適していますが、それぞれに異なるトレードオフがあります。
クイックリファレンス
トレーニングと推論のコストが問題にならない場合の最良の解決策は、テキスト特徴ごとにカテゴリセットと事前トレーニングされた埋め込みの両方を使用することです。これらには補完的な長所と短所があるためです。以下に示す制約のいずれかが存在しない限り、これをお勧めします。
推論速度 | トレーニング速度 | トークン <> ラベルの関係を記憶する機能 | 一般化 | |
複数のカテゴリカル | 最速 (++) | 最速 (++) | 限定 | 限定 (+) |
マルチホット | 速い (+) | 高速 (語彙サイズが比較的小さいと仮定) (++) | 良い | 限定 (+) |
カテゴリセット | 最速 (+++) | 遅い (+) | 最高 | 限定的 (++) |
埋め込み | 最も遅い (行列の乗算など、自明ではないエンコーダ演算を想定) (+ ~ +++) | 最速 (語彙サイズ >> 埋め込み次元を想定) (+++) | 悪い | 良い (++ ~ +++) |
Nグラム
N グラム (例: {"the", "cat", "is", "blue"} -> {"<start> the", "the cat", "cat is", "is blue", "blue < end>"}) は多くの場合に有益であり、ローカルの語彙情報を取得します。これらは以下のすべての方法でサポートされていますが、語彙サイズが大幅に大きくなるという代償が伴い、トレーニング コストのせいで非実用的になる可能性があります。
推奨されない戦略
ワンホット / マルチホット エンコーディング / Bag of Words
ワンホット エンコーディングは、まばらなテキストを高密度化するための古典的な戦略です。ここでは、スパース テキスト特徴がマルチホット (含まれるすべてのトークンが 1) またはカウントベースのベクトル化 (語彙内の各トークンのカウント) で表される拡張を想定します。
たとえば、語彙が 4 つのアイテムで、["TV"、"Vacuum"、"Wifi"、"Router"] のようにインデックス付けされている場合、特徴 "Prior Purchases" は密なベクトル <1、1、0、0 になります。 >。カウントが考慮され、機能が ["TV", "TV", "Vacuum"] である場合、それは <2, 1, 0, 0> になります。
長所
- デシジョン フォレストの分割は個々の特徴について学習されるため、カテゴリ セットよりもトレーニング時のコストが低くなります。
- 前者とは異なり、クリッピングやパディングは必要なく、トークンは例全体で同じセマンティクスを持ちます (つまり、「TV」は位置に関係なく分割全体で一定になります)。
短所
- この戦略は多くの場合、非常に不均衡でまばらな分割につながり、DF 学習アルゴリズムの収束が遅くなったり、標準を下回ったりする可能性があります。その理由は次のとおりです。
- 同じ情報を学習するにはさらに多くの分割が必要です
- 高度に疎なツリーはバランスのとれたツリーよりも一般化が悪く、通常はモデルの精度が低くなります。
- 位置情報は考慮しておりません。これにより、自然言語機能のパフォーマンスが低下する可能性があります。
- カテゴリカル データの数値分割の学習は最適ではありません。ここでは利用されていないカテゴリ分割を見つけるための最適化があります。
- トレーニングの計算の複雑さは、語彙項目 (それぞれが数値特徴として消費されます) の数に比例して増加します。実際には、データセットが非常に小さい場合を除き (この場合、語彙が大きいと過剰適合が促進される可能性があります)、これにより 5,000 項目を超える語彙のトレーニングが非常に遅くなります。
- インデックス作成時にデータがスパース データの高密度バージョンとして保存されるため、トレーニング メモリの消費量は、例ごとに語彙項目ごとに 1 バイト (ワンホットの場合) または 4 バイト (カウントの場合) になります。語彙やデータセットが大きくなると、これが法外に大きくなる可能性があります。
固定長の複数のカテゴリ特徴
カテゴリ特徴はデシジョン フォレスト アルゴリズムによって効率的に学習できるため、スパース トークンを消費する自然な方法の 1 つは、例ごとに固定数の入力トークンが存在し、各トークンの位置が別個の独立した特徴になるようにパディング/クリップすることです。上の例では、「以前の購入」に最大 5 個のトークンがある場合、トークン 1 ~ 5 を表す特徴 f1...f5 を作成し、5 を超えるトークンはすべて破棄し、5 未満の例については欠損値を追加できます。
長所
- これはトレーニングに効率的です。
- サンプルごとのトークン数の分散が小さく、トークンが独立している場合、これによってモデルの品質が損なわれることはありません。
- これにより、他の方法よりも自然に追加のセマンティクス (例の注文書など) を取得できる可能性があります。
短所
- モデルのノイズとして機能する「欠落している」パディングされたトークンにセマンティクスを追加します。これは、例ごとのトークンの数に大きな差異がある場合に特に顕著になります。これは、たとえば「製品説明」機能で発生する可能性があります。
- 学習されたツリーは順序付けに非常に敏感です。つまり、特徴が ["A", "B"] の場合、予測は ["B", "A"] の予測とは異なります。また、後者がまったく見られなかった場合は、予測は異なります。データでは、モデルは前者から一般化できなくなります。一般に、位置の不変性を学習するにはさらに多くのデータが必要になります。
- デフォルトでは、各トークンは異なる語彙を持つ特徴によって表されます。実装で機能ごとに同じ語彙項目のセットを考慮するように強制した場合でも、f1=”TV” は f2=”TV” とは異なる語彙項目になります。これは、アルゴリズムがトークン「TV」とラベルの関係を学習する際の効率が低下することを意味します。トークンの位置ごとに個別に学習する必要があります。
より良い戦略
カテゴリカルセット
カテゴリ セット ( https://arxiv.org/pdf/2009.09991.pdf ) は、スパース テキストの TF-DF のデフォルトの特徴表現です。カテゴリ セットは実質的に単語の集まりであり、重複や順序付けは無視されます。たとえば、「テレビは最高です」という特徴は、カテゴリ集合 {「最高」、「is」、「the」、「TV」} で表されます。
さまざまなタスクのベンチマーク (論文を参照) によると、ネイティブのカテゴリカル セット スプリッターは、通常、マルチホットおよび固定長のカテゴリカル特徴よりも優れたパフォーマンスを発揮します。理論的には、ワンホット エンコードされた特徴に対するカテゴリカル セットの分割とブール値の分割の両方で同じ情報を学習できます。ただし、ツリーが次の関数を学習しようとしている次の例を考えてみましょう。
if description contains “high” AND “speed” AND “gaming”:
return True
この場合、ネイティブ カテゴリ セット スプリッターは 1 つのスプリットを学習します。ここで、{“high”、“speed”、“gaming”} => True。
ワンホット表現には、「高」、「スプリット」、「ゲーミング」の 3 つの分割が必要であり、これらのカテゴリのすべての可能な論理和 (つまり、「速度」ではなく「高」) に対して適切なリーフ ノードを見つける必要があります。実際には、ワンホット エンコーディングでは、最もパフォーマンスの高いデシジョン フォレスト学習アルゴリズムによって効率的に最適化できない、非常に不均衡なツリーが生成されます。
長所
- デシジョン フォレストに関する簡単な情報を学習するのが得意です。
- 非常に効率的にサービスを提供できます (QuickScorer を使用してサービスを提供でき、サンプルごとに最大でサブマイクロ秒の時間で大きなツリーをサービスできます)。処理時間の複雑さは、各例のカテゴリ セット内の項目数に線形であり、実際には語彙サイズよりもはるかに小さくなります。
- 機能ごとに 1 つの語彙を最適化するため、セマンティクスが共有されます。
短所
- カテゴリカル セットのトレーニングのコストは、num_examples * 語彙サイズで分割されるため、ワンホット アルゴリズムと同様に、実際の設定ではトレーニング可能な語彙サイズはかなり小さくなる可能性があります (N 千)。このトレーニング速度は、貪欲アルゴリズムのサンプリング部分を調整することで改善できますが、最適な品質に達しない可能性があることに注意してください。
埋め込み
ニューラル ネットワークは、さまざまな NLP タスクで最先端のパフォーマンスを示しており、数値特徴として使用される事前トレーニング済みの埋め込みは、内部で機能がまったく異なる方法で使用されているにもかかわらず、経験的にデシジョン フォレスト アルゴリズムでもうまく機能します。ここで「埋め込み」とは、トランスフォーマー/畳み込み/リカレント層の出力など、ニューラル ネットワークのエンコーディングを指すことに注意してください。
事前トレーニングされた埋め込みの使用は、ユークリッド空間で同様のトークンまたは文が近接しているベクトル空間の初期化が NLP タスク間で適切に転送されることがわかっており、その初期化による勾配が小さくて収束が速いため、ニューラル ネットワークでうまく機能します。完全にランダムな初期化よりも。ただし、デシジョン ツリーは、個々の数値特徴としてエンベディングを使用し、それらの個々の特徴の軸に合わせた分割を学習します1 。これは、同じセマンティック情報を利用することがほぼ不可能であることを意味します。たとえば、ドット積や行列の乗算は、軸を揃えた分割のセットでは表現できません。さらに、トレーニング中に勾配降下法によって埋め込みを更新できるニューラル ネットワークとは異なり、デフォルトのデシジョン フォレスト学習アルゴリズムは微分不可能であるため、埋め込みは固定されたままでなければなりません。微分可能な決定フォレストに関する研究 ( https://arxiv.org/pdf/2007.14761.pdfなど) があることに注意してください。ただし、おそらく部分的には、実際には、ニューラル ネットワークであっても、埋め込み内の情報のすべてのビットが実際に利用されるわけではないため、この戦略は依然としてデシジョン フォレストでうまく機能します。
長所:
- はるかに大きな語彙サイズを処理できます。埋め込みは事実上、少数の埋め込み次元への高密度化であるため、デシジョン フォレストへの入力特徴の数が劇的に増加する可能性は低いです。
- 同様の埋め込みがパーティションのセットを共有できるため、理論的にはより適切に一般化できます。ここでの大きな注意点は、前述のように、ベクトル空間での基底変換または回転では、デシジョン フォレストの軸に揃えられた分割空間では完全に異なる 2 つの類似した埋め込みが存在する可能性があることです。
- たとえば、エンコーダに畳み込み、アテンション、または RNN が含まれている場合、繰り返し/語順を自然にカプセル化できます。
- 別のデータセットからの情報を活用できます (転移学習の事前トレーニング)。
短所
- 情報を記憶するのが苦手 -- 分割により、分類があいまいになったり、言い回しに敏感になったりする可能性があります (つまり、「ルーターは素晴らしい」と「優れたルーター」)。異なるエンベディングが生成され、ユークリッド空間では近いかもしれませんが、必ずしも類似しているとは限りません。数値的な特徴。
- 推論時に完全なエンコーダ前方パスを実行する必要があるため、処理が最も遅くなります。実際のレイテンシは、埋め込みを生成したアーキテクチャに大きく依存します。つまり、トランスフォーマ エンコーダは通常、平均プーリングを使用した生の埋め込みテーブル ルックアップよりもはるかに遅くなります。
注意事項
斜め分割を有効にすると、軸に合わせていない情報を学習できるようになりますが、それは依然として次元ごとのベースになります。 ↩