Todos os produtos
Search
Central de documentação

:Configure re-ranking

Última atualização: Jun 28, 2026

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:

  1. 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.

  2. Ative políticas por cenário em SortNames. Referencie os nomes definidos em SortConfs para 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

Name

string

Sim

Nome personalizado da política. Referencie este nome em SortNames.

SortType

string

Sim

Tipo de ordenação. Valores válidos: ItemRankScore, BoostScoreSort, DiversityRuleSort, DPPSort, MultiRecallMixSort.

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

Name

string

Sim

Nome personalizado da ordenação.

SortType

string

Sim

Defina como BoostScoreSort.

Debug

bool

Não

Se true, a pontuação original antes do ajuste fica armazenada como org_score nas properties do item. Ative o flag de debug na requisição para inspecionar esse valor. Não ative em produção.

BoostScoreConditions

json array

Sim

Uma ou mais regras condicionais de aumento ou redução de pontuação.

BoostScoreConditions[].Conditions

[]FilterParamConfig

Sim

Condições obrigatórias para aplicar a expressão.

BoostScoreConditions[].Expression

string

Sim

Expressão de ajuste da pontuação. score refere-se à pontuação atual do item. É possível referenciar propriedades do item, como em score * item_weight.

Campos do FilterParamConfig

Campo

Tipo

Obrigatório

Descrição

Name

string

Sim

Nome da feature no item ou usuário.

Domain

string

Sim

item ou user. Especifica se Name é uma feature do item ou do usuário. O nome deve existir nas properties do item ou do usuário.

Operator

string

Sim

Operador de comparação. Valores válidos: equal, not_equal, in, not_in, greater, greaterThan, less, lessThan, contains, not_contains.

Type

string

Sim

Tipo de dados da feature.

Value

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

AdapterType

string

Sim

Tipo da source de dados. Apenas hologres tem suporte.

HologresName

string

Sim

Nome personalizado da instância do Hologres conforme configurado em HologresConfs.

HologresTableName

string

Sim

Nome da tabela de pesos dos itens no Hologres.

ItemFieldName

string

Sim

Campo de chave primária da tabela de pesos dos itens.

WeightFieldName

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.

O DiversityRuleSort exige o uso do parâmetro ExcludeRecalls.

Conceitos principais

  • Dimensão de diversificação: propriedade do item usada para diversificação, como category, author ou tag.

  • IntervalSize (k): número máximo de itens consecutivos com o mesmo valor de dimensão. Por exemplo, IntervalSize: 2 significa 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: 2 indica 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

Name

string

Sim

Nome personalizado da ordenação.

SortType

string

Sim

Defina como DiversityRuleSort.

DiversitySize

int

Não

Quantidade de itens aos quais as regras de diversidade serão aplicadas. O padrão é o size da requisição.

Conditions

[]FilterParamConfig

Não

Aplica as regras de diversidade apenas quando as propriedades do usuário corresponderem a essas condições. Defina Domain como user. Para detalhes, consulte Exemplos de operadores para correspondência condicional.

ExcludeRecalls

[]string

Não

IDs dos canais de recall a excluir da ordenação por diversidade.

DiversityRules

json array

Sim

Uma ou mais regras de diversidade.

DiversityRules[].Dimensions

[]string

Sim

Propriedades do item usadas para diversificação.

DiversityRules[].IntervalSize

int

Sim

Máximo de itens consecutivos com o mesmo valor de dimensão (k).

DiversityRules[].WindowSize

int

Não

Tamanho da janela deslizante (n).

DiversityRules[].FrequencySize

int

Não

Ocorrências máximas do mesmo valor de dimensão dentro da janela (m).

DiversityRules[].Weight

int

Não

Peso desta regra de diversidade. Usado quando nenhum item satisfaz todas as regras — veja a lógica de seleção abaixo.

ExclusionRules

json array

Não

Exclui itens correspondentes às condições de posições específicas de saída.

ExclusionRules[].Positions

[]int

Sim

Posições de saída a excluir (começando em 1).

ExclusionRules[].Conditions

[]FilterParamConfig

Sim

Condições para exclusão de itens. Para detalhes, consulte Exemplos de operadores para correspondência condicional.

ExploreItemSize

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

Name

string

Sim

Nome personalizado da ordenação.

DaoConf

DaoConfig

Sim

Informações de conexão do Hologres.

TableName

string

Não

Tabela de vetores de embedding no Hologres. Obrigatório se EmbeddingHookNames não estiver definido.

TableSuffixParam

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 TableName. Use isso para alternar tabelas de embedding diariamente. Nesse caso, a tabela do Hologres geralmente precisa ser particionada.

TablePKey

string

Não

Chave primária da tabela de vetores de embedding.

EmbeddingColumn

string

Não

Campo vetorial na tabela de embedding.

EmbeddingSeparator

string

Não

Separador para valores de embedding. Padrão: vírgula.

Alpha

float

Sim

Controla o equilíbrio entre relevância e diversidade. Valores maiores favorecem a relevância.

CacheTimeInMinutes

int

Não

Tempo de cache dos vetores de embedding em memória, em minutos. Padrão: 360.

EmbeddingHookNames

[]string

Não

Nomes das funções que geram embeddings de itens. As funções devem ser registradas previamente.

NormalizeEmb

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 true.

WindowSize

int

Não

Tamanho da janela deslizante. A diversidade é imposta apenas dentro da janela. Padrão: 10.

EmbMissedThreshold

float

Não

Reporta erro se a proporção de itens sem embeddings exceder este valor. Padrão: 0,5.

FilterRetrieveIds

[]string

Não

Itens que ignoram o processamento DPP, como itens de cold-start.

EnsurePositiveSim

string

Não

Garante que a similaridade calculada entre itens seja positiva. Padrão: true.

CandidateCount

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.

AbortRunCount

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.

MinScorePercent

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

Name

string

Sim

Nome personalizado da ordenação.

DaoConf

DaoConfig

Sim

Informações de conexão do Hologres.

TableName

string

Não

Tabela de vetores de embedding no Hologres. Obrigatório se EmbeddingHookNames não estiver definido.

TableSuffixParam

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 TableName. Use isso para alternar tabelas de embedding diariamente.

TablePKey

string

Não

Chave primária da tabela de vetores de embedding.

EmbeddingColumn

string

Não

Campo vetorial na tabela de embedding.

EmbeddingSeparator

string

Não

Separador para valores de embedding. Padrão: vírgula.

Gamma

float

Sim

Controla o equilíbrio entre relevância e diversidade. Valores maiores favorecem a diversidade.

UseSSDStar

bool

Não

Habilita a otimização descrita no artigo do SSD. Padrão: false. Recomenda-se habilitar essa opção.

CacheTimeInMinutes

int

Não

Tempo de cache dos vetores de embedding em memória, em minutos. Padrão: 360.

EmbeddingHookNames

[]string

Não

Nomes das funções que geram embeddings de itens. As funções devem ser registradas previamente.

NormalizeEmb

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 true.

WindowSize

int

Não

Tamanho da janela deslizante. A diversidade é imposta apenas dentro da janela. Padrão: 5.

EmbMissedThreshold

float

Não

Reporta erro se a proporção de itens sem embeddings exceder este valor. Padrão: 0,5.

FilterRetrieveIds

[]string

Não

Itens que ignoram o processamento SSD, como itens de cold-start.

EnsurePositiveSim

string

Não

Garante que a similaridade calculada entre itens seja positiva. Padrão: true.

CandidateCount

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.

AbortRunCount

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.

MinScorePercent

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

Name

string

Sim

Nome personalizado da ordenação.

SortType

string

Sim

Defina como MultiRecallMixSort.

RemainItem

bool

Não

Se false, apenas os resultados misturados são retornados. Se true, itens não selecionados pelas regras de mistura são anexados após os resultados misturados, permitindo que etapas subsequentes de ordenação os processem.

MixSortRules

json array

Sim

Uma ou mais regras de mistura.

MixSortRules[].MixStrategy

string

Sim

random_position: itens inseridos em posições aleatórias. fix_position: itens inseridos nas posições especificadas por Positions.

MixSortRules[].Positions

[]int

Não

Obrigatório quando MixStrategy é fix_position. As posições começam em 1. Mutuamente exclusivo com PositionField.

MixSortRules[].PositionField

string

Não

Campo de propriedade do item que fornece a posição alvo. Válido apenas com fix_position. Mutuamente exclusivo com Positions.

MixSortRules[].Number

int

Não

Quantidade absoluta de itens a serem misturados.

MixSortRules[].NumberRate

float

Não

Proporção de itens a serem misturados. Faixa válida: 0–1. Calculado como request_size × NumberRate. Válido apenas com random_position.

MixSortRules[].RecallNames

[]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.

MixSortRules[].Conditions

[]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 default como nome do cenário para aplicar as mesmas políticas em vários cenários.

  • Os valores da lista devem corresponder ao campo Name das entradas respectivas em SortConfs.