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

Artificial Intelligence Recommendation:フィルタの設定

最終更新日:Oct 31, 2025

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

はい

エンジンの組み込みフィルタの種類。有効な値:

  • User2ItemExposureFilter

  • User2ItemCustomFilter

  • AdjustCountFilter

  • PriorityAdjustCountFilter

  • ItemStateFilter

  • ItemCustomFilter

  • CompletelyFairFilter

  • GroupWeightCountFilter

  • DimensionFieldUniqueFilter

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フィルタの設定。

  • Count

int

はい

リコールリンクの返された結果から選択されるアイテムの最大数。

  • Type

string

いいえ

数値調整の種類。有効な値:accumulatorとfix。

accumulator:

  • 上記の構成では、recall_1の返された結果から選択されたアイテムの数が125未満の場合、合計250に達するためにrecall_2の返された結果からより多くのアイテムが選択されます。

fix:

  • 各リコールリンクの返された結果から選択されたアイテムの数は固定です。1つのリコールリンクに対して選択されたアイテムの数が指定された値未満の場合、システムは不足分を補うために他のリコールリンクに対してより多くのアイテムを選択しません。

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パラメータで指定されたフィルタのカスタム名。

付録

演算子の例

  1. equal(指定された値と等しい)

{
 "Name" : "publicStatus", // 公開ステータス
 "Type" : "int", // 種類
 "Operator" : "equal", // 等しい
 "Value" : 0 // 値
}

  1. not_equal(指定された値と等しくない)

{
 "Name" : "checkStatus", // チェックステータス
 "Type" : "int", // 種類
 "Operator" : "not_equal", // 等しくない
 "Value" : 2 // 値
}

  1. greater(指定された値より大きい)

{
 "Name" : "checkStatus", // チェックステータス
 "Type" : "int", // 種類
 "Operator" : "greater", // より大きい
 "Value" : 2 // 値
}

  1. greaterThan(指定された値以上)

{
 "Name" : "checkStatus", // チェックステータス
 "Type" : "int", // 種類
 "Operator" : "greaterThan", // 以上
 "Value" : 2 // 値
}

  1. less(指定された値より小さい)

{
 "Name" : "checkStatus", // チェックステータス
 "Type" : "int", // 種類
 "Operator" : "less", // より小さい
 "Value" : 2 // 値
}

  1. lessThan(指定された値以下)

{
 "Name" : "checkStatus", // チェックステータス
 "Type" : "int", // 種類
 "Operator" : "lessThan", // 以下
 "Value" : 2 // 値
}

  1. in(配列内の1つまたはいくつかの値と等しい)

{
 "Name" : "state", // 状態
 "Type" : "int", // 種類
 "Operator" : "in", // 含まれる
 "Value" : [2, 4, 6] // 値
}

String

{
 "Name" : "state", // 状態
 "Type" : "string", // 種類
 "Operator" : "in", // 含まれる
 "Value" : ["success", "ok"] // 値
}