A etapa de re-ranking ocorre após a classificação refinada. Use-a para ajustar pontuações de itens, diversificar resultados de recomendação e controlar a mistura de itens de diferentes canais de recall.
Como funciona
Configure o re-ranking em duas etapas:
Defina políticas de ordenação em
SortConfs. Cada política tem um nome e um tipo, encapsulando a lógica de um comportamento de ordenação.Ative políticas por cenário em
SortNames. Referencie os nomes definidos emSortConfspara determinar quais políticas se aplicam a cada cenário.
{
"SortConfs": [
{
"Name": "my-boost-policy",
"SortType": "BoostScoreSort",
...
}
],
"SortNames": {
"${scene_name}": ["my-boost-policy"]
}
}
O PAI-Rec oferece os seguintes tipos de ordenação integrados: BoostScoreSort, BoostScoreByWeight, ItemRankScore, DiversityRuleSort, DPPSort, SSDSort e MultiRecallMixSort.
Campos comuns
Todas as políticas de ordenação compartilham estes campos base:
|
Campo |
Tipo |
Obrigatório |
Descrição |
|
|
string |
Sim |
Nome personalizado da política. Referencie este nome em |
|
|
string |
Sim |
Tipo de ordenação. Valores válidos: |
Políticas de ordenação
ItemRankScore
O ItemRankScore ordena todos os itens em ordem decrescente de pontuação. Esse recurso é nativo do mecanismo DPI e não exige configuração adicional. Referencie-o diretamente em SortNames.
Ordenação por ajuste de pontuação (BoostScoreSort)
Use o BoostScoreSort para aumentar ou reduzir a pontuação dos itens após a classificação refinada, com base nas propriedades do item ou do usuário. Por exemplo, para destacar roupas femininas para usuárias do sexo feminino, multiplique a pontuação dos itens em que sex = female. Para suprimir itens de baixa qualidade, aplique score * 0.5 quando um indicador de qualidade estiver abaixo de um determinado limiar.
Essa política aplica uma expressão condicional para ajustar as pontuações:
Condições: correspondem a itens ou usuários por propriedade (por exemplo,
sex = female,category = electronics).Expressão: fórmula aplicada à pontuação quando as condições são atendidas (por exemplo,
score * 1.5,score * 0.5).
Exemplo de configuração:
{
"SortConfs": [
{
"Name": "BoostScoreSort",
"SortType": "BoostScoreSort",
"Debug": false,
"BoostScoreConditions": [
{
"Conditions": [
{
"Name": "sex",
"Domain": "item",
"Type": "string",
"Value": "gender",
"Operator": "equal"
}
],
"Expression": "score * 2"
}
]
}
]
}
Esta configuração multiplica a pontuação por 2 para itens cuja feature sex seja igual a male.
Campos do BoostScoreSort
|
Campo |
Tipo |
Obrigatório |
Descrição |
|
|
string |
Sim |
Nome personalizado da ordenação. |
|
|
string |
Sim |
Defina como |
|
|
bool |
Não |
Se |
|
|
json array |
Sim |
Uma ou mais regras condicionais de aumento ou redução de pontuação. |
|
|
[]FilterParamConfig |
Sim |
Condições obrigatórias para aplicar a expressão. |
|
|
string |
Sim |
Expressão de ajuste da pontuação. |
Campos do FilterParamConfig
|
Campo |
Tipo |
Obrigatório |
Descrição |
|
|
string |
Sim |
Nome da feature no item ou usuário. |
|
|
string |
Sim |
|
|
|
string |
Sim |
Operador de comparação. Valores válidos: |
|
|
string |
Sim |
Tipo de dados da feature. |
|
|
object |
Sim |
Valor usado na comparação. |
Para mais informações sobre configurações condicionais, consulte Ajustar filtro de contagem (AdjustCountFilter).
Ajuste de pontuação por peso (BoostScoreByWeight)
Use o BoostScoreByWeight quando diferentes itens precisarem de multiplicadores de pontuação distintos, armazenados em uma tabela do Hologres, em vez de uma expressão baseada em regras. A fórmula da pontuação é weight × item.score.
Exemplo de configuração:
{
"SortConfs": [
{
"Name": "BoostScoreByWeight",
"SortType": "BoostScoreByWeight",
"TimeInterval": 172800,
"BoostScoreByWeightDao": {
"AdapterType": "hologres",
"HologresName": "pai_rec",
"HologresTableName": "test",
"ItemFieldName": "item_id",
"WeightFieldName": "weight"
}
}
]
}
Campos do BoostScoreByWeightDao
|
Campo |
Tipo |
Obrigatório |
Descrição |
|
|
string |
Sim |
Tipo da source de dados. Apenas |
|
|
string |
Sim |
Nome personalizado da instância do Hologres conforme configurado em |
|
|
string |
Sim |
Nome da tabela de pesos dos itens no Hologres. |
|
|
string |
Sim |
Campo de chave primária da tabela de pesos dos itens. |
|
|
string |
Sim |
Campo de peso na tabela de pesos dos itens. |
Ordenação por regra de diversidade (DiversityRuleSort)
Use o DiversityRuleSort para evitar que as recomendações se concentrem em uma única categoria, autor ou tag. Essa política impõe regras de espaçamento em uma ou mais propriedades do item.
ODiversityRuleSortexige o uso do parâmetroExcludeRecalls.
Conceitos principais
Dimensão de diversificação: propriedade do item usada para diversificação, como
category,authoroutag.IntervalSize (k): número máximo de itens consecutivos com o mesmo valor de dimensão. Por exemplo,
IntervalSize: 2significa que no máximo 2 itens consecutivos podem compartilhar a mesma categoria.WindowSize (n) e FrequencySize (m): dentro de uma janela deslizante de n itens, um item com o mesmo valor de dimensão não pode aparecer mais que m vezes. Por exemplo,
WindowSize: 10, FrequencySize: 2indica que a mesma categoria pode aparecer no máximo duas vezes em quaisquer 10 posições consecutivas.
As regras de diversidade aplicam-se apenas a uma única requisição; o sistema não impõe diversidade entre requisições.
Exemplo de configuração:
{
"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"
}
]
}
]
}
Campos do DiversityRuleSort
|
Campo |
Tipo |
Obrigatório |
Descrição |
|
|
string |
Sim |
Nome personalizado da ordenação. |
|
|
string |
Sim |
Defina como |
|
|
int |
Não |
Quantidade de itens aos quais as regras de diversidade serão aplicadas. O padrão é o |
|
|
[]FilterParamConfig |
Não |
Aplica as regras de diversidade apenas quando as propriedades do usuário corresponderem a essas condições. Defina |
|
|
[]string |
Não |
IDs dos canais de recall a excluir da ordenação por diversidade. |
|
|
json array |
Sim |
Uma ou mais regras de diversidade. |
|
|
[]string |
Sim |
Propriedades do item usadas para diversificação. |
|
|
int |
Sim |
Máximo de itens consecutivos com o mesmo valor de dimensão (k). |
|
|
int |
Não |
Tamanho da janela deslizante (n). |
|
|
int |
Não |
Ocorrências máximas do mesmo valor de dimensão dentro da janela (m). |
|
|
int |
Não |
Peso desta regra de diversidade. Usado quando nenhum item satisfaz todas as regras — veja a lógica de seleção abaixo. |
|
|
json array |
Não |
Exclui itens correspondentes às condições de posições específicas de saída. |
|
|
[]int |
Sim |
Posições de saída a excluir (começando em 1). |
|
|
[]FilterParamConfig |
Sim |
Condições para exclusão de itens. Para detalhes, consulte Exemplos de operadores para correspondência condicional. |
|
|
int |
Não |
Número máximo de candidatos a pesquisar ao buscar um item que satisfaça as regras de diversidade. A busca termina após atingir esse limite. |
Lógica de seleção
Por padrão, um item é incluído na saída apenas se satisfizer todas as regras de diversidade. Caso nenhum candidato atenda a todas as regras, o primeiro candidato encontrado será selecionado.
Com regras ponderadas, se nenhum candidato satisfizer todas as regras, aquele que atender às regras de maior peso será escolhido. Empates são resolvidos pela posição na lista de candidatos.
Exemplo: regras de exclusão e profundidade de busca
Itens com tag = t1 são excluídos das posições 1 a 4. Essas posições ainda respeitam as regras de diversidade, mas itens com tag = t1 não podem preenchê-las.
{
"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
}
Exemplo: regras de diversidade ponderadas
{
"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
O DPPSort aplica o algoritmo Determinantal Point Process (DPP) para equilibrar relevância e diversidade. Para entender melhor o algoritmo, consulte Uma compreensão intuitiva do algoritmo baseado em DPP para melhorar a diversidade de recomendações.
Pré-requisitos
O DPPSort requer vetores de embedding de itens que representem o conteúdo do item, e não similaridade comportamental.
Recomendado: embeddings de imagens, embeddings de descrições textuais ou embeddings derivados de atributos estáticos do item (categorias, propriedades).
Evite: embeddings treinados a partir de dados comportamentais do usuário.
As dimensões a diversificar devem estar capturadas nos embeddings. Por exemplo, para diversificar por preço, a feature de preço deve ser incluída durante o treinamento do modelo de embedding.
Exemplo de configuração:
{
"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
}
}
]
}
Campos do DPPConf
|
Campo |
Tipo |
Obrigatório |
Descrição |
|
|
string |
Sim |
Nome personalizado da ordenação. |
|
|
DaoConfig |
Sim |
Informações de conexão do Hologres. |
|
|
string |
Não |
Tabela de vetores de embedding no Hologres. Obrigatório se |
|
|
string |
Não |
Se definido, o sistema recupera o valor deste parâmetro no Gerenciamento de Parâmetros da página DPI Engine Service Management do PAI-Rec e o anexa como sufixo a |
|
|
string |
Não |
Chave primária da tabela de vetores de embedding. |
|
|
string |
Não |
Campo vetorial na tabela de embedding. |
|
|
string |
Não |
Separador para valores de embedding. Padrão: vírgula. |
|
|
float |
Sim |
Controla o equilíbrio entre relevância e diversidade. Valores maiores favorecem a relevância. |
|
|
int |
Não |
Tempo de cache dos vetores de embedding em memória, em minutos. Padrão: 360. |
|
|
[]string |
Não |
Nomes das funções que geram embeddings de itens. As funções devem ser registradas previamente. |
|
|
string |
Não |
Indica se deve aplicar normalização L2 aos embeddings. Se a normalização já foi aplicada durante a geração, deixe este campo indefinido. Caso contrário, defina como |
|
|
int |
Não |
Tamanho da janela deslizante. A diversidade é imposta apenas dentro da janela. Padrão: 10. |
|
|
float |
Não |
Reporta erro se a proporção de itens sem embeddings exceder este valor. Padrão: 0,5. |
|
|
[]string |
Não |
Itens que ignoram o processamento DPP, como itens de cold-start. |
|
|
string |
Não |
Garante que a similaridade calculada entre itens seja positiva. Padrão: |
|
|
int |
Não |
Tamanho do conjunto de candidatos para diversificação. O padrão inclui todos os itens que entram na etapa de ordenação. Defina um valor menor para limitar a diversificação aos N principais itens. |
|
|
int |
Não |
Ignora a diversificação se o número de itens na etapa de ordenação for inferior a este valor. Padrão: 0. |
|
|
float |
Não |
Um item precisa ter uma pontuação normalizada pelo máximo acima deste limiar para ser elegível para saída. Padrão: 0. |
SSDSort
O SSDSort aplica o algoritmo Structured Self-Distillation (SSD) como alternativa ao DPP. Para mais contexto, consulte Melhorando a diversidade dos resultados de recomendação: uma análise dos princípios MMR/DPP/SSD.
O SSDSort tem os mesmos pré-requisitos que o DPPSort — os vetores de embedding devem representar o conteúdo, não a similaridade comportamental. A principal diferença reside no parâmetro de ajuste: Gamma (valores maiores = mais diversidade), em contraste com o Alpha do DPP (valores maiores = mais relevância).
Exemplo de configuração:
{
"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
}
}
]
}
Campos do SSDConf
|
Campo |
Tipo |
Obrigatório |
Descrição |
|
|
string |
Sim |
Nome personalizado da ordenação. |
|
|
DaoConfig |
Sim |
Informações de conexão do Hologres. |
|
|
string |
Não |
Tabela de vetores de embedding no Hologres. Obrigatório se |
|
|
string |
Não |
Se definido, o sistema recupera o valor deste parâmetro no Gerenciamento de Parâmetros da página DPI Engine Service Management do PAI-Rec e o anexa como sufixo a |
|
|
string |
Não |
Chave primária da tabela de vetores de embedding. |
|
|
string |
Não |
Campo vetorial na tabela de embedding. |
|
|
string |
Não |
Separador para valores de embedding. Padrão: vírgula. |
|
|
float |
Sim |
Controla o equilíbrio entre relevância e diversidade. Valores maiores favorecem a diversidade. |
|
|
bool |
Não |
Habilita a otimização descrita no artigo do SSD. Padrão: |
|
|
int |
Não |
Tempo de cache dos vetores de embedding em memória, em minutos. Padrão: 360. |
|
|
[]string |
Não |
Nomes das funções que geram embeddings de itens. As funções devem ser registradas previamente. |
|
|
string |
Não |
Indica se deve aplicar normalização L2 aos embeddings. Se já aplicada durante a geração, deixe este campo indefinido. Caso contrário, defina como |
|
|
int |
Não |
Tamanho da janela deslizante. A diversidade é imposta apenas dentro da janela. Padrão: 5. |
|
|
float |
Não |
Reporta erro se a proporção de itens sem embeddings exceder este valor. Padrão: 0,5. |
|
|
[]string |
Não |
Itens que ignoram o processamento SSD, como itens de cold-start. |
|
|
string |
Não |
Garante que a similaridade calculada entre itens seja positiva. Padrão: |
|
|
int |
Não |
Tamanho do conjunto de candidatos para diversificação. O padrão inclui todos os itens que entram na etapa de ordenação. |
|
|
int |
Não |
Ignora a diversificação se o número de itens na etapa de ordenação for inferior a este valor. Padrão: 0. |
|
|
float |
Não |
Um item precisa ter uma pontuação normalizada pelo máximo acima deste limiar para ser elegível para saída. Padrão: 0. |
Ordenação de recall multicanal (MultiRecallMixSort)
Use o MultiRecallMixSort quando houver múltiplos canais de recall e for necessário controlar como seus resultados são intercalados na saída final. Casos de uso comuns incluem:
Garantir exposição mínima para itens de cold-start.
Fixar itens de um canal de recall específico em posições determinadas.
Exemplo de configuração (mistura baseada em nome de recall):
{
"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"]
}
]
}
]
}
Também é possível selecionar itens por condições de propriedade em vez de nomes de recall:
{
"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"
}
]
}
]
}
]
}
Campos do MultiRecallMixSort
|
Campo |
Tipo |
Obrigatório |
Descrição |
|
|
string |
Sim |
Nome personalizado da ordenação. |
|
|
string |
Sim |
Defina como |
|
|
bool |
Não |
Se |
|
|
json array |
Sim |
Uma ou mais regras de mistura. |
|
|
string |
Sim |
|
|
|
[]int |
Não |
Obrigatório quando |
|
|
string |
Não |
Campo de propriedade do item que fornece a posição alvo. Válido apenas com |
|
|
int |
Não |
Quantidade absoluta de itens a serem misturados. |
|
|
float |
Não |
Proporção de itens a serem misturados. Faixa válida: 0–1. Calculado como |
|
|
[]string |
Não |
Nomes dos canais de recall de onde os itens serão obtidos. Vários nomes compartilham a configuração da regra, mas o canal específico utilizado depende da ordem em que os itens entraram na etapa de ordenação. |
|
|
[]FilterParamConfig |
Não |
Mistura itens que correspondem a estas condições. Para detalhes, consulte Exemplos de operadores para correspondência condicional. |
Ativar políticas de ordenação
Após definir as políticas em SortConfs, referencie-as pelo nome em SortNames para ativá-las em cenários específicos. SortNames é um Map[string]object onde cada chave representa o nome de um cenário e o valor é uma lista de nomes de políticas a aplicar.
{
"SortNames": {
"${scene_name}": ["ItemRankScore"]
}
}
Use
defaultcomo nome do cenário para aplicar as mesmas políticas em vários cenários.Os valores da lista devem corresponder ao campo
Namedas entradas respectivas emSortConfs.