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

Artificial Intelligence Recommendation:レコメンデーションシナリオのエンジン設定ケース

最終更新日:Jan 11, 2025

このトピックでは、レコメンデーションシナリオのエンジン設定方法について説明します。レコメンデーションシナリオを例として、RecallConfs、FilterConfs、Feature、ランキング、および再ランキングの基本設定と、オンラインデータソース Hologres および FeatureStore の設定方法を紹介します。

コード例(クリックして詳細を展開)

{
    "HologresConfs": {
        "holo_info": {
            "DSN": "postgres://${AccessKey}:${AccessSecret}@hgpostcn-cn-xxxx-cn-shanghai-vpc-st.hologres.aliyuncs.com:80/test_db?sslmode=disable&connect_timeout=1"
        }
    },
    "FeatureStoreConfs": {
        "fs_info": {
            "RegionId": "cn-shanghai",
            "AccessId": "${AccessKey}",
            "AccessKey": "${AccessSecret}",
            "ProjectName": "projectName"
        }
    },
    "RecallConfs": [
        {
            "Name": "etrec_u2i2i_recall_v1",
            "RecallType": "UserCustomRecall",
            "RecallCount": 300,
            "DaoConf": {
                "AdapterType": "hologres",
                "HologresName": "holo_info",
                "HologresTableName": "home_feed_etrec_u2i2i_score_holo_v1"
            }
        },
        {
            "Name": "user_global_hot_recall_v1",
            "RecallType": "UserGlobalHotRecall",
            "RecallCount": 200,
            "DaoConf": {
                "AdapterType": "hologres",
                "HologresName": "holo_info",
                "HologresTableName": "home_feed_global_hot_holo_v1"
            }
        }
    ],
    "FilterConfs": [
        {
            "Name": "UserExposureFilter",
            "FilterType": "User2ItemExposureFilter",
            "MaxItems": 50,
            "TimeInterval": 604800,
            "WriteLog": true,
            "DaoConf": {
                "AdapterType": "hologres",
                "HologresName": "holo_info",
                "HologresTableName": "exposure_history"
            }
        },
        {
            "Name": "ItemStateFilter",
            "FilterType": "ItemStateFilter",
            "ItemStateDaoConf": {
                "AdapterType": "hologres",
                "HologresName": "holo_info",
                "HologresTableName": "item_status_table_v1",
                "ItemFieldName": "item_id",
                "SelectFields": "is_online"
            },
            "FilterParams": [
                {
                    "Name": "is_online",
                    "Type": "int",
                    "Operator": "equal",
                    "Value": 1
                }
            ]
        }
    ],
    "AlgoConfs": [
        {
            "Name": "home_feed_dbmtl_v1",
            "Type": "EAS",
            "EasConf": {
                "Processor": "EasyRec",
                "ResponseFuncName": "easyrecMutValResponseFunc",
                "Url": "http://xxx.vpc.cn-shanghai.pai-eas.aliyuncs.com/api/predict/home_feed_dbmtl_v1",
                "EndpointType": "DIRECT",
                "Auth": "xxxxx"
            }
        }
    ],
    "SortConfs": [
        {
            "Name": "BoostScoreSortByAuthor",
            "SortType": "BoostScoreSort",
            "Debug": false,
            "BoostScoreConditions": [
                {
                    "Conditions": [
                        {
                            "Name": "author_status",
                            "Domain": "item",
                            "Type": "string",
                            "Value": "teacher",
                            "Operator": "equal"
                        }
                    ],
                    "Expression": "score * 10"
                }
            ]
        }
    ],
    "SortNames": {
        "home_feed": [
            "BoostScoreSortByAuthor"
        ]
    },
    "FilterNames": {
        "default": [
            "UniqueFilter",
            "UserExposureFilter"
        ]
    },

    "RankConf": {
        "home_feed": {
            "RankAlgoList": [
                "home_feed_dbmtl_v1"
            ],
            "RankScore": "${home_feed_dbmtl_v1_probs_is_click}+${home_feed_dbmtl_v1_probs_is_collect_like_comment}",
            "BatchCount": 100,
            "Processor": "EasyRec"
        }
    },
    "FeatureConfs": {
        "home_feed": {
            "AsynLoadFeature": true,
            "FeatureLoadConfs": [
                {
                    "FeatureDaoConf": {
                        "AdapterType": "hologres",
                        "HologresName": "holo_info",
                        "FeatureKey": "user:uid",
                        "UserFeatureKeyName": "user_id",
                        "HologresTableName": "user_table_v1_all_feature_v1_online",
                        "UserSelectFields": "*",
                        "FeatureStore": "user"
                    },
                    "Features": []
                },
                {
                    "FeatureDaoConf": {
                        "AdapterType": "hologres",
                        "HologresName": "holo_info",
                        "ItemFeatureKeyName": "item_id",
                        "FeatureKey": "item:id",
                        "HologresTableName": "item_table_v1_all_feature_v1_online",
                        "ItemSelectFields": "item_id,author",
                        "FeatureStore": "item"
                    },
                    "Features": []
                }
            ]
        }
    },
    "SceneConfs": {
        "home_feed": {
            "default": {
                "RecallNames": [
                    "etrec_u2i2i_recall_v1",
                    "user_global_hot_recall_v1"
                ]
            }
        }
    }
}

エンジン設定を定義するロジック:最初に RecallConfs、FilterConfs、AlgoConfs、および SortConfs の設定を定義し、SceneConfs でそれらを参照する必要があります。たとえば、最初に FilterConfs を定義し、設定名は一意の識別子です。 FilterConfs は FilterNames で、RecallConfs は SceneConfs で、AlgoConfs は RankConfs で、SortConfs は SortNames で参照されます。 home_feed はシナリオ名です。ただし、FilterNames のシナリオ名はdefault で、これは使用するシナリオ設定が見つからない場合は default を使用することを意味します。

次の表に、例の detaljer を示します。

項目

説明

データソース

このケースでは、Hologres と FeatureStore の 2 つのデータソースが設定されています。これらは主に、ユーザー特徴、アイテム特徴、ホットリコール、i2i リコールデータ、ユーザーが既に閲覧したアイテム ID など、オンラインサービスのデータを、露出フィルタリングの基準として保存します。

FeatureStore がオンラインデータソースとして FeatureDB を使用する場合は、FeatureDB のユーザー名(FeatureDBUsername)とパスワード(FeatureDBPassword)を設定する必要があります。 FeatureStore が他のデータソースを使用する場合、これら 2 つのパラメーターを設定する必要はありません。 2 つのデータソースの ${AccessKey}${AccessSecret} は置き換える必要はなく、エンジンが自動的に置き換えを完了します。

リコール

このケースでは、RecallConfs に U2I リコールとグローバルホットリコールの 2 つのリコールを設定します。 2 つのリコールのデータは Hologres から取得されます。さまざまなリコールパラメーターの説明は次のとおりです。

  • Name:リコールのカスタム名。現在のリコール設定の一意の識別子です。

  • RecallType:リコールのタイプ。列挙値です。現在組み込まれているリコールタイプは、リコール設定 を参照してください。

  • RecallCount:リコールの数。

  • AdapterType:リコールデータのデータソースのタイプ。ここでは、Hologres を例として使用します。

  • HologresName:設定されたデータソースの名前。

  • HologresTableName:リコールデータの送信元テーブル。

フィルター

このケースでは、FilterConfs に次の 2 つのフィルタリング方法を設定します。

  • 露出フィルター:事前に Hologres に露出テーブルを作成する必要があります。 詳細については、User2ItemExposureFilter をご参照ください。

  • ステータスフィルター:アイテムのステータスに基づいてフィルタリングできます。たとえば、設定の FilterParams 部分では、is_online=1 のアイテムのみが保持され、それ以外のアイテムは破棄されます。

いくつかのパラメーターの説明:

  • Name:フィルターのカスタム名。

  • FilterType:組み込みフィルタータイプ。サポートされているタイプの詳細については、フィルターの設定 をご参照ください。

  • MaxItems:露出フィルタリング中のデータ項目の制限。SQL の limit に対応します。

  • TimeInterval:露出フィルタリングの時間範囲。たとえば、1 時間以内の露出をフィルタリングする場合は、3600 に設定します。単位:秒。

  • WriteLog:露出フィルタリング中に、今回推奨されたアイテムのリストを露出テーブルに書き込むかどうかを決定します。

  • AdapterType:データソースのタイプ。ここでは、Hologres を例として使用します。

  • HologresName:Hologres の設定名。設定の 3 行目に対応します。

  • HologresTableName:露出テーブルのテーブル名。

  • ItemStateDaoConf:ステータスフィルタリングのためのパラメーター。 HologresTableName は状態テーブルのテーブル名、ItemFieldName はテーブルのプライマリキー、SelectFields はクエリ対象のフィールドです。

特徴量

ユーザー特徴量とアイテム特徴量をエンジンにロードします。ユーザー特徴量はモデルのスコアリングに使用され、アイテム特徴量は主に再ランキングに使用されます。

  • AsynLoadFeature:特徴量を非同期にロードするかどうかを決定します。

  • AdapterType:データソースのタイプ。ここでは、Hologres を例として使用します。

  • HologresName:Hologres 設定の名前。コードの 3 行目に対応します。

  • FeatureKey:user:uid をデフォルトとして、固定の書き方です。ユーザーの uid 属性値を使用してデータベースでクエリすることを意味します。

  • UserFeatureKeyName:ユーザーデータテーブルのプライマリキーフィールド。

  • HologresTableName:ユーザーデータテーブルのテーブル名。

  • UserSelectFields:クエリ時にクエリ対象のフィールド。複数のフィールドはコンマで区切り、* を使用してすべてのフィールドを置き換えることができます。

  • FeatureStore:列挙値は user または item で、クエリされた特徴量がユーザー側またはアイテム側のどちらに保存されるかにそれぞれ対応します。

ランキング

ランキングサービスは最初に AlgoConfs で設定され、複数のランキングサービスを定義できます。 RankConf では、レコメンデーションシナリオを設定して、AlgoConfs で定義されたランキングサービスと、スコアリング式と重み調整を参照します。複数のターゲット予測スコアを重み付けしてから、加算または乗算できます。

AlgoConfs:

  • Name:カスタム名。

  • Type:EAS、静的フィールド。ほとんどのモデルは EAS にデプロイされます。

  • Processor:EasyRec、静的フィールド、Processor のタイプ。

  • ResponseFuncName:easyrecMutValResponseFunc、静的フィールド。

  • Url:モデルサービスのアドレス情報。

  • EndpointType:直接接続方法を使用するかどうかを決定します。直接接続方法はネットワーク損失が少ないです。

  • Auth:モデルサービスのトークン情報。

RankConf:

  • RankAlgoList:スコアリングに使用するモデルサービスを決定します。

  • RankScore:スコアリング式。ルールは、RankAlgoList の名前 + モデルの実際のターゲット値です。

  • BatchCount:スコアリングのバッチ数。

  • Processor:EasyRec、静的フィールド、Processor のタイプ。

再ランキング

このケースでは、SortConfs に次の 2 つの再ランキング戦略を設定します。

  • ブースト戦略:アイテムの属性に基づいてブーストできます。たとえば、BoostScoreSort 設定は、アイテムの author_status 属性値が teacher の場合、モデルスコアに 10 を掛け合わせることを意味します。

  • 多様性戦略:これは、長さ 20 のウィンドウでは、アイテムの作者ディメンションに基づいてアイテムが 1 回だけ表示できることを意味します。

いくつかの設定パラメーターの説明:

  • Name:再ランキング戦略のカスタム名。

  • SortType:組み込みの再ランキング戦略タイプ。サポートされているタイプは、再ランキングの設定 を参照してください。

  • Debug:デバッグモデルを有効にするかどうかを決定します。有効にすると、コンソールにより多くのログが出力され、トラブルシューティングが容易になります。

  • Conditions:アイテムの条件。この条件を満たすアイテムは、Expression の式に従って処理されます。

  • DiversityRules:多様性パラメーター。 Dimensions はディメンションフィールドであり、アイテムはこのフィールドに基づいて多様化されます。 WindowSize はウィンドウサイズ、FrequencySize は異なるディメンション値の最大出現回数です。