マッチボックス レコメンダーのトレーニング

マッチボックス アルゴリズムを使用してベイジアン レコメンダーをトレーニングします

カテゴリ: Machine Learning/トレーニング

注意

適用対象: Machine Learning Studio (クラシック)

このコンテンツは、Studio (クラシック) のみに関連しています。 Azure Machine Learning デザイナーに同様のドラッグアンドドロップモジュールが追加されました。 この記事では、2つのバージョンの比較について詳しく説明します。

モジュールの概要

この記事では、Azure Machine Learning Studio (クラシック) の [ マッチボックスレコメンダーのトレーニング] モジュールを使用して、推奨モデルをトレーニングする方法について説明します。

Azure Machine Learning の推奨アルゴリズムは、 Microsoft Researchによって開発された matchbox モデルに基づいています。 アルゴリズムの詳細が記載されている用紙をダウンロードするには、 Microsoft Research サイトのこちらのリンクをクリックしてください。

[マッチボックス レコメンダーのトレーニング] モジュールは、ユーザー項目の評価 3 要素のデータセットと、オプションで一部のユーザーと項目の特徴を読み取ります。 トレーニング済みのマッチボックス レコメンダーを返します。 その後、トレーニング済みのモデルを使用して、 スコアマッチボックスレコメンダー モジュールを使用して、推奨設定の生成、関連ユーザーの検索、または関連項目の検索を行うことができます。

ヒント

このチュートリアルでは、.NET 開発チームから、推奨システムを構築するためのエンドツーエンドのエクスペリエンスについて理解しておく必要があるすべての情報について説明します。 アプリケーションから Azure Machine Learning を呼び出す方法について、サンプルコードとその説明を示します。

Azure Machine Learning を使用した .NET アプリケーションの推奨エンジンの構築

推奨モデルと Matchbox レコメンダーの詳細

レコメンデーション システムの主な目的は、システムの ユーザー に対して 1 つ以上の 項目 を推奨することです。 項目の例として、映画、レストラン、本、曲などがあります。 ユーザーは、個人、個人のグループ、または項目の好みがあるその他のエンティティにすることができます。

レコメンダー システムには、主に 2 つのアプローチがあります。

  • 1 つ目は、コンテンツベースの アプローチです。これは、ユーザーと項目の両方の特徴を利用します。 ユーザーは、年齢や性別などのプロパティによって記述できます。また、項目は作成者や製造元などのプロパティによって記述される場合があります。 コンテンツベースのレコメンデーション システムの一般的な例は、出会い系のサイトです。
  • 2 番目の方法は 協調フィルタリング です。このフィルターでは、ユーザーと項目の識別子のみを使用し、ユーザーが項目に対して指定した (疎な) 評価マトリックスから、これらのエンティティについての暗黙的な情報を取得します。 ユーザーについての情報は、そのユーザーが評価した項目や、同じ項目を評価した他のユーザーから学ぶことができます。

Matchbox レコメンダーは、コンテンツベースのアプローチでコラボレーションフィルターを使用して、これらのアプローチを組み合わせます。 したがって、ハイブリッド レコメンダー と考えることができます。

このしくみは次のとおりです。ユーザーがシステムの比較的初心者である場合は、ユーザーに関する特徴の情報を使用することによって予測が向上します。このようにしてよく知られた "コールド スタート" の問題に対処します。 ただし、特定のユーザーから十分な数の評価を収集した後は、これらのユーザーに対して、その特徴だけではなく特定の評価に基づいて完全に個人的な予測を行うことができます。 そのため、コンテンツベースの推奨事項から協調フィルタリングに基づく推奨事項へのスムーズな移行があります。 ユーザーまたは項目の特徴を使用できない場合でも、マッチボックスは協調フィルタリング モードで動作します。

Matchbox レコメンダーとその基になる確率論的アルゴリズムの詳細については、関連する研究論文「 Matchbox: Large Scale ベイジアン推奨事項」を参照してください。 さらに、 Machine Learning ブログ には、推奨設定アルゴリズムの概要を説明する「 推奨事項 」というタイトルの記事があります。

マッチボックスレコメンダーを構成する方法

データの準備

モジュールを使用する前に、データを推奨モデルで想定される形式にする必要があります。 ユーザー、項目、評価を表す 3 つの要素 のトレーニング データセットが必要ですが、ユーザーの特徴と項目の特徴 (入手可能な場合) を別々のデータセットに含めることもできます。

ソースデータをトレーニングデータセットとテストデータセットに分割するには、データの分割モジュールの レコメンダー split オプションを使用します。

ユーザー、項目、評価の必須データセット

トレーニングに使用する入力データに適切な形式のデータが含まれていることが非常に重要です。

  • 最初の列には、ユーザーの識別子が含まれている必要があります。
  • 2 番目の列には、項目の識別子が含まれている必要があります。
  • 3 番目の列には、ユーザーと項目のペアの評価が含まれています。 評価の値は、数値またはカテゴリにする必要があります。

トレーニング中、評価の値を同じにすることはできません。 さらに、数値の場合、最小と最大の評価の値の差は100より小さく、理想的には20を超えることはできません。

Azure Machine Learning Studio (クラシック) の レストラン評価 データセット ([ 保存されたデータセット ] をクリックし、[ サンプル]) では、予期される形式を示します。

userID placeID 評価
U1077 135085 2
U1077 135038 2

このサンプルから、1 人のユーザーが 2 つの異なるレストランを評価したことがわかります。

ユーザーの特徴のデータセット (オプション)

ユーザーの特徴 のデータセットには、ユーザーの識別子を含める必要があります。また、ユーザー、項目、評価のデータセットの最初の列に指定されていたものと同じ識別子を使用します。 その他の列には、ユーザーを表す特徴がいくつ含まれていてもかまいません。

例については、Azure Machine Learning Studio (クラシック) の レストラン顧客 データセットを参照してください。 一般的な一連のユーザー機能は次のようになります。

userID アンビエンス Dress_preference transport smoker
U1004 family informal フィートに false
U1005 friends [優先設定なし] 車両所有者 TRUE

項目の特徴のデータセット (オプション)

項目の特徴のデータセットでは、最初の列に項目の識別子が含まれている必要があります。 その他の列には、項目を説明する特徴がいくつ含まれていてもかまいません。

例については、Azure Machine Learning Studio (クラシック) に用意されているレストラン機能のデータセットを参照してください ([ 保存されたデータセット ]、[ サンプル] の順にクリックします)。 一般的な一連の項目機能 (この場合は、商品がレストラン) は次のようになります。

placeID アルコール Smoking_area price Rambience
135106 Wine-Beer なし low family
132667 No_Alcohol_Served カジュアル

モデルのトレーニング

  1. [ マッチボックスレコメンダーのトレーニング] モジュールを Studio (クラシック) の実験に追加し、トレーニングデータに接続します。

  2. ユーザー機能または項目の特徴の個別のデータセットがある場合は、それらを トレーニングマッチボックスレコメンダー モジュールに接続します。

    • ユーザーの特徴のデータセット:ユーザーを記述するデータセットを 2 番目の入力に接続します。

    • 項目の特徴のデータセット:項目を記述するデータセットを 3 番目の入力に接続します。

  3. [ トレーニングバッチの数] に、トレーニング中にデータを分割するバッチの数を入力します。

    この値に基づいて、トレーニング中にユーザー項目の評価3要素のデータセットが複数のパートまたはバッチに分割されます。

    [ マッチボックスレコメンダーのトレーニング ] ではバッチを並列に実行するため、トレーニングデータ全体がメモリに収まる場合は、トレーニングバッチの数を使用可能なコアの数に設定することをお勧めします。 それ以外の場合、トレーニングバッチの数は、トレーニングデータがメモリに格納される使用可能なコア数の最小倍数に設定する必要があります。

    既定では、トレーニングデータは4つのバッチに分割されます。 ユーザー項目の評価3要素のデータセットのみが分割されます。 機能を分割する必要がないため、ユーザーまたは項目の機能は分割されません。

  4. [ 特徴の数] に、ユーザーと項目ごとに学習する必要がある、潜在的な特徴の数を入力します。

    特徴の数が多いほど、予測は通常より正確になります。ただし、トレーニングは遅くなります。 通常、特徴の数は 2 ~ 20 の範囲内です。

  5. [ 推奨アルゴリズムの反復 回数] には、アルゴリズムで入力データを処理する回数を指定します。

    Matchbox レコメンダーは、入力データに対して複数回繰り返すことができるメッセージパッシングアルゴリズムを使用してトレーニングされます。 この数値が大きいほど、予測が正確になります。ただし、トレーニングは遅くなります。 通常、イテレーションの数は 1 ~ 10 の範囲内です。

  6. 実験を実行するか、[ マッチボックスのトレーニング] レコメンダー モジュールだけを選択し、[ 選択した ものを実行] を選択します。

Azure Machine Learning での推奨モデルの使用方法の例については、 Azure AI Galleryの次のサンプル実験を参照してください。

テクニカル ノート

このセクションには、実装の詳細、ヒント、よく寄せられる質問への回答が含まれています。

使用上のヒント

  • 特徴列に欠損値が含まれている場合は、欠損値の置換として使用されます。

  • すべてのユーザーと項目の特徴は、最大絶対値が1になるように、単位長を持つように再スケールされます。 その低密度を維持できるよう、特徴の値に変換は適用されません。

制限

推奨モデルのオンライン更新 (または継続的トレーニング) は、現時点では Azure Machine Learning ではサポートされていません。 推奨事項に対するユーザーの応答をキャプチャし、それらを使用してモデルを改善する場合は、完全なモデルを定期的に再トレーニングすることをお勧めします。 段階的トレーニングは使用できませんが、最新のデータを使用しているときにデータ量を最小限に抑えることができるように、トレーニングデータにスライディングウィンドウを適用できます。

レコメンダーメモリ使用量の推定

現在、マッチボックスのメモリフットプリントの下限は 16 * N\(4\T + 2\R) バイトです。ここで、 N はトレーニングデータセット内のユーザー項目評価の3要素の数を示し、 T は潜在的な特徴の数を表し、 R は (トレーニングデータセット内の) 最小値と最大値の差になります。

シリアル化された Matchbox レコメンダーモデルのサイズは約バイトです。ここで、U はユーザー数、 16 * T\(U\R + I + X + Y) I は項目数、 X はユーザー機能の数、 Y は項目の特徴の数を示します。

想定される入力

名前 Type 説明
ユーザー項目の評価 3 要素のトレーニング データセット データ テーブル 3 つの要素 (ユーザー、項目、評価) として表現される、ユーザーごとの項目の評価
ユーザーの特徴のトレーニング データセット データ テーブル ユーザーを説明する機能を含むデータセット (省略可能)
項目の特徴のトレーニング データセット データ テーブル 項目を記述する特徴を含むデータセット (省略可能)

モジュールのパラメーター

名前 Range Type Default 説明
特徴の数 >=0 Integer 10 レコメンダーで使用する特徴の数を指定します (省略可能)
レコメンデーション アルゴリズムのイテレーションの数 >=1 Integer 5 推奨モデルのトレーニング中に実行するイテレーションの最大数を指定します (省略可能)
トレーニングバッチの数 >=1 Integer 4 レコメンダーで使用するトレーニングバッチの数を指定します (省略可能)

出力

名前 Type 説明
トレーニング済みのマッチボックス レコメンダー ILearner インターフェイス トレーニング済みのマッチボックス レコメンダー

例外

例外 説明
エラー 0022 入力データセットで選択された列の数が、予想される数と等しくない場合、例外が発生します。
エラー 0036 特定のユーザーまたは項目に対して複数の特徴ベクターが提供された場合、例外が発生します。
エラー 0018 入力データセットが有効でない場合、例外が発生します。
エラー 0035 特定のユーザーまたは項目に対して特徴が提供されなかった場合、例外が発生します。
エラー 0034 特定のユーザーと項目のペアに対して複数の評価が存在する場合、例外が発生します。
エラー 0053 マッチボックス レコメンデーションにユーザーの特徴や項目がない場合に、例外が発生します。
エラー 0003 1 つまたは複数の入力が null または空の場合、例外が発生します。

Studio (クラシック) モジュール固有のエラーの一覧については、「 Machine Learning エラーコード」を参照してください。

API 例外の一覧については、「 Machine Learning REST API のエラーコード」を参照してください。

関連項目

モデルのクロス検証
レコメンダーの評価
指導
マッチボックス レコメンダーのスコアリング