PAI-Rec エンジンは、User2ItemExposureFilter、ItemStateFilter、AdjustCountFilter フィルターのテンプレートを含む、複数の組み込みフィルターテンプレートを提供します。
フィルター設定
次のサンプルコードで `FilterConfs` パラメーターを設定することで、フィルターを設定できます。`FilterConfs` はオブジェクトの配列であり、複数のフィルターポリシーを定義するために使用できます。
共通フィルター設定の概要
次のセクションでは、さまざまなフィルターで参照される共通の設定について説明します。これらの設定は、このトピックの各フィルターの詳細な説明では繰り返されません。
設定例:
{
"FilterConfs": [
{
"Name": "",
"FilterType": "",
"Dimension": "",
"DaoConf": {},
"AdjustCountConfs": [],
"ItemStateDaoConf": {},
"FilterParams": [],
"DiversityDaoConf": {},
"FilterVal": {}
}
]
}パラメーター | 型 | 必須 | 説明 |
Name | string | はい | フィルターのカスタム名。`FilterNames` パラメーターを設定するときに、この名前を使用できます。 |
FilterType | string | はい | エンジンの組み込みフィルターのタイプ。有効な値:
|
Dimension | string | いいえ | アイテムのディメンション。 |
DaoConf | DaoConfig | いいえ | ソーステーブルに関する情報。 |
AdjustCountConfs | いいえ | PriorityAdjustCountFilter フィルターの設定。 | |
ItemStateDaoConf | いいえ | ItemStateFilter フィルターの設定。 | |
FilterParams | いいえ | コンテキスト条件の設定。 |
User2ItemExposureFilter
多くのビジネスシナリオでは、露出フィルタリングは、通常、疑似露出とリアル露出を組み合わせることで、重複した推薦を防ぐために使用されます。
疑似露出:リアルタイムログのレイテンシーにより、どのアイテムが露出されたかを即座に特定することは不可能です。そのため、レコメンデーションエンジンから返されたアイテムのリストが疑似露出リストとして機能します。
Flink などのリアルタイム計算エンジンは、リアルタイムログをデータベースに書き込み、そこで PAI-Rec エンジンによって消費されます。
次の共通パラメーターは、さまざまなデータソースの露出フィルタリングに適用されます。
パラメーター | 型 | 必須 | 説明 |
Name | string | はい | フィルターのカスタム名。 |
FilterType | string | はい | フィルターのタイプ。値を User2ItemExposureFilter に設定します。 |
MaxItems | int | はい | 最近のアイテムのバッチの最大数。このパラメーターは、SQL ステートメントの `limit ${MaxItems}` に相当します。`MaxItems` はアイテムの最大数ではなく、バッチの最大数を指定します。1 回のレコメンデーションリクエストに対して 1 バッチのアイテムが返されます。 |
TimeInterval | int | はい | タイムスタンプに基づいてアイテムを取得する期間。単位:秒。 |
WriteLog | bool | はい | 露出ログを書き込むかどうかを指定します。 |
ClearLogIfNotEnoughScene | string | いいえ | 露出テーブルのデータが削除されるシナリオを指定します。 |
OnlyLogUserExposeFlag | bool | いいえ | データは実際にはフィルタリングされません。アイテムがすでに露出されている場合、アイテムには |
GenerateItemDataFuncName | string | いいえ | 露出テーブルにアイテムデータを書き込むために使用される関数。このパラメーターが空のままの場合、PAI-Rec エンジンのビルトイン関数が使用されます。この場合、アイテム ID のみが返されます。 |
GenerateItemDataExpr | string | いいえ | 式を使用して、露出テーブルに書き込むアイテムデータを構築します。式の構文については、expr-lang/expr をご参照ください。使用可能な変数は、 |
GenerateUserDataExpr | string | いいえ | 式を使用して、エクスポージャーテーブルのユーザー識別子を構築します。式の構文については、expr-lang/expr をご参照ください。使用可能な変数は |
WriteLogExcludeScenes | []string | いいえ | 露出ログが書き込まれないシナリオを指定します。 |
Hologres
{
"FilterConfs": [
{
"Name": "holo_exposure_filter",
"FilterType": "User2ItemExposureFilter",
"MaxItems": 100,
"TimeInterval": 172800,
"WriteLog": true,
"DaoConf": {
"AdapterType": "hologres",
"HologresName": "holo_info",
"HologresTableName": "exposure_history"
}
}
]
}DaoConf のパラメーター
パラメーター | 型 | 必須 | 説明 |
AdapterType | string | はい | データソースのタイプ。値を hologres に設定します。 |
HologresName | string | はい | HologresConfs パラメーターで指定されたデータソースのカスタム名。例:holo_info。 |
HologresTableName | string | はい | 露出テーブルの名前。 |
ビジネス要件に基づいて、露出テーブルに `time_to_live_in_seconds` を設定できます。
BEGIN;
CREATE TABLE "exposure_history" (
"uid" text NOT NULL,
"item" text NOT NULL,
"create_time" int4 NOT NULL
);
CALL SET_TABLE_PROPERTY('"exposure_history"', 'orientation', 'column');
CALL set_table_property('"exposure_history"', 'distribution_key', 'uid');
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;PAI-FeatureStore
PAI-FeatureStore の組み込みオンラインデータソースである FeatureDB は、ブルームフィルターアルゴリズムを使用して PAI-Rec での露出フィルタリングをサポートします。
PAI-FeatureStore を露出テーブルに使用するには、次の設定でリアルタイム FeatureView を作成します。
[ビュー名] には user_expose を入力します。[書き込みモード] には [カスタムテーブル構造] を選択します。[シャード数] を 5 に、[レプリカ数] を 1 に設定します。
次の主要パラメーターを設定します。
[タイプ] で、[リアルタイム] を選択します。
[特徴量エンティティ] で、`user` を選択します。
[特徴量フィールド] に、`user_id`、`item_id`、`timestamp` を次のデータ型で追加します。`user_id` と `item_id` は `string`、`timestamp` は `int64` です。`user_id` を[プライマリキー]として設定し、`timestamp` を[イベント時間]として選択する必要があります。
[特徴量ライフサイクル] で、ユーザー露出データの希望の保持期間を設定します。デフォルトは 2 日間です。
必須の[詳細設定]セクションに、{"table_type":"bloom", "expose_count":5000} と入力します。`table_type` パラメーターはブルームフィルターを有効にし、`expose_count` はユーザーごとに保持する露出アイテムの最大数を設定します。
PAI-Rec エンジンでの露出フィルタリングのサンプル設定は次のとおりです。
{
"FilterConfs": [
{
"Name": "fs_exposure_filter",
"FilterType": "User2ItemExposureFilter",
"TimeInterval": 300,
"WriteLog": true,
"DaoConf": {
"AdapterType": "featurestore",
"FeatureStoreName": "fs_pairec",
"FeatureStoreViewName": "user_expose"
}
}
]
}`TimeInterval` は秒単位で測定されます。これは、エンジンによって書き込まれる疑似露出アイテムの最大保持期間を定義します。このパラメーターは、`WriteLog` が `true` の場合にのみ適用されます。上記の設定は疑似露出用です。PAI-Rec エンジンがデータを書き込まないリアル露出の場合は、`WriteLog` を `false` に設定します。このシナリオでは、`TimeInterval` パラメーターは不要です。
リアル露出のサンプル設定は次のとおりです。
"FilterConfs": [
{
"Name": "fs_exposure_filter2",
"FilterType": "User2ItemExposureFilter",
"WriteLog": false,
"DaoConf": {
"AdapterType": "featurestore",
"FeatureStoreName": "fs_pairec",
"FeatureStoreViewName": "user_expose"
}
}
]疑似露出とリアル露出のライフサイクルは通常異なるため、それぞれに別の FeatureView テーブルを使用する必要があります。
リアル露出データの書き込み手順については、「特徴量の書き込み」をご参照ください。
次の表に、`DaoConf` のパラメーターを示します。
パラメーター | 型 | 必須 | 説明 |
AdapterType | string | はい | データソースのタイプ。値は `featurestore` である必要があります。 |
FeatureStoreName | string | はい | `FeatureStoreConfs` で指定された、PAI-FeatureStore インスタンスのユーザー定義名。 |
FeatureStoreViewName | string | はい | 露出テーブルの FeatureView の名前。 |
Redis
{
"FilterConfs": [
{
"Name": "redis_exposure_filter",
"FilterType": "User2ItemExposureFilter",
"MaxItems": 100,
"TimeInterval": 172800,
"WriteLog": true,
"DaoConf": {
"AdapterType": "redis",
"RedisName": "redis_info",
"RedisPrefix": "exposure_"
}
}
]
}DaoConf のパラメーター
パラメーター | 型 | 必須 | 説明 |
AdapterType | string | はい | データソースのタイプ。値を redis に設定します。 |
RedisName | string | はい | RedisConfs パラメーターで指定されたデータソースのカスタム名。例:redis_info。 |
RedisPrefix | string | いいえ | 露出データのキーのプレフィックス。キーは、RedisPrefix の値とユーザーの一意の ID (UID) で構成されます。 |
Tablestore
{
"FilterConfs": [
{
"Name": "ots_exposure_filter",
"FilterType": "User2ItemExposureFilter",
"MaxItems": 100,
"TimeInterval": 172800,
"WriteLog": true,
"DaoConf": {
"AdapterType": "tablestore",
"TableStoreName": "tablestore_info",
"TableStoreTableName": "exposure_history"
}
}
]
}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 |
インプレッションのデランキング
ユーザーのリコールプールが小さい場合、インプレッションフィルタリングによって利用可能なすべてのアイテムがフィルタリングされてしまう可能性があります。これを回避するには、アイテムを完全にフィルタリングするのではなく、すでに閲覧されたアイテムにタグを付けます。再ランキング中に、ブースティングとデモーションを使用して、これらのタグ付けされたアイテムをリストの最後に移動させることができます。次の例は、Hologres データソースのこの設定を示しています。このプロセスは、他のデータソースでも同様です。
{
"FilterConfs": [
{
"Name": "holo_exposure_filter",
"FilterType": "User2ItemExposureFilter",
"MaxItems": 20,
"TimeInterval": 172800,
"WriteLog": true,
"OnlyLogUserExposeFlag": true,
"DaoConf": {
"AdapterType": "hologres",
"HologresName": "holo_info",
"HologresTableName": "exposure_history"
}
}
],
"SortConfs": [
{
"Name": "boost_score_sort",
"SortType": "BoostScoreSort",
"BoostScoreConditions": [
{
"Conditions": [
{
"Name": "_is_exposure_",
"Domain": "item",
"Type": "int",
"Value": 1,
"Operator": "equal"
}
],
"Expression": "score / 10"
}
]
}
]
}
この JSON の例では、フィルターとソートの構成を定義します。FilterConfs セクションでは、Hologres の exposure_history テーブルのデータに基づいて、holo_exposure_filter を使用してユーザーがすでに接触したアイテムを除外します。SortConfs セクションでは、スコアブースティングのために boost_score_sort を使用します。アイテムが接触済みである場合 (_is_exposure_ が 1 の場合)、そのスコアは 10 で除算され、ランキングが低下します。<code code-type="xCode" data-tag="codeblock" id="7e32a7ea74ad9" index="0" outputclass="language-json">{
"FilterConfs": [
{
"Name": "holo_exposure_filter",
"FilterType": "User2ItemExposureFilter",
"MaxItems": 20,
"TimeInterval": 172800,
"WriteLog": true,
"OnlyLogUserExposeFlag": true,
"DaoConf": {
"AdapterType": "hologres",
"HologresName": "holo_info",
"HologresTableName": "exposure_history"
}
}
],
"SortConfs": [
{
"Name": "boost_score_sort",
"SortType": "BoostScoreSort",
"BoostScoreConditions": [
{
"Conditions": [
{
"Name": "_is_exposure_",
"Domain": "item",
"Type": "int",
"Value": 1,
"Operator": "equal"
}
],
"Expression": "score / 10"
}
]
}
]
}
User2ItemCustomFilter
Hologres
データをフィルタリングするには、カスタムのユーザー対アイテムのフィルターテーブルを提供します。通常、このテーブルはオフラインで生成します。たとえば、過去 15 日間にユーザーが露出されたすべてのアイテムを集計する日次ジョブを実行できます。その後、アイテム ID は `item_ids` などのフィールドに、コンマ区切りの文字列として保存されます。
{
"FilterConfs": [
{
"Name": "u2i_custom_filter",
"FilterType": "User2ItemCustomFilter",
"DaoConf": {
"AdapterType": "hologres",
"HologresName": "holo_info",
"HologresTableName": "u2i_custom_filter"
},
"ItemStateCacheSize": 10000,
"ItemStateCacheTime": 3600
}
]
}`DaoConf` のパラメーター
パラメーター | 型 | 必須 | 説明 |
AdapterType | string | はい | データソースのタイプ。値は `hologres` です。 |
HologresName | string | はい | `HologresConfs` で設定された Hologres データソースのカスタム名。例:`holo_info`。 |
HologresTableName | string | はい | カスタム露出テーブルの名前。 |
ItemStateCacheSize | int | いいえ | キャッシュ内の最大エントリ数。0 より大きい値でキャッシュが有効になります。 |
ItemStateCacheTime | int | いいえ | キャッシュエントリの生存時間 (TTL) (秒単位)。デフォルト:3600。 |
テーブルスキーマは次のとおりです。
パラメーター | カテゴリ | 型 | 説明 | 例 |
user_id | プライマリキー | string | ユーザーの一意の ID。 | 10944750 |
item_ids | 属性 | string | 一意のアイテム ID のコンマ区切りリスト。 | 17019277,17019278 |
Tablestore (OTS)
データをフィルタリングするには、カスタムのユーザー対アイテムのフィルターテーブルを提供します。
{
"FilterConfs": [
{
"Name": "u2i_custom_filter",
"FilterType": "User2ItemCustomFilter",
"DaoConf": {
"AdapterType": "tablestore",
"TableStoreName": "tablestore_info",
"TableStoreTableName": "u2i_table"
}
}
]
}DaoConf のパラメーター
パラメーター | 型 | 必須 | 説明 |
AdapterType | string | はい | データソースのタイプ。値は `tablestore` です。 |
TableStoreName | string | はい | TableStoreConfs パラメーターで指定されたデータソースのカスタム名。例:tablestore_info。 |
TableStoreTableName | string | はい | カスタム露出テーブルの名前。 |
露出テーブルは、次のパラメーターを使用して定義されます。
パラメーター | カテゴリ | 型 | 説明 | 例 |
user_id | プライマリキー | string | ユーザーの UID。 | 10944750 |
item_ids | プロパティ | string | アイテム ID。複数のアイテム ID はコンマ (,) で区切られます。 | 17019277,17019278 |
PAI-FeatureStore
この機能は、オンラインデータソースとして FeatureDB を使用する FeatureView のみをサポートします。
前述の露出フィルタリングと同様に、リアルタイム FeatureView を提供します。Java SDK または Flink コネクタを使用して、このビューにデータを書き込みます。詳細については、「特徴量の書き込み」をご参照ください。PAI-Rec エンジンは、このビューからデータを読み取ってフィルタリングします。FeatureView を次のように設定します。
ビュー名を user2item_custom_filter に設定し、書き込みメソッドとして[カスタムテーブル構造]を選択し、推定データスケールに[1,000 万未満]を選択します。
主要パラメーター:
[タイプ] で、[リアルタイム] を選択します。
[特徴量エンティティ] で、`user` を選択します。
[特徴量フィールド] には、`user_id`、`item_id`、`timestamp` を含める必要があります。`user_id` を[プライマリキー]として設定し、`timestamp` の[イベント時間]を選択します。プライマリキーとイベント時間を指定する必要があります。データ型については、`user_id` と `item_id` は `string`、`timestamp` は `int64` です。タイムスタンプはミリ秒単位です。
デフォルトの特徴量 TTL は 2 日間です。必要に応じてこの値を調整してください。特徴量 TTL は、`timestamp` の値に基づいて計算されるデータ行の生存時間を指定します。
[詳細設定] フィールドは必須です。{"table_type":"bloom"} と入力します。`table_type` パラメーターは、作成されたテーブルのブルームフィルターサポートを有効にします。
PAI-Rec エンジンのサンプル設定は次のとおりです。
{
"FilterConfs": [
{
"Name": "u2i_custom_filter",
"FilterType": "User2ItemCustomFilter",
"DaoConf": {
"AdapterType": "featurestore",
"FeatureStoreName": "fs_pairec",
"FeatureStoreViewName": "u2icustom_filter"
}
}
]
}`DaoConf` のパラメーター
パラメーター | 型 | 必須 | 説明 |
AdapterType | string | はい | データソースのタイプ。値は `featurestore` です。 |
FeatureStoreName | string | はい | `FeatureStoreConfs` で設定された PAI-FeatureStore データソースのカスタム名。 |
FeatureStoreViewName | string | はい | カスタムフィルターテーブルに使用される FeatureView の名前。 |
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
取得したアイテムを状態でフィルタリングするには、いつでも変更される可能性があるため、リアルタイムでその状態をフェッチする必要があります。これらの状態は通常、専用のテーブルに保存されます。
Hologres
{
"FilterConfs": [
{
"Name": "ItemStateFilter",
"FilterType": "ItemStateFilter",
"ItemStateDaoConf": {
"AdapterType": "hologres",
"HologresName": "",
"HologresTableName": "",
"ItemFieldName": "",
"WhereClause": "",
"SelectFields": ""
},
"ItemStateCacheSize": 50000,
"ItemStateCacheTime": 3600,
"FilterParams": [
]
}
]
}アイテムの状態が頻繁に変更されない場合は、キャッシュオプションを設定できます。
パラメーター | 型 | 必須 | 説明 |
ItemStateCacheSize | int | いいえ | キャッシュするアイテムの数。 |
ItemStateCacheTime | int | いいえ | キャッシュの生存時間 (TTL)。単位:秒。 |
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`。デフォルトは `item` です。 |
Operator | string | はい | 演算子。有効な値:equal、not_equal、in、greater、greaterThan、less、および lessThan。 |
Type | string | はい | 特徴のタイプ。 |
Value | object | はい | 条件値。 |
注:フィルタリングには `WhereClause` と `FilterParams` の両方を使用できます。`WhereClause` は、SQL の `WHERE` 句と同様に、データソースでデータをフィルタリングします。`FilterParams` は、取得したデータをローカルでフィルタリングします。
演算子の使用方法の詳細については、付録をご参照ください。
PAI-FeatureStore
{
"FilterConfs": [
{
"Name": "ItemStateFilter",
"FilterType": "ItemStateFilter",
"ItemStateDaoConf": {
"AdapterType": "featurestore",
"FeatureStoreName": "",
"FeatureStoreViewName": "",
"ItemFieldName": "",
"SelectFields": ""
},
"ItemStateCacheSize": 50000,
"ItemStateCacheTime": 3600,
"FilterParams": [
]
}
]
}アイテムの状態が頻繁に変更されない場合は、キャッシュオプションを設定できます。
パラメーター | 型 | 必須 | 説明 |
ItemStateCacheSize | int | いいえ | キャッシュするアイテムの数。 |
ItemStateCacheTime | int | いいえ | キャッシュの生存時間 (TTL)。単位:秒。 |
`ItemStateDaoConfig` は次のように定義されます。
パラメーター | 型 | 必須 | 説明 |
AdapterType | string | はい | データソースのタイプ。値は `featurestore` である必要があります。 |
FeatureStoreName | string | はい | `FeatureStoreConfs` で設定された PAI-FeatureStore インスタンスのカスタム名。 |
FeatureStoreViewName | string | はい | アイテムの状態を保存する特徴量ビューの名前。 |
ItemFieldName | 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`。デフォルトは `item` です。 |
Operator | string | はい | 比較演算子。サポートされている値には、`equal`、`not_equal`、`in`、`greater`、`greaterThan`、`less`、および `lessThan` が含まれます。 |
Type | string | はい | 特徴のタイプ。 |
Value | object | はい | 条件値。 |
演算子の使用方法の詳細については、付録をご参照ください。
SnakeFilter
リコール段階では、複数のリコールチャネルから候補セットを取得します。SnakeFilter は、指定された重み比に基づいて、これらのチャネルからのデータをラウンドロビン順で結合します。
たとえば、重みがそれぞれ 1、2、3 の 3 つのリコールチャネル (A、B、C) がある場合、結合ロジックは次のように機能します。
候補セット A から 1 つの要素を選択します。
候補セット B から 2 つの要素を選択します。
候補セット C から 3 つの要素を選択します。
必要な数の要素が得られるまで、このプロセスを繰り返します。
重複要素を処理するための 2 つのポリシーがあります。
REFILL_ON_DUPLICATE:候補セットから取得した要素が以前に選択されたものと重複する場合、システムは同じ候補セット内で一意の代替を検索します。たとえば、候補セット C から取得した 3 つの要素が、すでにセット A と B から選択されている要素と重複する場合、システムはセット C で代替を検索します。SKIP_ON_DUPLICATE:システムは重複する要素をスキップし、次の反復に進みます。たとえば、候補セット C から取得した 3 つの要素がセット A と B の要素と重複する場合、候補セット C はこのラウンドでは要素を返しません。その後、プロセスは候補セット A から始まる新しい反復を開始します。
{
"FilterConfs": [
{
"Name": "SnakeFilter",
"FilterType": "SnakeFilter",
"RetainNum": 20,
"SnakeType": "REFILL_ON_DUPLICATE",
"AdjustCountConfs": [
{
"RecallName": "GroupHotRecall",
"Weight": 1
},
{
"RecallName": "U2IRecall",
"Weight": 2
},
{
"RecallName": "GlobalHotRecall",
"Weight": 3
}
]
}
]
}パラメーター | 型 | 必須 | 説明 |
Name | string | はい | カスタムフィルター名。 |
FilterType | string | はい | フィルタータイプ。値は `SnakeFilter` である必要があります。 |
RetainNum | string | はい | 最終的な候補セットに保持する要素の数。 |
SnakeType | string | いいえ |
|
AdjustCountConfs | json array | はい | 各リコールチャネルの設定を定義します。 |
| string | はい | リコールチャネルの名前。 |
| int | はい | 各ラウンドでこのリコールチャネルから取得するエントリ数を決定するために使用される相対的な重み。 |
このフィルターを適用すると、アイテムに `snake_filter` 属性が追加されます。この属性は、アイテムのリコールパス、0 から始まるインデックス位置、およびスコアを指定します。たとえば、snake_filter:GroupHotRecall:0:0.144200 は、アイテムが GroupHotRecall リコールパスの 0 の位置にあることを意味し、最初のアイテムになります。
CompletelyFairFilter
CompletelyFairFilter は、アイテムのスコアに基づいてリコールリンクによって返されたアイテムをソートし、各リンクの結果から公平な方法でアイテムを選択するために使用されます。
{
"FilterConfs": [
{
"Name": "CompletelyFairFilter",
"FilterType": "CompletelyFairFilter",
"RetainNum": 500
}
]
}DimensionFieldUniqueFilter
DimensionFieldUniqueFilter は、UniqueFilter とは異なる方法で機能します。DimensionFieldUniqueFilter は、フィールド値が重複しているアイテムを削除します。
{
"FilterConfs": [
{
"Name": "DimensionFieldUniqueFilter",
"FilterType": "DimensionFieldUniqueFilter",
"Dimension": ""
}
]
}パラメーター | 型 | 必須 | 説明 |
Name | string | はい | カスタムフィルターの名前。 |
FilterType | string | はい | フィルタータイプ。`DimensionFieldUniqueFilter` である必要があります。 |
Dimension | string | はい | アイテムの重複排除に使用される属性フィールド。アイテムに対してこのフィールドが空の場合、そのアイテムは保持されます。 |
ConditionFilter
これは、ユーザー特徴や `context` で渡されるようなリクエスト条件に基づいて、特定のフィルターを動的に実行する複合フィルターです。1 つ以上の組み合わせを設定でき、それぞれが条件のセットを `FilterConfs` で定義された特定のフィルターにリンクします。
上記の例では、`adjust_count_filter` と `CompletelyFairFilter` という 2 つのスタンドアロンフィルターを定義しています。`ConditionFilter` は、条件に基づいてリクエストをルーティングする複合フィルターです。ユーザー属性 `query` が `"1"` に等しい場合、`adjust_count_filter` を使用します。どの条件にも一致しない場合、`DefaultFilterName` (`CompletelyFairFilter`) で指定されたフィルターにフォールバックします。
設定パラメーターは次のとおりです。
パラメーター | 型 | 必須 | 説明 |
Name | string | はい | カスタムフィルターの名前。 |
FilterType | string | はい | フィルターのタイプ。値を `ConditionFilter` に設定します。 |
ConditionFilterConfs | json map | はい | 条件の設定。 |
| json array | いいえ | 条件一致ルールの配列。リクエストが条件に一致すると、サービスは対応するフィルターを適用します。 |
| string | いいえ | `FilterConfs` のどの条件にも一致しない場合、サービスはこのパラメーターで指定されたフィルターを適用します。 |
`FilterConfs` の設定:
パラメーター | 型 | 必須 | 説明 |
Conditions | []FilterParamConfig | いいえ | ルールの一致条件。 |
FilterName | string | いいえ | 条件が満たされたときに適用するフィルターの名前。このフィルターは FilterConfs で定義されている必要があります。 |
`FilterParamConfig` を次のように設定します。
パラメーター | 型 | 必須 | 説明 |
Name | string | はい | アイテムまたはユーザーの特徴名。 |
Domain | string | はい | 特徴がアイテム用かユーザー用かを指定する列挙値 (`item` または `user`)。`Name` は、対応するアイテムまたはユーザーの `properties` に存在する必要があります。 |
Operator | string | はい | 比較演算子。指定できる値:`equal`、`not_equal`、`in`、`not_in`、`greater`、`greaterThan`、`less`、`lessThan`、`contains`、および `not_contains`。 |
Type | string | はい | 特徴のタイプ。 |
Value | object | はい | 特徴の値。 |
条件設定の詳細については、付録をご参照ください。
UniqueFilter
UniqueFilter は、各アイテム ID が一意であることを保証するように設計されています。同じアイテム ID が 2 つのリコールリンクから返された場合、UniqueFilter は最初に返されたアイテム ID を優先します。
UniqueFilter を設定しなくても、`FilterNames` パラメーターを設定する際に UniqueFilter を使用できます。
フィルターの使用方法
リコール設定と同様に、フィルター設定では `FilterNames` パラメーターを使用します。このパラメーターは、各シナリオをフィルターポリシーのセットにマッピングする `Map[string]object` です。
${scene_name}: シナリオの名前。複数のシナリオに同じ構成を適用するには、
defaultを使用します。UniqueFilter:FilterConfigs で定義されたフィルターのカスタム名。
付録
演算子の例
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 (配列内のいずれかの値に一致)
String
{
"Name": "state",
"Type": "string",
"Operator": "in",
"Value": ["success","ok"]
}not_in (配列内のどのアイテムにも一致しない)
{
"name": "state",
"type": "int",
"operator": "not_in",
"value": [2,4,6]
}`in` 演算子で `string type` を使用して設定することもできます。
contains (配列内のいずれかのアイテムに一致)
{
"Name": "state",
"Type": "[]int",
"Operator": "contains",
"Value": [2,4,6]
}string 型
{
"Name": "state",
"Type": "[]string",
"Operator": "contains",
"Value": ["success","ok"]
}not_contains(指定されたアイテムのいずれも含まない)
{
"Name": "state",
"Type": "[]int",
"Operator": "not_contains",
"Value": [2,4,6]
}
以下のコードでは、not_contains 演算子を使用して、state フィールドに配列 [2, 4, 6] の値が含まれていないアイテムをフィルターします。このフィルターは、クエリ結果から特定のアイテムを除外するのに役立ちます。たとえば、このフィルターを使用すると、ステータスが「アーカイブ済み」(ID 2)、「保留中」(ID 4)、または「非推奨」(ID 6) のタスクを除く、すべてのタスクを取得できます。<code code-type="xCode" data-tag="codeblock" id="866e45a8e4kqj" outputclass="language-json">{
"Name": "state",
"Type": "[]int",
"Operator": "not_contains",
"Value": [2,4,6]
}
文字列配列も使用できます。設定の詳細については、`contains` 演算子をご参照ください。
bool (複数の条件一致演算子を組み合わせる)
or で条件を結合します。
{
"Operator": "bool",
"Type": "or",
"Configs":
[
{
"Name": "publicStatus",
"Type": "int",
"Operator": "equal",
"Value": 0
},
{
"Name": "checkStatus",
"Type": "int",
"Operator": "greater",
"Value": 2
}
]
}and の使用も同様です。`Type` を `and` に設定します。
expression (式が true と評価された場合に一致)
{
"Operator": "expression",
"Value": "item.size == 43"
}`item.size` は `item` の属性です。`user` の属性にアクセスするには、`user.xxx` を使用します。
式は、算術、比較、論理、三項演算子をサポートしています。以下は、より複雑な例です。
{
"Operator": "expression",
"Value": "!item.sold_out and user.list != nil ? item.size in user.list : true"
}式の構文の完全な定義については、https://expr-lang.org/docs/language-definition をご参照ください。
エンジンインターフェイスの `features` フィールドで提供されるコンテキスト特徴は、`user` に関連付けられています。`Value` が固定値ではなく変数である必要がある場合は、`"user.xxx"` に設定して特定のユーザー属性を参照します。たとえば、ユーザーの `age` 属性を参照する場合、設定は `"Value":"user.age"` となります。