PAI-Recエンジンは、User2ItemExposureFilter、ItemStateFilter、AdjustCountFilterフィルタのテンプレートを含む、複数の組み込みフィルタテンプレートを提供します。
フィルタ設定
次のサンプルコードのFilterConfsパラメータを設定することで、フィルタを設定できます。FilterConfsはオブジェクトの配列であり、複数のフィルタポリシーを定義するために使用できます。
共通のフィルタ設定の概要
次のセクションでは、さまざまなフィルタによって参照される共通の設定について説明します。このトピックの各フィルタの詳細な説明では、設定は繰り返されません。
設定例:
"FilterConfs":[
{
"Name":"", // フィルタのカスタム名
"FilterType":"", // フィルタの種類
"Dimension":"", // アイテムのディメンション
"DaoConf":{}, // ソーステーブルの情報
"AdjustCountConfs":[{}], // PriorityAdjustCountFilter フィルタの設定
"ItemStateDaoConf":{}, // ItemStateFilter フィルタの設定
"FilterParams":[{}], // コンテキスト条件の設定
"DiversityDaoConf":{}, // 多様性Daoの設定
"FilterVal":{} // フィルタ値
}
]パラメータ | 種類 | 必須 | 説明 |
Name | string | はい | フィルタのカスタム名。FilterNamesパラメータを設定するときに、この名前を使用できます。 |
FilterType | string | はい | エンジンの組み込みフィルタの種類。有効な値:
|
Dimension | string | いいえ | アイテムのディメンション。 |
DaoConf | DaoConfig | いいえ | ソーステーブルの情報。 |
AdjustCountConfs | いいえ | PriorityAdjustCountFilterフィルタの設定。 | |
ItemStateDaoConf | いいえ | ItemStateFilterフィルタの設定。 | |
FilterParams | いいえ | コンテキスト条件の設定。 |
User2ItemExposureFilter
多くのビジネスシナリオでは、アイテムが繰り返し推奨されるのを防ぐために、露出ブロックが必要です。この場合、露出とは疑似露出を指します。
リアルタイムログのレイテンシのため、露出したアイテムをすぐに識別することはできません。したがって、レコメンデーションエンジンによって返されたアイテムは、疑似露出アイテムと見なされます。
PAI-Recエンジンは、疑似露出データの読み取りと書き込みに使用されます。実際の露出データは、ユーザーのリアルタイムログから取得され、Apache Flinkなどのリアルタイムコンピューティングエンジンを使用してデータベースに書き込まれます。その後、PAI-Recはそのデータを使用できます。
次の表は、User2ItemExposureFilterのさまざまなデータソースの共通パラメータ設定を示しています。
パラメータ | 種類 | 必須 | 説明 |
Name | string | はい | フィルタのカスタム名。 |
FilterType | string | はい | フィルタの種類。値をUser2ItemExposureFilterに設定します。 |
MaxItems | int | はい | 最近のアイテムのバッチの最大数。このパラメータは、SQLステートメントのlimit ${MaxItems}と同等です。MaxItemsは、アイテムの最大数ではなく、バッチの最大数を指定します。レコメンデーションリクエストごとに1バッチのアイテムが返されます。 |
TimeInterval | int | はい | タイムスタンプに基づいてアイテムを取得する期間。単位:秒。 |
WriteLog | bool | はい | 露出ログを書き込むかどうかを指定します。 |
ClearLogIfNotEnoughScene | string | いいえ | 露出テーブルのデータを削除するシナリオを指定します。 |
GenerateItemDataFuncName | string | いいえ | アイテムデータを露出テーブルに書き込むために使用される関数。このパラメータを空のままにすると、PAI-Recエンジンの組み込み関数が使用されます。この場合、アイテムIDのみが返されます。 |
WriteLogExcludeScenes | []string | いいえ | 露出ログが書き込まれないシナリオを指定します。 |
Hologres
"FilterConfs" :[
{
"Name": "holo_exposure_filter", // Hologres 露出フィルタ
"FilterType": "User2ItemExposureFilter",
"MaxItems": 100, // 最大アイテム数
"TimeInterval": 172800, // 時間間隔
"WriteLog": true, // ログ書き込み
"DaoConf":{
"AdapterType": "hologres", // アダプタータイプ
"HologresName": "holo_info", // Hologres名
"HologresTableName": "exposure_history" // Hologres テーブル名
}
}
]DaoConfのパラメータ
パラメーター | 種類 | 必須 | 説明 |
アダプターの種類 | 文字列 | はい | データソースのタイプ。値を hologres に設定します。 |
Hologres名 | 文字列 | はい | HologresConfs パラメーターで指定されたデータソースのカスタム名。例:holo_info。 |
Hologresテーブル名 | 文字列 | はい | エクスポージャテーブルの名前です。 |
ビジネス要件に基づいてtime_to_live_in_secondsパラメータを設定し、露出テーブルを定義できます。
BEGIN;
CREATE TABLE "exposure_history" (
"uid" text NOT NULL, -- ユーザーID
"item" text NOT NULL, -- アイテムID
"create_time" int4 NOT NULL, -- 作成時間
PRIMARY KEY ("uid","create_time")
);
CALL SET_TABLE_PROPERTY('"exposure_history"', 'orientation', 'column');
CALL SET_TABLE_PROPERTY('"exposure_history"', 'clustering_key', '"uid","create_time"');
CALL SET_TABLE_PROPERTY('"exposure_history"', 'segment_key', '"create_time"');
CALL SET_TABLE_PROPERTY('"exposure_history"', 'bitmap_columns', '"uid","item"');
CALL SET_TABLE_PROPERTY('"exposure_history"', 'dictionary_encoding_columns', '"uid","item"');
CALL SET_TABLE_PROPERTY('"exposure_history"', 'time_to_live_in_seconds', '172800'); -- データの有効期間
comment on table "exposure_history" is '露出レコードを格納するテーブル'; -- テーブルコメント
COMMIT;ApsaraDB for Redis
"FilterConfs" :[
{
"Name": "redis_exposure_filter", // Redis 露出フィルタ
"FilterType": "User2ItemExposureFilter",
"MaxItems": 100, // 最大アイテム数
"TimeInterval": 172800, // 時間間隔
"WriteLog": true, // ログ書き込み
"DaoConf":{
"AdapterType": "redis", // アダプタータイプ
"RedisName": "redis_info", // Redis名
"RedisPrefix": "exposure_" // Redis プレフィックス
}
}
]DaoConfのパラメータ
パラメータ | 種類 | 必須 | 説明 |
AdapterType | string | はい | データソースの種類。値をredisに設定します。 |
RedisName | string | はい | RedisConfsパラメータで指定されたデータソースのカスタム名。例:redis_info。 |
RedisPrefix | string | いいえ | 露出データのキーのプレフィックス。キーは、RedisPrefixの値とユーザーの固有ID(UID)で構成されます。 |
Tablestore
"FilterConfs" :[
{
"Name": "ots_exposure_filter", // Tablestore 露出フィルタ
"FilterType": "User2ItemExposureFilter",
"MaxItems": 100, // 最大アイテム数
"TimeInterval": 172800, // 時間間隔
"WriteLog": true, // ログ書き込み
"DaoConf":{
"AdapterType": "tablestore", // アダプタータイプ
"TableStoreName": "tablestore_info", // Tablestore名
"TableStoreTableName": "exposure_history" // Tablestore テーブル名
}
}
]DaoConfのパラメータ
パラメータ | 種類 | 必須 | 説明 |
AdapterType | string | はい | データソースの種類。有効な値:hologres、mysql、tablestore。 |
TableStoreName | string | はい | TableStoreConfsパラメータで指定されたデータソースのカスタム名。例:tablestore_info。 |
TableStoreTableName | string | はい | 露出テーブルの名前。 |
露出テーブルは、次のパラメータを使用して定義されます。
time_to_live_in_seconds:データのライフサイクル。このパラメータにはカスタム値を指定する必要があります。
パラメータ | カテゴリ | 種類 | 説明 | 例 |
user_id | 主キー | string | ユーザーのUID。 | 10944750 |
auto_id | 主キー | integer | 自動インクリメント列。 | |
item_ids | プロパティ | string | アイテムID。複数のアイテムIDはコンマ(,)で区切ります。複数のアイテムが同時に露出された場合、システムはアイテムIDを持つ単一のレコードを挿入します。 | 17019277,17019278 |
User2ItemCustomFilter
データをフィルタリングするために、カスタムのユーザー対アイテム(U2I)テーブルを提供する必要があります。
Tablestore
"FilterConfs" :[
{
"Name": "u2i_custom_filter", // カスタム U2I フィルタ
"FilterType": "User2ItemCustomFilter",
"DaoConf":{
"AdapterType": "tablestore", // アダプタータイプ
"TableStoreName": "tablestore_info", // Tablestore名
"TableStoreTableName": "u2i_table" // U2I テーブル名
}
}
]DaoConfのパラメータ
パラメータ | 種類 | 必須 | 説明 |
AdapterType | string | はい | データソースの種類。有効な値:hologres、mysql、tablestore。 |
TableStoreName | string | はい | TableStoreConfsパラメータで指定されたデータソースのカスタム名。例:tablestore_info。 |
TableStoreTableName | string | はい | 露出テーブルの名前。 |
露出テーブルは、次のパラメータを使用して定義されます。
パラメータ | カテゴリ | 種類 | 説明 | 例 |
user_id | 主キー | string | ユーザーのUID。 | 10944750 |
item_ids | プロパティ | string | アイテムID。複数のアイテムIDはコンマ(,)で区切ります。 | 17019277,17019278 |
AdjustCountFilter
AdjustCountFilterは、リコールリンクによって返されたアイテムをランダムにシャッフルし、指定された数のアイテムを保持するために使用されます。
設定例:
"FilterConfs" :[
{
"Name": "adjust_count_filter", // アイテム数調整フィルタ
"FilterType": "AdjustCountFilter",
"ShuffleItem": true, // アイテムのシャッフル
"RetainNum": 500 // 保持するアイテム数
}
]パラメータ | 種類 | 必須 | 説明 |
ShuffleItem | string | はい | リコールリンクによって返されたアイテムをシャッフルするかどうかを指定します。 |
RetainNum | string | はい | 保持するアイテムの数。 |
PriorityAdjustCountFilter
PriorityAdjustCountFilterは、スコアに基づいて、リコールリンクの返された結果から選択されるアイテムの数を制御するために使用されます。各リコールリンクは、推奨アイテムをスコアに基づいてソートします。
設定例:
"FilterConfs" :[
{
"Name": "priority_adjust_count_filter", // 優先順位付きアイテム数調整フィルタ
"FilterType": "PriorityAdjustCountFilter",
"AdjustCountConfs" :[
{
"RecallName" :"recall_1", // リコールリンク名
"Count" :125, // アイテム数
"Type" : "accumulator" // 調整タイプ
},
{
"RecallName" :"recall_2", // リコールリンク名
"Count" :250, // アイテム数
"Type" : "accumulator" // 調整タイプ
},
{
"RecallName" :"recall_3", // リコールリンク名
"Count" :400, // アイテム数
"Type" : "accumulator" // 調整タイプ
}
]
}
]パラメータ | 種類 | 必須 | 説明 |
Name | string | はい | フィルタのカスタム名。 |
FilterType | string | はい | フィルタの種類。値をPriorityAdjustCountFilterに設定します。 |
RecallName | string | はい | リコールリンクの名前。 |
AdjustCountConfs | json array | はい | PriorityAdjustCountFilterフィルタの設定。 |
| int | はい | リコールリンクの返された結果から選択されるアイテムの最大数。 |
| string | いいえ | 数値調整の種類。有効な値:accumulatorとfix。 accumulator:
fix:
|
ItemStateFilter
ItemStateFilterは、状態に基づいてリコールリンクによって返されたアイテムをフィルタリングするために使用されます。アイテムの状態はリアルタイムで変化する可能性があります。ほとんどの場合、特定のテーブルを使用してアイテムの状態が格納されます。この場合、フィルタリングする前に、アイテムの状態をリアルタイムでクエリする必要があります。
Hologres
"FilterConfs" :[
{
"Name": "ItemStateFilter", // アイテム状態フィルタ
"FilterType": "ItemStateFilter",
"ItemStateDaoConf":{
"AdapterType": "hologres", // アダプタータイプ
"HologresName": "", // Hologres名
"HologresTableName": "", // Hologres テーブル名
"ItemFieldName" : "", // アイテムフィールド名
"WhereClause": "", // 条件句
"SelectFields" :"" // 選択フィールド
},
"FilterParams" :[] // フィルタパラメータ
}
]ItemStateDaoConfigのパラメータ
パラメータ | 種類 | 必須 | 説明 |
AdapterType | string | はい | データソースの種類。有効な値:hologres、mysql、tablestore。 |
HologresName | string | はい | HologresConfsパラメータで指定されたデータソースのカスタム名。例:holo_info。 |
HologresTableName | string | はい | Hologresインスタンス内のアイテム状態を格納するテーブルの名前。 |
ItemFieldName | string | はい | アイテム状態を格納するテーブルの主キー。 |
WhereClause | string | いいえ | フィルタリングに使用される条件ステートメント。 |
SelectFields | string | はい | クエリするフィールド。 |
FilterParamsのパラメータ
"FilterParams" :[
{
"Name" : "publicStatus", // 公開ステータス
"Type" : "int", // 種類
"Operator" : "equal", // 演算子
"Value" : 0 // 値
},
{
"Name" : "state", // 状態
"Type" : "int", // 種類
"Operator" : "equal", // 演算子
"Value" : 1 // 値
},
{
"Name" : "checkStatus", // チェックステータス
"Type" : "int", // 種類
"Operator" : "not_equal", // 演算子
"Value" : 2 // 値
},
{
"Name" : "norec", // 非推奨
"Type" : "int", // 種類
"Operator" : "not_equal", // 演算子
"Value" : 1 // 値
}
]パラメータ | 種類 | 必須 | 説明 |
Name | string | はい | 機能の名前。 |
Domain | string | いいえ | 機能が属するオブジェクト。有効な値:userとitem。 |
Operator | string | はい | 演算子。有効な値:equal、not_equal、in、greater、greaterThan、less、lessThan。 |
Type | string | はい | 機能の種類。 |
Value | object | はい | 条件値。 |
WhereClauseパラメータとFilterParamsパラメータの両方をフィルタリング用に設定できます。WhereClauseパラメータは、クエリリクエストでフィルタリング条件を指定するために使用されます。FilterParamsパラメータは、クエリ結果をフィルタリングするために使用されます。
演算子の使用方法の詳細については、このトピックの付録セクションを参照してください。
CompletelyFairFilter
CompletelyFairFilterは、アイテムのスコアに基づいてリコールリンクによって返されたアイテムをソートし、各リンクの結果から公平にアイテムを選択するために使用されます。
"FilterConfs" :[
{
"Name": "CompletelyFairFilter", // 完全公平フィルタ
"FilterType": "CompletelyFairFilter",
"RetainNum": 500 // 保持するアイテム数
}
]DimensionFieldUniqueFilter
DimensionFieldUniqueFilterは、UniqueFilterとは異なる方法で動作します。DimensionFieldUniqueFilterは、フィールド値が重複するアイテムを削除します。
"FilterConfs" :[
{
"Name": "GroupWeightCountFilter", // グループ重みカウントフィルタ
"FilterType": "GroupWeightCountFilter",
"Dimension:"" // ディメンション
}
]UniqueFilter
UniqueFilterは、各アイテムIDが一意であることを保証するように設計されています。同じアイテムIDが2つのリコールリンクによって返された場合、UniqueFilterは最初に返されたアイテムIDを優先します。
UniqueFilterを設定せずにFilterNamesパラメータを設定するときに、UniqueFilterを使用できます。
フィルタの使用法
フィルタの使い方は、リコールリンクの使用方法と似ています。フィルタ設定が完了したら、特定のシナリオに対してFilterNamesパラメータを設定できます。FilterNamesはMap<String, Object>構造です。キーはシナリオを示し、値はフィルタポリシーのセットを示します。
"FilterNames": {
"default": [ // デフォルトシナリオ
"UniqueFilter" // 一意のフィルタ
]
}default:シナリオの名前。シナリオが明示的に設定されていない場合は、defaultが使用されます。
UniqueFilter:FilterConfisパラメータで指定されたフィルタのカスタム名。
付録
演算子の例
equal(指定された値と等しい)
{
"Name" : "publicStatus", // 公開ステータス
"Type" : "int", // 種類
"Operator" : "equal", // 等しい
"Value" : 0 // 値
}not_equal(指定された値と等しくない)
{
"Name" : "checkStatus", // チェックステータス
"Type" : "int", // 種類
"Operator" : "not_equal", // 等しくない
"Value" : 2 // 値
}greater(指定された値より大きい)
{
"Name" : "checkStatus", // チェックステータス
"Type" : "int", // 種類
"Operator" : "greater", // より大きい
"Value" : 2 // 値
}greaterThan(指定された値以上)
{
"Name" : "checkStatus", // チェックステータス
"Type" : "int", // 種類
"Operator" : "greaterThan", // 以上
"Value" : 2 // 値
}less(指定された値より小さい)
{
"Name" : "checkStatus", // チェックステータス
"Type" : "int", // 種類
"Operator" : "less", // より小さい
"Value" : 2 // 値
}lessThan(指定された値以下)
{
"Name" : "checkStatus", // チェックステータス
"Type" : "int", // 種類
"Operator" : "lessThan", // 以下
"Value" : 2 // 値
}in(配列内の1つまたはいくつかの値と等しい)
{
"Name" : "state", // 状態
"Type" : "int", // 種類
"Operator" : "in", // 含まれる
"Value" : [2, 4, 6] // 値
}String
{
"Name" : "state", // 状態
"Type" : "string", // 種類
"Operator" : "in", // 含まれる
"Value" : ["success", "ok"] // 値
}