因数分解マシン (FM) は、特徴間の相互作用を捕捉するように設計された非線形モデルである。 このモデルは、eコマース、広告、ライブストリーミングなどの推奨シナリオに最適です。 Machine Learning Designerには、FMモデルの作成や推奨システムの展開に役立つAlinkベースのテンプレートが用意されています。 このトピックでは、Machine Learning Designerが提供するプリセットFMアルゴリズムテンプレートを使用してレコメンデーションモデルを構築する方法について説明します。
前提条件
ワークスペースが作成済み。 詳細については、「ワークスペースの作成」をご参照ください。
MaxComputeリソースはワークスペースに関連付けられています。 詳細については、「ワークスペースの管理」をご参照ください。
フルマネージドFlinkリソースは購入され、ワークスペースに関連付けられます。 詳細については、「Flink resource quotas」をご参照ください。
手順
Machine Learning Designerページに移動します。
PAIコンソールにログインします。
左側のナビゲーションウィンドウで、[ワークスペース] をクリックします。 [ワークスペース] ページで、管理するワークスペースの名前をクリックします。
ワークスペースページの左側のナビゲーションウィンドウで、 機械学習デザイナーページに移動します。
パイプラインを作成します。
可视化モデリング (デザイナー)ページでプリセットテンプレートタブをクリックします。
このタブで、[Alink]FM-Embedding for Rec-Systemテンプレートを見つけ、[作成] をクリックします。
[パイプラインの作成] ダイアログボックスで、パラメーターを設定します。 デフォルト値を使用できます。
Pipeline Data Pathパラメーターに指定された値は、パイプラインのランタイム中に生成された一時データおよびモデルのObject Storage Service (OSS) バケットパスです。
[OK] をクリックします。
パイプラインの作成には約10秒かかります。
[パイプライン] タブで、作成したパイプラインをクリックします。 右側の [基本情報] セクションで、[開く] をクリックします。
次の図に示すように、作成したパイプラインをキャンバスで表示できます。
このテンプレートは、FMトレーニングと予測にAlinkを使用する2つの方法を提供します。
方法1: カプセル化Alinkコンポーネントの使用
Alinkは、FMトレーニングと予測用のカプセル化されたコンポーネントを提供します。これらはパイプラインで紫色のドットでマークされます。 Alinkコンポーネントはグループで実行できます。 Alinkコンポーネントをグループで実行する方法とその利点と欠点については、「高度な機能: Alinkコンポーネントをグループで実行」をご参照ください。
方法2: カスタムPyAlinkコンポーネントを使用する
カスタムPyAlinkコンポーネントを使用して、Pythonコードを使用してFMトレーニングと予測を実行できます。 このメソッドは、メソッド1と同じ機能を実装しています。
FMトレーニング-1コンポーネントのパラメータを設定します。
をクリックし、FMトレーニング-1キャンバス上のコンポーネント。
右側のウィンドウのフィールドの設定タブで、次の表に示すフィールドを設定します。
項目
説明
フィーチャー列
key:value形式のフィーチャ列の名前。 複数のキーと値のペアはコンマ (,) で区切ります。
ラベル列
ラベル列の名前。 label列はDOUBLEデータ型である必要があります。
Machine Learning Designerが提供するFMアルゴリズムには、LIBSVM形式のデータが必要です。 データを他の形式からLIBSVMに変換するには、次の図に示すように、ワンホットエンコードコンポーネントを使用し、入力データにフィーチャ列とラベル列が含まれていることを確認します。
右側のパラメーター設定とチューニングで、トレーニングパラメータを設定します。
たとえば、パイプラインに120万件のサンプルデータレコードと1.3万件のフィーチャデータレコードが含まれる場合、トレーニングパラメーターを次の表の推奨値に設定し、他のパラメーターにはデフォルト値を使用することを推奨します。 関連するデータ量に基づいて、トレーニングパラメーターの値を変更できます。
タブ
項目
説明
パラメーター設定
学習率
学習率。 推奨値: 0.005。 トレーニングが発散している場合は、このパラメーターを小さい値に設定します。
寸法
3要素配列で指定されたフィーチャの寸法。 推奨値:
1,1,16
ブロックサイズ
ブロックのサイズ。 関係するフィーチャデータレコードが200万未満の場合は、このパラメーターを1000000に設定することを推奨します。
2百万以上のフィーチャデータレコードが含まれる場合、このパラメーターを設定する必要はありません。
チューニング
数の労働者
使用するワーカーの数。 推奨値: 32。 大量のデータが含まれる場合は、このパラメーターを大きい値に設定します。
ノードあたりのメモリサイズ (MB)
各ノードに割り当てられるメモリサイズ。 推奨値: 16384。 単位:MB。
PyAlink-FM TrainingおよびPyAlink-FM Predictionコンポーネントにコードを追加します。
PyAlink-FMトレーニングコンポーネントをクリックし、次のコードをコードエディターに貼り付けます。
from pyalink.alink import * def main(sources, sinks, parameter): print('start') # Method 1 # train = HugeFmTrainBatchOp().setVectorCol('features').setLabelCol('label').linkFrom(sources[0]) # Method 2 train = HugeFmTrainBatchOp( vectorCol='features', labelCol='label', task='binary_classification', numEpochs=10) # Obtain the training data from input port 0. The trained model is generated from output port 0 and passed downstream. sources[0].link(train).link(sinks[0]) BatchOperator.execute() print('end')
PyAlink-FM Predictionコンポーネントをクリックし、次のコードをコードエディタに貼り付けます。
from pyalink.alink import * def main(sources, sinks, parameter): predictor = HugeFmPredictBatchOp().setPredictionCol("prediction_result")\ .setPredictionDetailCol("prediction_detail").setReservedCols(["label"]) output = predictor.linkFrom(sources[0], sources[1]) # The prediction result is generated from the first output port and passed downstream. output.link(sinks[0]) BatchOperator.execute() print('predict end')
アルゴリズムの実行に使用するコンピューティングリソースを設定します。
キャンバス上の空白の領域をクリックします。 右側のウィンドウの [パイプライン属性] タブで、[AlinkまたはFlinkMLが優先するデフォルトリソース] ドロップダウンリストから [Flink] を選択します。
キャンバスで、PyAlink-FM TrainingコンポーネントとPyAlink-FM Predictionコンポーネントをそれぞれクリックし、右側のウィンドウの [チューニング] タブで次のパラメーターを変更します。
[実行モード]: [Flink (分散)] を選択します。
ワーカーの数: 2を選択します。
キャンバスの左上隅にある [保存] をクリックします。
キャンバスの左上隅にある [実行] アイコンをクリックします。パイプラインを実行します。
パイプラインの実行後、バイナリ分類評価-1キャンバス上のコンポーネントを選択し、ビジュアル分析.
使用されたテンプレートのデータに基づいて、Machine Learning Designerが提供するFMアルゴリズムは、0.92に近い曲線下面積 (AUC) を持つモデルを作成できます。
方法1を使用して生成された評価チャート
方法2を使用して生成された評価チャート
関連ドキュメント
アルゴリズムコンポーネントの詳細については、以下のトピックを参照してください。