コールバック API
PAI-Rec には、レコメンデーションリクエストの時点でリクエストパラメーターやリアルタイムのユーザー特徴、アイテム特徴などのリアルタイム特徴をログに記録する、組み込みのコールバック API が含まれています。これらのログは、データ分析、オフラインモデルトレーニング、またはオンライン学習に使用できます。
背景
リアルタイム特徴は、レコメンデーションシステムの重大な部分です。これらには、リアルタイムの統計的特徴やリアルタイムのシーケンス特徴、特にユーザーシーケンス特徴が含まれます。リアルタイム特徴を追加すると、通常、レコメンデーションシステムのパフォーマンスが向上します。しかし、リアルタイム特徴には高い精度が求められます。タイムウィンドウによってデータを関連付けるなど、オフラインメソッドを使用してリアルタイム特徴を推論すると、問題が発生する可能性があります。システムリンク間のレイテンシーを推定することは困難です。これにより、不正確な特徴や特徴の漏洩が発生する可能性があります。これらの不正確な特徴を取得モデルやソートモデルに追加することは、しばしば逆効果です。
精度を確保するため、レコメンデーションリクエスト R_i に対応する特定のトレーニングサンプル S_i について、リアルタイム特徴はリクエストの正確な瞬間にキャプチャされたユーザー特徴とアイテム特徴でなければなりません。したがって、リアルタイム特徴を記録する最適なタイミングは、レコメンデーションリクエストがレコメンデーションサービスに到達したときです。アルゴリズムがレコメンデーション結果を計算している間に、リクエスト ID、リアルタイムのユーザー特徴、リアルタイムのアイテム特徴を DataHub や Kafka などのメッセージキューに記録できます。その後、ログを MaxCompute (ODPS) に同期します。

API 定義
API エンドポイント
/api/callback
リクエストパラメーター
パラメーター | 型 | 必須 | 説明 | 例 |
scene_id | string | はい | ホームページのレコメンデーション | homepage |
uid | string | はい | ユーザー登録 ID | 85578510 |
request_id | string | はい | リクエストの一意の識別子 | d9cb1c8d*** |
features | json string | いいえ | ユーザー特徴 | {"age":25, "city":"beijing"} |
item_list | json list | はい | 推奨アイテム ID のリスト | [{"item_id":"99886867"}, {"item_id":"99888623"}] |
request_info | json string | いいえ | リクエスト情報 | {"recom_id":"12334234"} |
リクエスト例
curl 'http://host/api/callback' -d '{"uid":"84603208","request_id":"d9cb1c8d-4d3f-491b-9ea3-380481dabde3","scene_id":"homepage","features":{"age":25, "city":"beijing"}, "item_list":[{"item_id":"113939841"},{"item_id":"113764910"}],"request_info":{"recom_id":"1111111"}}'レスポンスデータ
{
"code":200,
"msg":"success",
}フィールド | 型 | 説明 | 例 |
code | integer | リターンコード識別子 | API 状態コード。200 は成功を示します。 |
msg | string | メッセージ | success は成功を示します。 |
コールバック構成
コールバックフローには、主に 2 つの部分があります。
ユーザー特徴とアイテム特徴をロードします。
多くの場合、EasyRec モデルを使用すると、アイテム特徴はモデルに含まれます。モデルが生成する Feature Generation (FG) 特徴を取得するには、EasyRec モデルにリクエストする必要があります。
特徴データを DataHub などのメッセージキューに書き込むことができます。
"CallBackConfs": {
"home_feed": {
"DataSource": {
"Name": "pairec_callback_dh",
"Type": "datahub"
},
"RankConf": {
"RankAlgoList": [
"ali_rnk_v2_woid_callback_public_v2"
],
"ContextFeatures": [
"none"
],
"Processor": "EasyRec"
},
"RawFeatures": false,
"RawFeaturesRate": 0,
"ItemSize": 100,
"ItemSizeRate": 10,
"UseUserFeatures": true
}
}home_feed はシーン名です。このパラメーターは、データがログに記録されるシーンを指定します。
DataSource
Type: メッセージキューのタイプ。現在、DataHub のみがサポートされています。
pairec_callback_dh: DataHub データソースの名前。この名前は DatahubConfs で見つけることができます。
RankConf: モデル構成。これは、DPI エンジンサービスのモデル構成と同じです。モデルによって生成された特徴がない場合は、これを構成する必要はありません。
RawFeatures: アイテムの生の特徴を記録するかどうかを指定します。記録するには、このパラメーターを true に設定します。true に設定した場合は、RawFeaturesRate も 0 から 100 までのサンプリング比率に設定する必要があります。
ItemSize: コールバックのアイテム数を制御します。レコメンデーション API が返すアイテムが多すぎる場合は、このパラメーターを使用して数を制限します。コールバックは最初の ItemSize アイテムのみを処理します。このパラメーターを設定しない場合、レコメンデーションフローによって配信されるアイテム数がデフォルトで使用されます。
ItemSizeRate: 比率に基づいてアイテム数をサンプリングします。値は 1 から 100 までです。ItemSize と ItemSizeRate の両方を設定した場合、システムはまずリストを ItemSize アイテムに切り捨て、次に切り捨てられたリストから ItemSizeRate に基づいてサンプリングします。
UseUserFeatures: AutoInvokeCallBack を使用する場合、レコメンデーションフローから取得したユーザー特徴を使用するかどうかを指定します。このパラメーターを設定した場合、コールバックフローの FeatureConfs でユーザー特徴取得を構成する必要はありません。
データソース構成
"DatahubConfs": {
"pairec_callback_dh": {
"Endpoint": "http://dh-cn-hangzhou-int-vpc.aliyuncs.com",
"ProjectName": "${ProjectName}",
"TopicName": "pairec_callback_log",
"Schemas": [
{
"Field": "request_id",
"Type": "string"
},
{
"Field": "module",
"Type": "string"
},
{
"Field": "scene",
"Type": "string"
},
{
"Field": "request_time",
"Type": "integer"
},
{
"Field": "user_features",
"Type": "string"
},
{
"Field": "item_features",
"Type": "string"
},
{
"Field": "request_info",
"Type": "string"
},
{
"Field": "user_id",
"Type": "string"
},
{
"Field": "item_id",
"Type": "string"
},
{
"Field": "raw_features",
"Type": "string"
},
{
"Field": "generate_features",
"Type": "string"
},
{
"Field": "context_features",
"Type": "string"
}
]
}
}上記の構成では、手動で Topic を作成する必要はありません。PAI-Rec は、Topic 名とスキーマに基づいて Topic を自動的に作成できます。
特徴読み込み構成
詳細については、「特徴構成」をご参照ください。違いは、特徴の読み込みにシーンエイリアスとして `scene_name + _callback` を使用する必要があることです。たとえば、シーン名 `home_feed_callback` は、`home_feed` と `_callback` を組み合わせて作成されます。
シーン名 home_feed_callback は、home_feed と _callback を組み合わせて作成されます。
"FeatureConfs": {
"home_feed_callback": {
"AsynLoadFeature": true,
"FeatureLoadConfs": [
{
"FeatureDaoConf": {
"AdapterType": "hologres",
"HologresName": "pairec-holo",
"FeatureKey": "user:uid",
"UserFeatureKeyName": "client_str",
"HologresTableName": "dwd_ali_user_all_feature_v2_holo",
"UserSelectFields": "*",
"FeatureStore": "user"
},
"Features": [
{
"FeatureType": "new_feature",
"FeatureName": "day_h",
"Normalizer": "hour_in_day",
"FeatureStore": "user"
},
{
"FeatureType": "new_feature",
"FeatureName": "week_day",
"Normalizer": "weekday",
"FeatureStore": "user"
},
{
"FeatureType": "new_feature",
"FeatureName": "rand_int_v",
"Normalizer": "random",
"FeatureStore": "user"
}
]
},
{
"FeatureDaoConf": {
"AdapterType": "hologres",
"HologresName": "pairec-holo",
"FeatureKey": "user:uid",
"UserFeatureKeyName": "client_str",
"HologresTableName": "dwd_ali_user_table_v3_expo_static_feature_v2_holo",
"UserSelectFields": "*",
"FeatureStore": "user"
}
}
]
}
}ログフォーマット
コールバックリクエストには、1 つのユーザー ID とアイテムのリストが含まれます。ユーザー特徴は大きくなる可能性があるため、ユーザー特徴とアイテム特徴はスペースを節約するために別々にログに記録されます。
ユーザー特徴ログには、次のデータが含まれます。
request_id: コールバックリクエストからのリクエスト ID。
scene: コールバックリクエストからのシーン名。
request_time: リクエストの時間。
user_features: JSON 文字列としてフォーマットされたユーザー特徴。
user_id: ユーザー ID。
request_info: コールバックリクエストからの追加のリクエスト情報。
module: 値が `user` の静的フィールド。これは、これがユーザー特徴ログであることを示します。
アイテム特徴ログには、次のデータが含まれます。
request_id: コールバックリクエストからのリクエスト ID。
scene: コールバックリクエストからのシーン名。
request_time: リクエストの時間。
module: 値が `item` の静的フィールド。これは、これがアイテム特徴ログであることを示します。
item_id: アイテム ID。
user_id: ユーザー ID。
raw_features: EasyRec モデルによって返される生の特徴。
generate_features: EasyRec モデルによって返される、FG 後の特徴情報。
context_features: EasyRec モデルによって返されるコンテキスト特徴。
item_features: JSON 文字列としてフォーマットされたアイテム特徴。
自動シーンコールバック
通常、コールバックは別のサービスとしてデプロイされ、それを呼び出すためにデータをアセンブルする必要があります。ただし、PAI-Rec DPI エンジンは、コールバックフローへの自動呼び出しもサポートしています。この特徴を有効にするには、構成ファイルでコールバック設定を構成し、`SceneConfs` で `AutoInvokeCallBack` フラグを有効にします。レコメンデーションリクエストが完了すると、システムは自動的にコールバック API を呼び出します。
`AutoInvokeCallBack` が `true` に設定されている場合、`AutoInvokeCallBackRate` を設定して、コールバックをトリガーするリクエストの割合を制御することもできます。値は 1 から 100 までです。`AutoInvokeCallBackRate` を設定しない場合、または 0 に設定した場合、すべてのトラフィックがコールバックをトリガーします。
"SceneConfs": {
"${scene_name}": {
"default": {
"RecallNames": [
"collaborative_filter"
],
"AutoInvokeCallBack": true,
"AutoInvokeCallBackRate": 100
}
}
}この情報がお役に立った場合は、[いいね] をクリックしてください。