ソート段階は、詳細ソート段階の後に実行されます。この段階では、アイテムのソート、多様化の適用、ウィンドウ ルールの追加ができます。
設定方法
ソート構成は、構成概要の `SortConfs` に対応します。`SortConfs` は `[]object` 構造であり、複数のソートポリシーを設定できます。PAI-Rec は、BoostScoreSort、BoostScoreByWeight、ItemRankScore、DiversityRuleSort、DPPSort、MultiRecallMixSort といった組み込みポリシーを提供します。
共通のソート構成
各ソート構成は、共通構成のサブセットを使用します。このセクションでは、繰り返しを避けるためにこれらの構成について説明します。
構成例:
{
"SortConfs": [
{
"Name": "",
"SortType": ""
}
]
}
|
フィールド |
タイプ |
必須 |
説明 |
|
Name |
string |
はい |
ソートのカスタム名。この名前は `SortNames` で参照できます。 |
|
SortType |
string |
はい |
ソートタイプ。列挙値:
|
スコアのブースティングソート (BoostScoreSort)
詳細ソートモデルが呼び出された後、各アイテムにスコアが付けられます。ビジネス要件に基づいて、このスコアをブースティングまたは引き下げることで変更が必要になる場合があります。
ブースティングまたはスコアの引き下げ操作は、2 つの部分で構成されます:
-
条件ルールの設定。カテゴリや性別などのアイテムまたはユーザーのプロパティを使用して、条件が満たされているかどうかを判断できます。
-
ブースティングまたはスコア引き下げの式の設定。現在、`score × 1.2` や `score × 0.5` のように、スコアに対する式のみ設定できます。
構成例:
{
"SortConfs": [
{
"Name": "BoostScoreSort",
"SortType": "BoostScoreSort",
"Debug": false,
"BoostScoreConditions": [
{
"Conditions": [
{
"Name": "sex",
"Domain": "item",
"Type": "string",
"Value": "gender",
"Operator": "equal"
}
],
"Expression": "score * 2"
}
]
}
]
}
この構成では、`sex` 特徴量が `male` のアイテムのスコアを 2 倍にします。
|
フィールド名 |
タイプ |
必須 |
説明 |
|
Name |
string |
はい |
カスタムのソート名。 |
|
SortType |
string |
はい |
ソートタイプ。静的フィールド:`BoostScoreSort`。 |
|
Debug |
bool |
いいえ |
デバッグフラグ。`true` に設定すると、ブースティングまたはスコア引き下げ前の元のスコアが、アイテムの `properties` に `org_score` として記録されます。その後、リクエストでデバッグフラグを有効にして、アイテムのプロパティ値を確認できます。これはデバッグ専用であり、本番環境では有効にしないでください。 |
|
BoostScoreConditions |
json array |
はい |
スコアのブースティングまたは引き下げのための条件構成。複数の条件を構成してスコアをブースティングまたは引き下げることができます。 |
|
[]FilterParamConfig |
はい |
スコアのブースティングまたは引き下げのための条件ルール。 |
|
string |
はい |
スコアをブースティングまたは引き下げるための式。`score` は現在のアイテムスコアを表します。式はアイテムのプロパティを参照できます。たとえば、`item_weight` がアイテムのプロパティである場合、式を `score × item_weight` に設定できます。 |
`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 |
はい |
特徴量の値。 |
条件設定の詳細については、「カウント調整フィルター (AdjustCountFilter)」をご参照ください。
重みによるスコアのブースティング (BoostScoreByWeight)
アイテムのスコアをブースティングまたは引き下げる際、異なるアイテムは異なる重みを持つことができます。重みはアイテムテーブルのフィールドであり、スコアの調整に使用されます。
スコアの数式:`weight × item.score`
構成例:
{
"SortConfs": [
{
"Name": "BoostScoreByWeight",
"SortType": "BoostScoreByWeight",
"TimeInterval": 172800,
"BoostScoreByWeightDao": {
"AdapterType": "hologres",
"HologresName": "pai_rec",
"HologresTableName": "test",
"ItemFieldName": "item_id",
"WeightFieldName": "weight"
}
}
]
}
BoostScoreByWeightDao
|
フィールド |
タイプ |
必須 |
説明 |
|
AdapterType |
string |
はい |
データソースのタイプ。現在、`hologres` のみがサポートされています。 |
|
HologresName |
string |
はい |
データソース構成 (`HologresConfs`) で構成された Hologres インスタンスのカスタム名。例:データソース構成の `holo_info`。 |
|
HologresTableName |
string |
はい |
Hologres 内のアイテム重みテーブルの名前。 |
|
ItemFieldName |
string |
はい |
アイテム重みテーブルのプライマリキー。 |
|
WeightFieldName |
string |
はい |
アイテム重みテーブルの重みフィールド。 |
アイテムランクスコア (ItemRankScore)
`ItemRankScore` は、アイテムをスコアに基づいて降順にソートします。この機能は DPI エンジンに組み込まれており、`SortNames` で直接使用できます。
多様性ルールソート (DiversityRuleSort)
推薦結果を出力する際、ユーザーの興味だけでなく、アイテムの多様性も考慮します。これにより、異なるカテゴリや異なるプロパティを持つアイテムを出力に混在させることができます。
ルールは次のように構成できます:
推薦多様性ルール
用語集:
-
多様化ディメンション:多様化に使用されるアイテムのプロパティ。例:カテゴリ、作成者、タグ。
-
分散ポリシー:
-
最小間隔 k:特定の多様化ディメンションのアイテムは、最大で k 回連続して出現できます。
-
最大頻度 m:サイズ n のウィンドウ内で、同じ多様化ディメンションのアイテムは m 回を超えて出現できません。
-
分散ロジック:
-
多様化ルールは、単一のリクエストの結果にのみ適用されます。リクエスト間の多様性は考慮されません。
-
複数の多様化ディメンションを構成できます。
-
各多様化ディメンションに対して、異なるパラメーター (k, m, n) を持つ複数の多様化ポリシーを構成できます。
構成例:
{
"SortConfs": [
{
"Name": "DiversityRuleSort",
"SortType": "DiversityRuleSort",
"DiversitySize": 100,
"DiversityRules": [
{
"Dimensions": ["spfl"],
"WindowSize": 10,
"FrequencySize": 1
}
],
"ExcludeRecalls": [
"ColdStartVideoVectorRecall",
"LinUcbRecall_default2"
],
"Conditions": [
{
"Name": "spflPick",
"Domain": "user",
"Type": "string",
"Value": "",
"Operator": "equal"
}
]
}
]
}
このソートは `ExcludeRecalls` パラメーターと一緒に使用する必要があります。
DiversityRules
|
フィールド |
タイプ |
必須 |
説明 |
|
Name |
string |
はい |
カスタムのソート名。 |
|
SortType |
string |
はい |
ソートタイプ。静的フィールド:`DiversityRuleSort`。 |
|
DiversitySize |
int |
いいえ |
多様化するアイテムの数。デフォルト値はリクエストの `size` です。 |
|
Conditions |
[]FilterParamConfig |
いいえ |
多様化ルールの条件。多様化ルールは、ユーザープロパティが特定の条件を満たす場合にのみ適用されます。条件設定の詳細については、「条件付きマッチングの演算子の例」をご参照ください。ここでの条件はユーザープロパティに基づいて設定されるため、`Domain` を `user` に設定する必要があります。 |
|
ExcludeRecalls |
[]string |
いいえ |
多様性ソートから除外するリコール ID のリスト。 |
|
DiversityRules |
json array |
はい |
多様化ルール。複数のルールを設定できます。 |
|
[]string |
はい |
多様化に使用するアイテムのプロパティ。 |
|
int |
はい |
同じディメンションのアイテムが連続して出現する回数を制御します。これは前述の k の値です。 |
|
int |
いいえ |
ウィンドウサイズ。これは前述の n の値です。 |
|
int |
いいえ |
ウィンドウ内での繰り返し回数。これは前述の m の値です。 |
|
int |
いいえ |
多様性ルールの重み。 |
|
ExclusionRules |
json array |
いいえ |
除外ルール。条件を満たす特定のアイテムを特定の位置から除外します。 |
|
[]int |
はい |
アイテムの出力位置。1 から始まります。リクエストの `size` が 10 の場合、位置は 1, 2, 3, ..., 10 です。 |
|
[]FilterParamConfig |
はい |
ルール条件。条件設定の詳細については、「条件付きマッチングの演算子の例」をご参照ください。これらは主にアイテムのプロパティに対して設定されます。 |
|
ExploreItemSize |
int |
いいえ |
デフォルトでは、候補セットの最初のアイテムが多様化ルールを満たさない場合、検索は完了するまで続行されます。このパラメーターは、検索する候補セットのサイズを制御します。この値を超えると、検索は停止します。 |
除外ルールと検索深度については、次の例をご参照ください。
条件 `tag=t1` を満たすアイテムは、出力位置 1, 2, 3, 4 には表示されません。位置 1, 2, 3, 4 に表示されるアイテムは、引き続き多様化ルールに従う必要がありますが、`tag=t1` を持つことはできません。
{
"Name": "DiversityRuleSort",
"SortType": "DiversityRuleSort",
"DiversityRules": [
{
"Dimensions": [
"tag"
],
"WindowSize": 5,
"FrequencySize": 1
}
],
"ExclusionRules": [
{
"Positions": [
1,2,3,4
],
"Conditions": [
{
"Name": "tag",
"Domain": "item",
"Type": "string",
"Value": "t1",
"Operator": "equal"
}
]
}
],
"ExploreItemSize" : 200
}
多様性ルールを満たすアイテムを検索する場合、デフォルトでは、すべてのルールを満たすアイテムのみが出力されます。いずれかの多様性ルールが満たされない場合、システムはすべてのルールを満たすアイテムが見つかるまで次のアイテムを検索します。候補セット内のどのアイテムもすべてのルールを満たさない場合、最初に検索されたアイテムが出力用に選択されます。
別のポリシーも利用可能です。多様性ルールに重みを追加できます。候補セット内のどのアイテムもすべてのルールを満たさない場合、最も高い合計重みを持つルールを満たすアイテムが出力用に選択されます。複数のアイテムが同じ最高の合計重みを持つ場合、リストで最も早く現れるものが選択されます。
重み付きの構成例は次のとおりです:
{
"Name": "DiversityRuleSort",
"SortType": "DiversityRuleSort",
"DiversityRules": [
{
"Dimensions": [
"tag"
],
"WindowSize": 5,
"FrequencySize": 1,
"Weight": 1
},
{
"Dimensions": [
"category"
],
"WindowSize": 3,
"FrequencySize": 1,
"Weight": 3
}
],
"ExclusionRules": [
{
"Positions": [
1
],
"Conditions": [
{
"Name": "tag",
"Domain": "item",
"Type": "string",
"Value": "t1",
"Operator": "equal"
}
]
}
]
}
DPPSort
DPP (行列式点過程) 多様性アルゴリズムの詳細については、「行列式点過程に基づくアルゴリズムによる推薦多様性向上の直感的理解」をご参照ください。
前提条件:DPP アルゴリズムを使用するには、アイテムの埋め込みベクトルが必要です。これらのベクトルは、アイテムのコンテンツを表す必要があります。埋め込みの類似性は、行動などの他のレベルではなく、アイテムのコンテンツレベルでの類似性を表す必要があります。例:
-
推奨:アイテムの画像埋め込み、テキスト記述の埋め込み、またはカテゴリやプロパティなどの静的なアイテムコンテンツの組み合わせから生成された埋め込み。
-
非推奨:ユーザーの行動データに基づくモデルからトレーニングされた埋め込み。
基本的に、多様化したいディメンションは埋め込みに反映されている必要があります。たとえば、推薦リストにプロダクトの価格ディメンションで多様性を持たせたい場合、埋め込みベクトルを取得するためのモデルをトレーニングする際に、価格特徴量を含める必要があります。そうでなければ、望む効果は得られません。
構成例:
{
"SortConfs": [
{
"Name": "DPPSort",
"SortType": "DPPSort",
"DPPConf": {
"Name": "DPPSort",
"DaoConf": {
"AdapterType": "hologres",
"HologresName": "geeko_rec"
},
"TableName": "item_embedding_metric_learning",
"TableSuffixParam": "embedding_date",
"TablePKey": "product_id",
"EmbeddingColumn": "embedding",
"Alpha": 4.5,
"NormalizeEmb": "false",
"WindowSize": 10
}
}
]
}
DPPConf
|
フィールド名 |
タイプ |
必須 |
説明 |
|
Name |
string |
はい |
カスタムのソート名。 |
|
DaoConf |
DaoConfig |
はい |
Hologres の情報を構成します。 |
|
TableName |
string |
いいえ |
Hologres 内のアイテム埋め込みベクトルテーブルの名前。`EmbeddingHookNames` が構成されていない場合は必須です。 |
|
TableSuffixParam |
string |
いいえ |
空でない場合、システムは PAI-Rec の |
|
TablePKey |
string |
いいえ |
埋め込みベクトルテーブルのプライマリキー。 |
|
EmbeddingColumn |
string |
いいえ |
埋め込みベクトルテーブルのベクトルフィールドの名前。 |
|
EmbeddingSeparator |
string |
いいえ |
埋め込みベクトルの区切り文字。デフォルトはカンマです。 |
|
Alpha |
float |
はい |
DPP アルゴリズムのパラメーターで、関連性と多様性のバランスを取るために使用されます。値が大きいほど関連性が高くなります。 |
|
CacheTimeInMinutes |
int |
いいえ |
埋め込みベクトルをメモリにキャッシュする時間 (分)。デフォルト:360。 |
|
EmbeddingHookNames |
[]string |
いいえ |
アイテムの埋め込みを生成する関数の名前。これらの関数は事前に登録されている必要があります。 |
|
NormalizeEmb |
string |
いいえ |
埋め込みベクトルに対して L2 正規化を実行するかどうかを指定します。埋め込みが生成されたときに L2 正規化が既に行われている場合は、再度行う必要はありません。そうでない場合は、これを `true` に設定します。 |
|
WindowSize |
int |
いいえ |
多様性アルゴリズムのスライディングウィンドウのサイズ。多様性はウィンドウ内でのみ保証されます。デフォルト:10。 |
|
EmbMissedThreshold |
float |
いいえ |
埋め込みが欠落しているアイテムの割合がこの値より高い場合、エラーが報告されます。デフォルト:0.5。 |
|
FilterRetrieveIds |
[]string |
いいえ |
DPP モジュールを呼び出す必要のないアイテムのリストを指定します。例:コールドスタートアイテム。 |
|
EnsurePositiveSim |
string |
いいえ |
埋め込みに基づいて計算されたアイテムの類似性が正の値であることを保証するかどうかを指定します。デフォルト:`true`。 |
|
CandidateCount |
int |
いいえ |
多様化のための候補セットのサイズ。デフォルトでは、ソート段階に入るすべてのアイテムが含まれます。より小さい数に設定して、候補セットを元のトップ N アイテムに制限することができます。 |
|
AbortRunCount |
int |
いいえ |
ソート段階に入るアイテムの数がこの値より少ない場合、現在のリクエストに対して多様化は実行されません。デフォルト:0。 |
|
MinScorePercent |
float |
いいえ |
アイテムが多様化モジュールによって出力される資格を得るには、その最大正規化されたソートスコアがこの値より大きい必要があります。デフォルト:0。 |
SSDSort
SSD (構造化自己蒸留) 多様性アルゴリズムの詳細については、「推薦結果の多様性向上:MMR/DPP/SSD の原理分析」をご参照ください。
前提条件:SSD アルゴリズムを使用するには、アイテムの埋め込みベクトルが必要です。これらのベクトルは、アイテムのコンテンツを表す必要があります。埋め込みの類似性は、行動などの他のレベルではなく、アイテムのコンテンツレベルでの類似性を表す必要があります。例:
推奨:アイテムの画像埋め込み、テキスト記述の埋め込み、またはカテゴリやプロパティなどの静的なアイテムコンテンツの組み合わせから生成された埋め込み。
非推奨:ユーザーの行動データに基づくモデルからトレーニングされた埋め込み。
基本的に、多様化したいディメンションは埋め込みに反映されている必要があります。たとえば、推薦リストにプロダクトの価格ディメンションで多様性を持たせたい場合、埋め込みベクトルを取得するためのモデルをトレーニングする際に、価格特徴量を含める必要があります。そうでなければ、望む効果は得られません。
構成例:
{
"SortConfs": [
{
"Name": "SSDSort",
"SortType": "SSDSort",
"SSDConf": {
"Name": "SSDSort",
"DaoConf": {
"AdapterType": "hologres",
"HologresName": "geeko_rec"
},
"TableName": "item_embedding_metric_learning",
"TablePKey": "item_id",
"EmbeddingColumn": "embedding",
"Gamma": 0.25,
"UseSSDStar": true,
"NormalizeEmb": "false",
"MinScorePercent": 0.1,
"CandidateCount": 200,
"WindowSize": 5
}
}
]
}
SSDConf
|
フィールド名 |
タイプ |
必須 |
説明 |
|
Name |
string |
はい |
カスタムのソート名。 |
|
DaoConf |
DaoConfig |
はい |
Hologres の情報を構成します。 |
|
TableName |
string |
いいえ |
Hologres 内のアイテム埋め込みベクトルテーブルの名前。`EmbeddingHookNames` が構成されていない場合は必須です。 |
|
TableSuffixParam |
string |
いいえ |
空でない場合、システムは PAI-Rec の |
|
TablePKey |
string |
いいえ |
埋め込みベクトルテーブルのプライマリキー。 |
|
EmbeddingColumn |
string |
いいえ |
埋め込みベクトルテーブルのベクトルフィールドの名前。 |
|
EmbeddingSeparator |
string |
いいえ |
埋め込みベクトルの区切り文字。デフォルトはカンマです。 |
|
Gamma |
float |
はい |
SSD アルゴリズムのパラメーターで、関連性と多様性のバランスを取るために使用されます。値が大きいほど多様性が高くなります。 |
|
UseSSDStar |
bool |
いいえ |
SSD の論文で言及されている最適化アルゴリズムを有効にするかどうかを指定します。デフォルト:`false`。有効にすることを推奨します。 |
|
CacheTimeInMinutes |
int |
いいえ |
埋め込みベクトルをメモリにキャッシュする時間 (分)。デフォルト:360。 |
|
EmbeddingHookNames |
[]string |
いいえ |
アイテムの埋め込みを生成する関数の名前。これらの関数は事前に登録されている必要があります。 |
|
NormalizeEmb |
string |
いいえ |
埋め込みベクトルに対して L2 正規化を実行するかどうかを指定します。埋め込みが生成されたときに L2 正規化が既に行われている場合は、再度行う必要はありません。そうでない場合は、これを `true` に設定します。 |
|
WindowSize |
int |
いいえ |
多様性アルゴリズムのスライディングウィンドウのサイズ。多様性はウィンドウ内のアイテムリストでのみ保証されます。デフォルト:5。 |
|
EmbMissedThreshold |
float |
いいえ |
埋め込みが欠落しているアイテムの割合がこの値より高い場合、エラーが報告されます。デフォルト:0.5。 |
|
FilterRetrieveIds |
[]string |
いいえ |
SSD モジュールを呼び出す必要のないアイテムのリストを指定します。例:コールドスタートアイテム。 |
|
EnsurePositiveSim |
string |
いいえ |
埋め込みに基づいて計算されたアイテムの類似性が正の値であることを保証するかどうかを指定します。デフォルト:`true`。 |
|
CandidateCount |
int |
いいえ |
多様化のための候補セットのサイズ。デフォルトでは、ソート段階に入るすべてのアイテムが含まれます。より小さい数に設定して、候補セットを元のトップ N アイテムに制限することができます。 |
|
AbortRunCount |
int |
いいえ |
ソート段階に入るアイテムの数がこの値より少ない場合、現在のリクエストに対して多様化は実行されません。デフォルト:0。 |
|
MinScorePercent |
float |
いいえ |
アイテムが多様化モジュールによって出力される資格を得るには、その最大正規化されたソートスコアがこの値より大きい必要があります。デフォルト:0。 |
マルチチャネルリコールソート (MultiRecallMixSort)
通常、多くのリコールチャネルがあります。ビジネス要件に基づいて、リコールタイプに基づいて出力を混在させる必要がある場合があります。例:
-
コールドスタートリコールには露出量の要件があります。
-
特定のリコールチャネルには位置の要件があります。
これには複数のミキシングルールが含まれる場合もあります。
構成は次のとおりです:
{
"SortConfs": [
{
"Name": "MixSort",
"SortType": "MultiRecallMixSort",
"RemainItem": false,
"MixSortRules": [
{
"MixStrategy": "random_position",
"NumberRate": 0.1,
"RecallNames": [
"OTSGlobalHot"
]
},
{
"MixStrategy": "fix_position",
"Positions": [1,3,5],
"RecallNames": [
"RecallName1"
]
}
]
}
]
}
リコール名を使用してアイテムを照合およびフィルタリングするだけでなく、条件付きフィルタリングを使用して露出するアイテムを選択することもできます。
{
"SortConfs": [
{
"Name": "MixSortByItemFeature",
"SortType": "MultiRecallMixSort",
"RemainItem": false,
"MixSortRules": [
{
"MixStrategy": "random_position",
"NumberRate": 0.1,
"Conditions": [
{
"Name": "gender",
"Domain": "item",
"Type": "string",
"Value": "man",
"Operator": "equal"
}
]
}
]
}
]
}
|
フィールド |
タイプ |
必須 |
説明 |
|
Name |
string |
はい |
カスタムのソート名。 |
|
SortType |
string |
はい |
ソートタイプ。静的フィールド:`MultiRecallMixSort`。 |
|
RemainItem |
bool |
いいえ |
すべてのアイテムを保持するかどうかを指定します。たとえば、処理するアイテムが 500 個あるが、リクエストサイズが 30 の場合、これを `false` に設定すると、混合された結果のみが保持されます。`true` に設定すると、残りのアイテムも保持されますが、30 個の混合アイテムの後に配置されます。これにより、後続のソート段階でさらなる制御と処理が可能になります。 |
|
MixSortRules |
json array |
はい |
ミキシングルール。複数のルールを設定できます。 |
|
string |
はい |
ミキシングポリシー。列挙値:`random_position` または `fix_position`。
|
|
[]int |
いいえ |
`MixStrategy` が `fix_position` の場合、`Positions` を指定する必要があります。位置は 1 から始まります。 |
|
string |
いいえ |
`MixStrategy` が `fix_position` の場合、アイテムのプロパティフィールドから位置を取得できます。`Positions` と `PositionField` は相互排他的です。どちらか一方しか設定できません。 |
|
int |
いいえ |
数量の絶対値。 |
|
float |
いいえ |
混合アイテムの割合。これは `MixStrategy` が `random_position` の場合にのみ設定されます。有効な値は 0 から 1 です。具体的な数は `request_size × NumberRate` で計算されます。 |
|
[]string |
いいえ |
リコールチャネルの名前。複数の名前を設定できます。複数の名前が設定されている場合、それらは構成を共有します。ただし、使用される特定のリコールチャネルは固定されていません。順序は、このソート段階に入るときの位置によって決まります。 |
|
[]FilterParamConfig |
いいえ |
一致する条件を満たすアイテムが混合されます。条件設定の詳細については、「条件付きマッチングの演算子の例」をご参照ください。 |
使用方法
ソート構成はリコール構成に似ています。構成後、異なるシナリオで使用するために `SortNames` パラメーターを提供します。`SortNames` は `Map[string]object` 構造で、キーはシナリオであり、各シナリオは一連のソートポリシーに対応します。
{
"SortNames": {
"${scene_name}": [
"ItemRankScore"
]
}
}
-
`${scene_name}` はシナリオ名です。複数のシナリオで同じ構成を使用したい場合は、`default` を使用できます。
-
`ItemRankScore`:このパラメーターは、`SortConfs` で定義されたソートのカスタム名です。