すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:FeatureStoreを使用するためのベストプラクティス

最終更新日:Nov 19, 2024

このトピックでは、FeatureStore SDKを使用して、他のAlibaba Cloudサービスを使用せずにレコメンデーションシステムの機能を管理する方法について説明します。

背景情報

推薦システムは、ユーザの関心及び好みに基づいて、個人化されたコンテンツ又は製品をユーザに推薦できる。 ユーザまたはアイテムの特徴抽出および構成は、推奨システムの性能に重要である。 このトピックでは、FeatureStoreを使用してレコメンデーションシステムを構築し、レコメンデーションシステムでさまざまなバージョンのFeatureStore SDKを使用してFeatureStoreが機能データを管理する方法を理解するためのソリューションを提供します。

FeatureStoreの詳細については、「概要」をご参照ください。

FeatureStoreの使用時にご質問がある場合は、DingTalkグループ (ID 34415007523) に参加してテクニカルサポートを行います。

前提条件

このトピックで説明する操作を実行する前に、次の表で説明する要件が満たされていることを確認してください。

サービス

説明

Platform for AI (PAI)

  • PAIがアクティブ化され、PAIワークスペースが作成されます。 詳細については、「PAIの有効化とデフォルトワークスペースの作成」をご参照ください。

  • Alibaba CloudアカウントのAccessKeyペアが取得されます。 詳細については、「AccessKey の作成」をご参照ください。

    AccessKey IDとAccessKeyシークレットを環境変数に格納することを推奨します。 詳細については、「Alibaba Cloud Darabonba SDK For Pythonの使用を開始する」トピックの手順2: 環境変数の設定セクションをご参照ください。

MaxCompute

Hologres

DataWorks

1. データの準備

シミュレートされたテーブルからのデータの同期

ほとんどのレコメンデーションシナリオでは、user feature tableitem feature tablelabel tableのテーブルを用意する必要があります。

この例では、MaxComputeプロジェクトpai_online_project内の、ユーザーテーブル、アイテムテーブル、およびラベルテーブルを含む3つのシミュレートされたテーブルが使用されます。 ユーザーテーブルとアイテムテーブルの各パーティションには、約100,000のデータレコードが含まれ、MaxComputeプロジェクトでは約70 MBのストレージ容量を占めます。 ラベルテーブルの各パーティションには、約450,000のデータレコードが含まれ、MaxComputeプロジェクトでは約5 MBのストレージ容量を占めます。

DataWorksでSQL文を実行して、ユーザーテーブル、アイテムテーブル、およびラベルテーブルのデータをpai_online_projectプロジェクトからMaxComputeプロジェクトに同期する必要があります。 シミュレートされたテーブルのデータを同期するには、次の手順を実行します。

  1. DataWorks コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、[データ開発とガバナンス] > [DataStudio] を選択します。

  3. [DataStudio] ページで、作成したDataWorksワークスペースを選択し、[DataStudioに移動] をクリックします。

  4. ポインタを [作成] に移動し、[ノードの作成] > [MaxCompute] > [ODPS SQL] を選択します。 [ノードの作成] ダイアログボックスで、次の表に示すノードパラメーターを設定します。

    パラメーター

    説明

    エンジンインスタンス

    作成したMaxCompute計算エンジンインスタンスを選択します。

    ノードタイプ

    [ノードタイプ] ドロップダウンリストから [ODPS SQL] を選択します。

    パス

    ビジネスフロー> ワークフロー> MaxComputeを選択します。

    名前

    カスタム名を指定します。

  5. [確認]をクリックします。

  6. 作成したノードのタブで、次のSQL文を実行して、ユーザーテーブル、アイテムテーブル、およびラベルテーブルのデータをpai_online_projectプロジェクトからMaxComputeプロジェクトに同期します。 リソースグループとして作成した排他リソースグループを選択します。

    ユーザーテーブルからデータを同期するrec_sln_demo_user_table_preprocess_all_feature_v1 (クリックして詳細を表示)

    CREATE TABLE IF NOT EXISTS rec_sln_demo_user_table_preprocess_all_feature_v1
    like pai_online_project.rec_sln_demo_user_table_preprocess_all_feature_v1
    STORED AS ALIORC  
    LIFECYCLE 90;
    
    INSERT OVERWRITE TABLE rec_sln_demo_user_table_preprocess_all_feature_v1 PARTITION (ds)
    SELECT *
    FROM pai_online_project.rec_sln_demo_user_table_preprocess_all_feature_v1
    WHERE ds >= '20231022' and ds <='20231024'

    上記のSQL文を実行すると、次のパーティションのデータを取得できます。

    • ds=20231022

    • ds=20231023

    • ds=20231024

    アイテムテーブルからデータを同期するrec_sln_demo_item_table_preprocess_all_feature_v1 (クリックして詳細を表示)

    CREATE TABLE IF NOT EXISTS rec_sln_demo_item_table_preprocess_all_feature_v1
    like pai_online_project.rec_sln_demo_item_table_preprocess_all_feature_v1
    STORED AS ALIORC  
    LIFECYCLE 90;
    
    INSERT OVERWRITE TABLE rec_sln_demo_item_table_preprocess_all_feature_v1 PARTITION(ds)
    SELECT *
    FROM pai_online_project.rec_sln_demo_item_table_preprocess_all_feature_v1
    WHERE ds >= '20231022' and ds <='20231024'

    上記のSQL文を実行すると、次のパーティションのデータを取得できます。

    • ds=20231022

    • ds=20231023

    • ds=20231024

    ラベルテーブルrec_sln_demo_label_tableからデータを同期する (クリックして詳細を表示)

    CREATE TABLE IF NOT EXISTS rec_sln_demo_label_table
    like pai_online_project.rec_sln_demo_label_table
    STORED AS ALIORC  
    LIFECYCLE 90;
    
    INSERT OVERWRITE TABLE rec_sln_demo_label_table PARTITION (ds)
    SELECT *
    FROM pai_online_project.rec_sln_demo_label_table
    WHERE ds >= '20231022' and ds <='20231024'

    上記のSQL文を実行すると、次のパーティションのデータを取得できます。

    • ds=20231022

    • ds=20231023

    • ds=20231024

上記の手順を実行した後、ワークスペースでユーザーテーブルrec_sln_demo_user_table_preprocess_all_feature_v1、アイテムテーブルrec_sln_demo_item_table_preprocess_all_feature_v1、およびラベルテーブルrec_sln_demo_label_tableを表示できます。 これらのテーブルは、以降の操作で使用されます。

データストアの設定

ほとんどの場合、MaxComputeプロジェクトなどのオフラインデータストアと、FeatureStoreでHologresインスタンス、GraphComputeインスタンス、Tablestoreインスタンスなどのオンラインデータストアを設定する必要があります。 この例では、MaxComputeプロジェクトはオフラインデータストアとして設定され、Hologresインスタンスはオンラインデータストアとして設定されています。

  1. PAI コンソールにログインします。 左側のナビゲーションウィンドウで、[データの準備] > [FeatureStore] を選択します。

  2. FeatureStoreページで、ドロップダウンリストからワークスペースを選択し、[FeatureStoreの入力] をクリックします。

  3. MaxComputeデータストアを設定します。

    1. [ストア] タブで、[ストアの作成] をクリックします。 [ストアの作成] パネルで、MaxComputeデータストアの次の表に示すパラメーターを設定します。

      パラメーター

      説明

      タイプ

      [タイプ] ドロップダウンリストから [MaxCompute] を選択します。

      名前

      カスタム名を指定します。

      MaxComputeプロジェクト名

      作成したMaxComputeプロジェクトを選択します。

    2. 承認ステートメントをコピーし、[移動] をクリックしてデータをHologresインスタンスに同期します。 DataWorksでコピーされたステートメントを実行すると、HologresインスタンスはMaxComputeプロジェクトのデータを同期する権限が付与されます。

      説明

      Hologresインスタンスに権限を付与するには、アカウントに管理者権限があることを確認します。 詳細については、「コマンドを使用したユーザー権限の管理」または「MaxComputeコンソールでのユーザー権限の管理」をご参照ください。

    3. [送信] をクリックします。

  4. Hologresデータストアを設定します。

    1. [ストア] タブで、[ストアの作成] をクリックします。 ストアの作成パネルで、次の表に示すパラメーターをHologresデータストアに設定します。

      パラメーター

      説明

      タイプ

      タイプドロップダウンリストからHologresを選択します。

      名前

      カスタム名を指定します。

      インスタンスID

      作成したHologresインスタンスを選択します。

      データベース名

      Hologresインスタンスで作成したデータベースを選択します。

    2. [送信] をクリックします。

    3. Hologresインスタンスへのアクセス権限を付与します。 詳細については、「データソースの設定」をご参照ください。

2. プロジェクトを作成し、FeatureStoreでフィーチャテーブルを登録する

ビジネス要件に基づいて、PAIコンソールまたはFeatureStore SDKを使用して、プロジェクトを作成し、FeatureStoreで機能テーブルを登録できます。 FeatureStore SDKを使用して、トレーニングデータセットをエクスポートし、データを同期する必要があります。 したがって、プロジェクトを作成してPAIコンソールで機能テーブルを登録した後でも、FeatureStore SDK for Pythonをインストールする必要があります。

方法1: PAIコンソールを使用する

  1. FeatureStoreでプロジェクトを作成します。

    1. PAI コンソールにログインします。 左側のナビゲーションウィンドウで、[データの準備] > [FeatureStore] を選択します。

    2. FeatureStoreページで、ドロップダウンリストからワークスペースを選択し、[FeatureStoreの入力] をクリックします。

    3. [プロジェクトの作成] をクリックします。 [プロジェクトの作成] ページで、次の表に示すプロジェクトパラメーターを設定します。

      パラメーター

      説明

      名前

      カスタム名を指定します。 この例では、fs_demoが使用されています。

      説明

      カスタム説明を入力します。

      Offline Store (オフラインストア)

      設定したMaxComputeデータストアを選択します。

      オンラインストア (オンラインストア)

      設定したHologresデータストアを選択します。

    4. [送信] をクリックします。

  2. フィーチャーエンティティを作成します。

    1. FeatureStoreページで、作成したプロジェクトを見つけ、プロジェクト名をクリックして [プロジェクトの詳細] ページに移動します。

    2. [フィーチャーエンティティ] タブで、[フィーチャーエンティティの作成] をクリックします。 [フィーチャーエンティティの作成] パネルで、次の表に示すパラメーターをユーザーフィーチャーエンティティに設定します。

      パラメーター

      説明

      機能エンティティ名

      カスタム名を指定します。 この例では、userが使用されます。

      Join Id

      このパラメーターをuser_idに設定します。

    3. [送信] をクリックします。

    4. [機能エンティティの作成] をクリックします。 [フィーチャーエンティティの作成] パネルで、アイテムフィーチャーエンティティの次の表に示すパラメーターを設定します。

      パラメーター

      説明

      機能エンティティ名

      カスタム名を指定します。 この例では、itemが使用されます。

      Join Id

      このパラメーターをitem_idに設定します。

    5. [送信] をクリックします。

  3. フィーチャビューを作成します。

    1. [プロジェクトの詳細] ページの [機能ビュー] タブで、[機能ビューの作成] をクリックします。 [フィーチャービューの作成] パネルで、次の表に示すパラメーターをユーザーフィーチャービューに設定します。

      パラメーター

      説明

      表示名

      カスタム名を指定します。 この例では、user_table_preprocess_all_feature_v1が使用されています。

      タイプ

      [オフライン] を選択します。

      書き込みモード

      [オフラインテーブルの使用] を選択します。

      ストア

      設定したMaxComputeデータストアを選択します。

      機能テーブル

      準備したユーザーテーブルrec_sln_demo_user_table_preprocess_all_feature_v1を選択します。

      Featureフィールド

      user_id主キーフィールドを選択します。

      オンライン機能テーブルの同期

      [はい] を選択します。

      機能エンティティ

      ユーザーを選択します。

      機能ライフサイクル

      デフォルト値を使用します。

    2. [送信] をクリックします。

    3. [機能ビューの作成] をクリックします。 [フィーチャビューの作成] パネルで、アイテムフィーチャビューの次の表に示すパラメーターを設定します。

      パラメーター

      説明

      表示名

      カスタム名を指定します。 この例では、item_table_preprocess_all_feature_v1が使用されています。

      タイプ

      [オフライン] を選択します。

      書き込みモード

      [オフラインテーブルの使用] を選択します。

      ストア

      設定したMaxComputeデータストアを選択します。

      機能テーブル

      準備したアイテムテーブルrec_sln_demo_item_table_preprocess_all_feature_v1を選択します。

      Featureフィールド

      item_id主キーフィールドを選択します。

      オンライン機能テーブルの同期

      [はい] を選択します。

      機能エンティティ

      アイテムを選択します。

      機能ライフサイクル

      デフォルト値を使用します。

    4. [送信] をクリックします。

  4. ラベルテーブルを作成します。

    1. [プロジェクトの詳細] ページの [ラベルテーブル] タブで、[ラベルテーブルの作成] をクリックします。 [ラベルテーブルの作成] パネルで、ラベルテーブルの次の表に示すパラメーターを設定します。

      パラメーター

      説明

      ストア

      設定したMaxComputeデータストアを選択します。

      テーブル名

      準備したラベルテーブルrec_sln_demo_label_tableを選択します。

    2. [送信] をクリックします。

  5. モデルフィーチャーを作成します。

    1. [プロジェクトの詳細] ページの [モデルフィーチャ] タブで、[モデルフィーチャの作成] をクリックします。 [モデルフィーチャーの作成] パネルで、次の表に示すパラメーターをモデルフィーチャーに設定します。

      パラメーター

      説明

      モデル機能名

      カスタム名を指定します。 この例では、fs_rank_v1が使用されます。

      フィーチャーの選択

      作成したユーザーフィーチャビューとアイテムフィーチャビューを選択します。

      ラベルテーブル名

      作成したラベルテーブルrec_sln_demo_label_tableを選択します。

    2. [送信] をクリックします。

    3. [モデルフィーチャ] タブで、作成したモデルフィーチャを見つけ、モデルフィーチャの名前をクリックします。

    4. [モデル機能の詳細] パネルの [基本情報] タブで、[テーブル名のエクスポート] パラメーターの値を表示します。 この例では、Export Table Nameパラメーターの値はfs_demo_fs_rank_v1_trainning_setです。 このテーブルを使用して、フィーチャを生成し、モデルをトレーニングできます。

  6. Python用FeatureStore SDKをインストールします。 詳細については、このトピックの「FeatureStoreを使用してレコメンデーションシステムの機能を管理する」を参照してください。

方法2: Python用のFeatureStore SDKの使用

  1. DataWorks コンソールにログインします。

  2. 左側のナビゲーションウィンドウで [リソースグループ] をクリックします。

  3. [排他的リソースグループ] タブで、管理するリソースグループを見つけます。 [操作] 列のアイコンの上にimage.pngポインターを移動し、[O&Mアシスタント] を選択します。

  4. [コマンドの作成] をクリックします。 [コマンドの作成] パネルで、次の表に示すコマンドパラメーターを設定します。

    パラメーター

    説明

    Command Name

    カスタム名を指定します。 この例では、installが使用されます。

    Command Type

    [手動インストール] (pipコマンドを実行してサードパーティパッケージをインストールすることはできません) を選択します。

    Command Content

    /home/tops/bin/pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple https://feature-store-py.oss-cn-beijing.aliyuncs.com/package/feature_store_py-1.3.1-py3-none-any.whl

    タイムアウト

    タイムアウト期間を指定します。

  5. [作成] をクリックします。

  6. [コマンドの実行] をクリックします。 表示されるメッセージで、[実行] をクリックします。

  7. コマンドの最新のステータスを表示するには、[更新] をクリックします。 コマンドの状態が [成功] に変わると、FeatureStore SDKがインストールされます。

FeatureStore SDKの使用方法の詳細については、「DSWギャラリー」をご参照ください。

3. ルーチンデータ同期ノードの設定

モデルを公開する前に、定期的なデータ同期ノードを設定して、オフラインデータストアからオンラインデータストアにデータを定期的に同期する必要があります。 その後、オンラインデータストアからデータをリアルタイムで読み取ることができます。 この例では、ユーザーテーブルとアイテムテーブルのデータを定期的に同期させる必要があります。 ルーチンデータ同期ノードを設定するには、次の手順を実行します。

  1. DataWorks コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、[データ開発とガバナンス] > [DataStudio] を選択します。

  3. [DataStudio] ページで、作成したDataWorksワークスペースを選択し、[DataStudioに移動] をクリックします。

  4. ユーザーテーブルのデータを定期的に同期します。

    1. ポインタを [作成] に移動し、[ノードの作成] > [MaxCompute] > [PyODPS 3] を選択します。

    2. 次のコードをコードエディターにコピーします。 このコードは、user_table_preprocess_all_feature_v1フィーチャビューからのデータを定期的に同期するために使用されます。

      from feature_store_py.fs_client import FeatureStoreClient
      import datetime
      from feature_store_py.fs_datasource import MaxComputeDataSource
      import sys
      
      cur_day = args['dt']
      print('cur_day = ', cur_day)
      
      access_key_id = o.account.access_id
      access_key_secret = o.account.secret_access_key
      fs = FeatureStoreClient(access_key_id=access_key_id, access_key_secret=access_key_secret, region='cn-beijing')
      cur_project_name = 'fs_demo'
      project = fs.get_project(cur_project_name)
      
      feature_view_name = 'user_table_preprocess_all_feature_v1'
      batch_feature_view = project.get_feature_view(feature_view_name)
      task = batch_feature_view.publish_table(partitions={'ds':cur_day}, mode='Overwrite')
      task.wait()
      task.print_summary()
    3. タブの右側にある [プロパティ] をクリックします。 [プロパティ] パネルで、次の表に示すスケジューリングパラメーターを設定します。

      パラメーター

      説明

      スケジューリングパラメーター

      パラメーター名

      このパラメーターをdtに設定します。

      パラメーター値

      このパラメーターを $[yyyymmdd-1] に設定します。

      リソースグループ

      リソースグループ

      作成した排他的リソースグループを選択します。

      依存関係

      作成したユーザーテーブルを選択します。

    4. ノードの設定とテストが完了したら、ノードの設定を保存して送信します。

    5. ノードのデータを埋め戻します。 詳細については、このトピックの「データテーブルの同期」セクションをご参照ください。

  5. アイテムテーブルのデータを定期的に同期します。

    1. ポインタを [作成] に移動し、[ノードの作成] > [MaxCompute] > [PyODPS 3] を選択します。 [ノードの作成] ダイアログボックスで、ノードパラメーターを設定します。

    2. [確認]をクリックします。

    3. 次のコードをコードエディターにコピーします。

      item_table_preprocess_all_feature_v1フィーチャービューからデータを同期する (クリックして詳細を表示)

      from feature_store_py.fs_client import FeatureStoreClient
      import datetime
      from feature_store_py.fs_datasource import MaxComputeDataSource
      import sys
      
      cur_day = args['dt']
      print('cur_day = ', cur_day)
      
      access_key_id = o.account.access_id
      access_key_secret = o.account.secret_access_key
      fs = FeatureStoreClient(access_key_id=access_key_id, access_key_secret=access_key_secret, region='cn-beijing')
      cur_project_name = 'fs_demo'
      project = fs.get_project(cur_project_name)
      
      feature_view_name = 'item_table_preprocess_all_feature_v1'
      batch_feature_view = project.get_feature_view(feature_view_name)
      task = batch_feature_view.publish_table(partitions={'ds':cur_day}, mode='Overwrite')
      task.wait()
      task.print_summary()
    4. タブの右側にある [プロパティ] をクリックします。 [プロパティ] パネルで、次の表に示すスケジューリングパラメーターを設定します。

      パラメーター

      説明

      スケジューリングパラメーター

      パラメーター名

      このパラメーターをdtに設定します。

      パラメーター値

      このパラメーター $[yyyymmdd-1] を設定します。

      リソースグループ

      リソースグループ

      作成した排他的リソースグループを選択します。

      依存関係

      作成したアイテムテーブルを選択します。

    5. ノードの設定とテストが完了したら、ノードの設定を保存して送信します。

    6. ノードのデータを埋め戻します。 詳細については、このトピックの「データテーブルの同期」セクションをご参照ください。

  6. データが同期されたら、同期された最新の機能をHologresデータストアで表示します。

4. トレーニングデータセットのエクスポートExport a training dataset

  1. DataWorks コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、[データ開発とガバナンス] > [DataStudio] を選択します。

  3. [DataStudio] ページで、作成したDataWorksワークスペースを選択し、[DataStudioに移動] をクリックします。

  4. ポインタを [作成] に移動し、[ノードの作成] > [MaxCompute] > [PyODPS 3] を選択します。 [ノードの作成] ダイアログボックスで、次の表に示すノードパラメーターを設定します。

    パラメーター

    説明

    エンジンインスタンス

    作成したMaxCompute計算エンジンインスタンスを選択します。

    ノードタイプ

    このパラメーターをPyODPS 3に設定します。

    パス

    ビジネスフロー> ワークフロー> MaxComputeを選択します。

    名前

    カスタム名を指定します。

  5. [確認]をクリックします。

  6. 次のコードをコードエディターにコピーします。

    from feature_store_py.fs_client import FeatureStoreClient
    from feature_store_py.fs_project import FeatureStoreProject
    from feature_store_py.fs_datasource import LabelInput, MaxComputeDataSource, TrainingSetOutput
    from feature_store_py.fs_features import FeatureSelector
    from feature_store_py.fs_config import LabelInputConfig, PartitionConfig, FeatureViewConfig
    from feature_store_py.fs_config import TrainSetOutputConfig, EASDeployConfig
    import datetime
    import sys
    
    cur_day = args['dt']
    print('cur_day = ', cur_day)
    offset = datetime.timedelta(days=-1)
    pre_day = (datetime.datetime.strptime(cur_day, "%Y%m%d") + offset).strftime('%Y%m%d')
    print('pre_day = ', pre_day)
    
    
    access_key_id = o.account.access_id
    access_key_secret = o.account.secret_access_key
    fs = FeatureStoreClient(access_key_id=access_key_id, access_key_secret=access_key_secret, region='cn-beijing')
    cur_project_name = 'fs_demo'
    project = fs.get_project(cur_project_name)
    
    label_partitions = PartitionConfig(name = 'ds', value = cur_day)
    label_input_config = LabelInputConfig(partition_config=label_partitions)
    
    user_partitions = PartitionConfig(name = 'ds', value = pre_day)
    feature_view_user_config = FeatureViewConfig(name = 'user_table_preprocess_all_feature_v1',
    partition_config=user_partitions)
    
    item_partitions = PartitionConfig(name = 'ds', value = pre_day)
    feature_view_item_config = FeatureViewConfig(name = 'item_table_preprocess_all_feature_v1',
    partition_config=item_partitions)
    feature_view_config_list = [feature_view_user_config, feature_view_item_config]
    train_set_partitions = PartitionConfig(name = 'ds', value = cur_day)
    train_set_output_config = TrainSetOutputConfig(partition_config=train_set_partitions)
    
    
    model_name = 'fs_rank_v1'
    cur_model = project.get_model(model_name)
    task = cur_model.export_train_set(label_input_config, feature_view_config_list, train_set_output_config)
    task.wait()
    print("task_summary = ", task.task_summary)
  7. タブの右側にある [プロパティ] をクリックします。 [プロパティ] パネルで、次の表に示すスケジューリングパラメーターを設定します。

    パラメーター

    説明

    スケジューリングパラメーター

    パラメーター名

    このパラメーターをdtに設定します。

    パラメーター値

    このパラメーターを $[yyyymmdd-1] に設定します。

    リソースグループ

    リソースグループ

    作成した排他的リソースグループを選択します。

    依存関係

    作成したユーザーテーブルとアイテムテーブルを選択します。

  8. ノードの設定とテストが完了したら、ノードの設定を保存して送信します。

  9. ノードのデータを埋め戻します。 詳細については、このトピックの「シミュレートされたテーブルからのデータの同期」をご参照ください。

5。 FeatureStore SDKのインストールと使用

Go用のFeatureStore SDK

FeatureStore SDK for Goはオープンソースです。 詳細については、「aliyun-pai-featurestore-go-sdk」をご参照ください。

  1. FeatureStore SDK for Goのインストール

    次のコードを実行して、FeatureStore SDK for Goをインストールします。

    go get github.com/aliyun/aliyun-pai-featurestore-go-sdk/v2
  2. FeatureStore SDK for Goの使用

    1. 次のコマンドを実行して、クライアントを初期化します。

      accessId := os.Getenv("AccessId") 
      accessKey := os.Getenv("AccessKey") 
      regionId := "cn-hangzhou" projectName := "fs_test_ots" 
      
      client, err := NewFeatureStoreClient(regionId, accessId, accessKey, projectName)
      説明

      FeatureStore SDKがオンラインデータストアに直接接続できるようにするには、FeatureStoreクライアントを仮想プライベートクラウド (VPC) で実行する必要があります。 たとえば、FeatureStore SDKは、特定のVPC経由でのみHologresインスタンスまたはGraphComputeインスタンスにアクセスできます。

    2. フィーチャビューからフィーチャを取得します。

      // get project by name project, err := client.GetProject("fs_test_ots") 
      if err != nil {     
      	// t.Fatal(err) 
      } 
      // get featureview by name 
      user_feature_view := project.GetFeatureView("user_fea") 
      if user_feature_view == nil {     
      	// t.Fatal("feature view not exist") 
      } 
      
      // get online features 
      features, err := user_feature_view.GetOnlineFeatures([]interface{}{"100043186", "100060369"}, []string{"*"}, nil)

      上記のコードでは、[]string{"*"} は、フィーチャビュー内のすべてのフィーチャが取得されることを示します。 取得する機能を指定することもできます。

      レスポンス例:

      [     
      {         
      "city":"Hefei",    "follow_cnt":1,         "gender":"male",         "user_id":"100043186"    
       },     {                     
       "city":"",         "follow_cnt":5,         "gender":"male",         "user_id":"100060369"     
      } 
      ]
    3. モデルフィーチャからフィーチャデータを取得します。

      各モデル特徴は、複数の特徴エンティティに関連付けることができる。 複数の結合IDを指定して、対応するフィーチャを一度に取得できます。

      次のサンプルコードでは、user_iditem_idの2つのjoin idを指定しています。 各結合IDに対して、同じ数の値を指定する必要があります。

      // get project by name project, err := client.GetProject("fs_test_ots") 
      if err != nil {     
      	// t.Fatal(err) 
      }
      
      // get ModelFeature by name 
      model_feature := project.GetModelFeature("rank") 
      if model_feature == nil {     
      	// t.Fatal("model feature not exist") 
      } 
      
      // get online features 
      features, err := model_feature.GetOnlineFeatures(map[string][]interface{}{"user_id": {"100000676", "100004208"}, "item_id":{"238038872", "264025480"}} )

      レスポンス例:

      [     
      {         
      "age":26,         "author":100015828,         "category":"14",         "city":"Shenyang",         "duration":63,         "gender":"male",         "item_id":"238038872",         "user_id":"100000676"    
       },     {         
      "age":23,         "author":100015828,         "category":"15",         "city":"Xi'an",         "duration":22,         "gender":"male",         "item_id":"264025480",         "user_id":"100004208"    
       }
       ]
      
      

      フィーチャエンティティを指定して、そのフィーチャを取得することもできます。

      レスポンス例:

      [    
       {         
      "age":26,         "city":"Shenyang",         "gender":"male",         "user_id":"100000676"    
       },     {        
       "age":23,         "city":"Xi'an",         "gender":"male",         "user_id":"100004208"    
       } 
      ]

Java用FeatureStore SDK

FeatureStore SDK for Javaはオープンソースです。 詳細については、「aliyun-pai-featurestore-java-sdk」をご参照ください。

この例では、Hologresデータストアが使用されています。

  1. 次のコードを実行して環境変数をロードし、サービスを初期化します。

    public static String accessId = "";
    public static String accessKey = "";
    # Configure the host based on the region in which the service resides.
    public static String host = "";
    # Obtain the AccessKey ID and AccessKey secret from the configured environment variables.
    static {
        accessId = System.getenv("ACCESS_KEY_ID");
        accessKey = System.getenv("ACCESS_KEY_SECRET");
    }
  2. リージョンID、AccessKey ID、AccessKeyシークレット、およびプロジェクト名を含むConfigurationクラスを初期化します。

    Configuration cf = new Configuration("cn-hangzhou",Constants.accessId,Constants.accessKey,"ele28");
    cf.setDomain(Constants.host);// By default, the VPC environment is used.
  3. クライアントを初期化します。

    ApiClient apiClient = new ApiClient(cf);
    # Initialize the FeatureStore client.
    FeatureStoreClient featureStoreClient = new FeatureStoreClient(apiClient);
  4. プロジェクト名を取得します。 この例では、プロジェクトの名前はele28です。

    Project project=featureStoreClient.getProject("ele28");
    if(project==null){
        throw new RuntimeException("Project not found");
    }
  5. プロジェクトのフィーチャビューを取得します。 この例では、機能ビューの名前はmc_testです。

    FeatureView featureView=project.getFeatureView("mc_test");
    if (featureView == null) {
        throw  new RuntimeException("FeatureView not found");
    }
  6. リアルタイムフィーチャビューからフィーチャデータを取得します。

    Map<String,String> m1=new HashMap<>();
    m1.put("gender","gender1"); // Configure an alias.                                                                                                                                                                                                 user_id='100027781'(FS_INT64) age='28'(FS_INT64) city='null'(FS_STRING) item_cnt='0'(FS_INT64) follow_cnt='0'(FS_INT64) follower_cnt='2'(FS_INT64) register_time='1697641608'(FS_INT64) tags='0'(FS_STRING) gender1='female'(FS_STRING) ---------------

    String[]{"*"} を使用して、フィーチャビューからすべてのフィーチャを取得できます。 取得する機能を指定することもできます。

    FeatureResult featureResult1=featureView.getOnlineFeatures(new String[]{"100017768","100027781","100072534"},new String[]{"*"},m1);

    レスポンス例:

    while(featureResult1.next()){
        System.out.println("---------------");
        # Specify the feature name.
        for(String m:featureResult1.getFeatureFields()){
            System.out.print(String.format("%s=%s(%s) ",m,featureResult1.getObject(m),featureResult1.getType(m)));
        }
        System.out.println("---------------");
    }   

    レスポンス例:

    ---------------
    user_id='100017768'(FS_INT64)  age='28'(FS_INT64)  city='Dongguan'(FS_STRING) item_cnt='1'(FS_INT64)  follow_cnt='1'(FS_INT64)  follower_cnt='0'(FS_INT64) register_time='1697202320'(FS_INT64)  tags='1,2'(FS_STRING)  gender1='female'(FS_STRING) 
    ---------------
  7. モデルを取得します。

    Model model=project.getModelFeature("model_t1");
    if(model==null){
        throw new RuntimeException("Model not found");
    }
    1. モデルフィーチャーからデータを取得します。

      次のサンプルコードでは、user_idとitem_idの2つの結合IDを指定します。 user_idに指定する値の数は、item_idと同じである必要があります。 この例では、user_idとitem_idに指定された値は1つだけです。

      Map<String, List<String>> m2=new HashMap<>(); 
      m2.put("user_id",Arrays.asList("101683057"));
      m2.put("item_id",Arrays.asList("203665415"));
    2. モデルフィーチャに関連付けられているユーザーフィーチャエンティティのすべてのフィーチャデータを取得します。

      FeatureResult featureResult2 = model.getOnlineFeaturesWithEntity(m2,"user");

      レスポンス例:

      ---------------
      user_id='101683057' age='28' city='Shenzhen' follower_cnt='234' follow_cnt='0' gender='male' item_cnt='0' register_time='1696407642' tags='2' item_id='203665415' author='132920407' category='14' click_count='0' duration='18.0' praise_count='10' pub_time='1698218997' title='#Idiom story' 
      ---------------

C ++ 用のFeatureStore SDK

FeatureStore SDK for C ++ は、スコアリングサービスとしてデプロイされたEasyRecプロセッサと統合されています。 FeatureStore SDK for C ++ は、機能抽出、キャッシュ管理、および読み取り操作に最適化されており、大規模な推奨シナリオに対応する高性能で低遅延のソリューションを提供します。 FeatureStore SDK for C ++ には、次の機能があります。

  • メモリ使用量の削減: FeatureStore SDK for C ++ を使用して大量の複雑なフィーチャデータを処理すると、特にフィーチャの負荷が高い場合に、メモリ使用量が大幅に削減されます。

  • 高速化された機能抽出: FeatureStore SDK for C ++ は、HologresインスタンスやGraphComputeインスタンスなどのオンラインデータストアから機能データを抽出する代わりに、MaxComputeデータストアからEASキャッシュに機能データを抽出します。 これにより、特徴データをロードするのに必要な時間が短縮される。 さらに、MaxComputeはより高い安定性とより優れた拡張性を提供し、オンラインストレージのスケールアップによる影響を軽減します。

  • モデルスコアの改善: FeatureStore SDK for C ++ は、tp100スコアリング指標をさらに改善し、より安定した応答時間をサポートし、タイムアウト要求の数を削減します。 これにより、推奨サービスの信頼性とユーザーエクスペリエンスが向上します。

関連ドキュメント