レコメンデーションモデルをトレーニングする
この記事には、Databricks 上のディープラーニング ベースの推奨モデルの例が 2 つ含まれています。 従来の推奨モデルと比較して、ディープラーニング モデルはより高品質の結果を達成し、より大量のデータに拡張できます。 これらのモデルが進化し続けるにつれて、Databricks は数億人のユーザーを処理できる大規模な推奨モデルを効果的にトレーニングするためのフレームワークを提供します。
一般的な推奨システムは、図に示す段階を持つファネルとして考えることができます。
Two-Towerモデルなどの一部のモデルは、検索モデルとしてより優れたパフォーマンスを発揮します。 これらのモデルはより小さく、数百万のデータポイントを効果的に処理できます。 DLRM や DeepFM などの他のモデルは、再ランク付けモデルとしてより優れたパフォーマンスを発揮します。 これらのモデルは、より多くのデータを取り込むことができ、より大きく、きめ細かなレコメンデーションを提供できます。
ツール
この記事の例では、次のツールについて説明します。
TorchDistributor : TorchDistributor は、Databricks 上で大規模な PyTorch モデル トレーニングを実行できるフレームワークです。 オーケストレーションには Spark を使用し、クラスターで使用可能な GPU の数に応じて拡張できます。
Mosaic StreamingDataset : StreamingDataset は、プリフェッチやインターリーブなどの機能を使用して、Databricks 上の大規模なデータセットのトレーニングのパフォーマンスとスケーラビリティを向上させます。
MLflow : Mlflow を使用すると、ビルド、メトリック、およびモデルのチェックポイントを追跡できます。
TorchRec: 最新のレコメンダー システムでは、埋め込みルックアップ テーブルを使用して何百万人ものユーザーとアイテムを処理し、高品質のレコメンデーションを生成します。 埋め込みサイズを大きくすると、モデルのパフォーマンスは向上しますが、大量の GPU メモリとマルチ GPU セットアップが必要になります。 TorchRec は、複数の GPU 間でレコメンデーション モデルとルックアップ テーブルをスケーリングするフレームワークを提供し、大規模な埋め込みに最適です。
例: Two-Towerモデルアーキテクチャを使用した映画のレコメンデーション
Two-Towerモデルは、ユーザー データとアイテム データを別々に処理してから組み合わせることで、大規模なパーソナライゼーション タスクを処理するように設計されています。 数百または数千のまともな品質の推奨事項を効率的に生成できます。 モデルには通常、user_id 機能、製品機能、および のやり取りが肯定的 (ユーザーが製品を購入した) か否定的 (ユーザーが製品に 1 つ星の評価を付けた) かを定義するバイナリ ラベルの 3 つの入力が必要です。 モデルの出力は、ユーザーとアイテムの両方の埋め込みであり、通常はこれらを組み合わせて (多くの場合、ドット製品またはコサイン類似度を使用して)、ユーザーとアイテムの相互作用を予測します。
Two-Towerモデルはユーザーと製品の両方に埋め込みを提供するため、これらの埋め込みをベクター データベースに配置し、ユーザーとアイテムに対して類似性検索のような操作を実行できます。 たとえば、すべての項目をベクター ストアに配置し、ユーザーごとにベクター ストアをクエリして、埋め込みがユーザーの埋め込みに類似している上位 100 個の項目を見つけることができます。
次のサンプルノートブックは、「アイテムセットからの学習」データセットを使用してTwo-Towerモデル トレーニングを実装し、ユーザーが特定の映画を高く評価する可能性を予測します。 分散データの読み込みには Mosaic StreamingDataset を使用し、分散モデルのトレーニングには TorchDistributor を使用し、モデルの追跡とログ記録には Mlflow を使用します。
このノートブックは、Databricks Marketplaceでも入手可能です: Two-Towerモデルノートブック
注:
Two-Towerモデルの入力は、ほとんどの場合、カテゴリ特徴の user_id と製品です。 モデルは、ユーザーと製品の両方に対して複数の特徴ベクトルをサポートするように変更できます。
Two-Towerモデルの出力は通常、ユーザーが製品に対して肯定的なやり取りをするか否定的なやり取りをするかを示すバイナリ値です。 このモデルは、回帰、多クラス分類、複数のユーザー操作 (却下や購入など) の確率など、他のアプリケーション用に変更できます。 複雑な出力は、競合する目的によってモデルによって生成される埋め込みの品質が低下する可能性があるため、慎重に実装する必要があります。
例: 合成データセットを使用して DLRM アーキテクチャをトレーニングする
DLRM は、パーソナライゼーションおよび推奨システム向けに特別に設計された最先端のニューラルネットワーク アーキテクチャです。 カテゴリ入力と数値入力を組み合わせて、ユーザーとアイテムの相互作用を効果的にモデル化し、ユーザーの好みを予測します。 DLRM では通常、スパースな特徴 (ユーザー ID、アイテム ID、地理的位置、製品カテゴリなど) と密な特徴 (ユーザーの年齢やアイテムの価格など) の両方を含む入力が想定されます。 DLRMの出力は、通常、クリックスルー率や購入可能性など、ユーザーエンゲージメントの予測です。
DLRM は、大規模なデータを処理できる高度にカスタマイズ可能なフレームワークを提供するため、さまざまなドメインにわたる複雑な推奨タスクに適しています。 2タワーアーキテクチャよりも大きなモデルであるため、このモデルは再ランク付けの段階でよく使用されます。
次のサンプルノートブックは、密な (数値) 特徴とスパースな (カテゴリ) 特徴を使用してバイナリ ラベルを予測する DLRM モデルを構築します。 モデルをトレーニングするために合成データセット、分散データ読み込み用の Mosaic StreamingDataset、分散モデルトレーニング用のTorchDistributor 、モデル追跡とログ記録用の Mlflow を使用します。
このノートブックは、Databricks Marketplace: DLRM ノートブックでも入手できます。
Two-TowerモデルとDLRMモデルの比較
次の表に、使用するレコメンダー モデルを選択するためのガイドラインを示します。
モデルのタイプ |
トレーニングに必要なデータセットのサイズ |
モデルサイズ |
サポートされている入力の種類 |
サポートされている出力の種類 |
ユースケース |
---|---|---|---|---|---|
Two-Tower |
小さい |
小さい |
通常は2つの機能(user_id、製品) |
主に二項分類と埋め込み生成 |
何百、何千というレコメンデーションの生成 |
DLRM (DLRM) |
大きい |
大きい |
さまざまなカテゴリと密な特徴 (user_id、gender、geographic_location、製品、製品、…) |
多クラス分類、回帰、その他 |
きめ細かな検索(数十の関連性の高い項目を推奨) |
要約すると、Two-Towerモデルは、何千もの高品質のレコメンデーションを非常に効率的に生成するのに最適です。 例としては、ケーブル プロバイダーからの映画の推奨事項があります。 DLRM モデルは、より多くのデータに基づいて非常に具体的な推奨事項を生成する場合に最適です。 一例としては、顧客が購入する可能性が高い少数の商品を提示したい小売業者が挙げられます。