Reranking предоставляет алгоритмы для повторного оценки ранжированных элементов для любого распределения атрибутов указанного элемента.
Этот пакет может использоваться в качестве модульного модуля по постобработке систем рекомендаций или поисковых систем.
Вдохновленный бумажным рейтингом справедливости в системах поиска и рекомендаций с применением для поиска талантов LinkedIn.
Принимая «рекомендовать кандидатов на рекрутеры» в качестве примера (это случай службы рекрутера LinkedIn, подчеркнутой в статье), рейтинги поисковой системы переосмысливаются распределением защищенных атрибутов, таких как пол и демографический паритет с учетом справедливого демонстрации кандидатов на рекрутеры.
Например, когда мы рекомендуем продукты пользователям, распределение предпочтений продукта для каждого пользователя (которое можно получить с помощью журнала покупки или журнала View) может использоваться для повторного рейтинга рейтинга элементов с помощью систем рекомендаций, чтобы получить более персонализированную рекомендацию.
$ 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 ) rerank_indices составляет [0, 3, 1, 7, 2, 8, 4, 5, 6, 9] , что является списком индексов элементов после повторного ранга с помощью желаемого распределения. Верхние элементы переосмысленного списка будут иметь такое же распределение, что и желаемое распределение, если есть достаточно желаемых элементов. ( item_attribute имеет тот же заказ с списком элементов, поэтому он содержит информацию о ранга/оценке.)
# 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 } " ) before и after 0.412 и 0.172 соответственно, которые являются нормализованным дисконтированным кумулятивным KL-дивергентом (NDKL) распределения атрибутов рангового элемента и желаемого распределения. (Нижнее лучше.)
Больше примеров можно найти здесь.