O reranking fornece algoritmos para reaparecer os itens classificados para qualquer distribuição de atributo de item especificado.
Este pacote pode ser usado como um modular pós-processamento de sistemas de recomendação ou mecanismos de pesquisa.
Inspirado no ranking de consciência da justiça em papel em sistemas de pesquisa e recomendação com aplicação na pesquisa de talentos do LinkedIn.
Tomando "Recomendar candidatos aos recrutadores" como o exemplo (este é o caso do serviço de recrutador do LinkedIn estressado no artigo), os rankings de mecanismos de pesquisa são reformulados pela distribuição dos atributos protegidos, como paridade demográfica e paridade demográfica, em consideração da exibição justa dos candidatos aos recrutadores.
Por exemplo, quando recomendamos produtos aos usuários, a distribuição de preferências do produto para cada usuário (que pode ser obtida pelo log de compra ou log de visualização) pode ser usada para re-classificar os rankings de itens por sistemas de recomendação para obter uma recomendação mais personalizada.
$ pip install reranking import reranking
item_attribute = [ "a1" , "a1" , "a1" , "a2" , "a1" , "a1" , "a1" , "a2" , "a2" , "a1" ]
desired_distribution = { "a1" : 0.5 , "a2" : 0.5 }
rerank_indices = reranking . rerank (
item_attribute , # attributes of the ranked items
desired_distribution , # desired item distribution
max_na = None , # controls the max number of attribute categories applied
k_max = None , # length of output, if None, k_max is the length of `item_attribute`
algorithm = "det_greedy" , # "det_greedy", "det_cons", "det_relaxed", "det_const_sort"
verbose = False , # if True, the output is with detailed information
)
print ( rerank_indices ) Os rerank_indices são [0, 3, 1, 7, 2, 8, 4, 5, 6, 9] que é a lista de índices de itens após a renúncia pela distribuição desejada. Os principais itens da lista novamente classificada terão a mesma distribuição que a distribuição desejada, se houver itens desejados o suficiente. ( item_attribute tem o mesmo pedido da lista de itens para que ele contém informações de classificação/pontuação.)
# Evaluate the before&after of the re-ranking result above
item_attribute_reranked = [ item_attribute [ i ] for i in rerank_indices ]
before = reranking . ndkl ( item_attribute , desired_distribution )
after = reranking . ndkl ( item_attribute_reranked , desired_distribution )
print ( f" { before :.3f } , { after :.3f } " ) O before e after são 0.412 e 0.172 respectivamente, que são a dinergência cumulativa de KL (NDKL) com desconto normalizado da distribuição de atributos classificados e a distribuição desejada. (Mais baixo é melhor.)
Mais exemplos podem ser encontrados aqui.