Durch das Wiedererlösen stellt Algorithmen die Rangliste der Ranglistenelemente in eine beliebige Element-Attributverteilung erneut an.
Dieses Paket kann als modular nach Verarbeitung von Empfehlungssystemen oder Suchmaschinen verwendet werden.
Inspiriert von Paper Fairness-bewusstes Ranking in Such- und Empfehlungssystemen mit Anwendung auf LinkedIn Talentsuche.
Wenn Sie "Kandidaten für Personalvermittler empfehlen" als Beispiel (dies ist der Fall in LinkedIn Recruiter-Service, die in der Arbeit betont werden), werden die Suchmaschinenrankings durch die Verteilung der geschützten Attribute wie Geschlecht und demografischer Parität in Berücksichtigung der fairen Anzeige der Kandidaten erneut aufgenommen.
Wenn wir beispielsweise Produkte den Benutzern empfehlen, kann die Produktpräferenzverteilung für jeden Benutzer (der durch das Kaufprotokoll oder das Ansichtsprotokoll erhalten werden kann) verwendet werden, um die Element-Ranglisten nach Empfehlungssystemen neu zu beziehen, um eine personalisiertere Empfehlung zu erhalten.
$ 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 ) Die rerank_indices ist [0, 3, 1, 7, 2, 8, 4, 5, 6, 9] die Liste der Elementindizes, nachdem sie durch die gewünschte Verteilung erneut angespannt ist. Die Top-Elemente der neu bewerteten Liste haben die gleiche Verteilung wie die gewünschte Verteilung, wenn genügend gewünschte Elemente vorhanden sind. ( item_attribute hat die gleiche Bestellung mit der Elementliste, sodass sie Rang-/Score -Informationen enthält.)
# 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 } " ) Die before und after sind 0.412 bzw. 0.172 , nämlich die normalisierte, reduzierte kumulative KL-Divergenz (NDKL) der Ranglisten-Element-Attributverteilung und die gewünschte Verteilung. (Niedriger ist besser.)
Weitere Beispiele finden Sie hier.