Как получить точность, отзыв, Точность и т.д. В задаче дедупликации документа, когда результирующие метки имеют переменную длину?

#python #machine-learning #nlp #statistics #data-science

Вопрос:

Поэтому я работаю над проблемой дублирования, используя LSH: Хэширование, чувствительное к местоположению.

Итак, я знаю дубликаты документов. Давайте предположим, что у нас есть что-то вроде:

 {'group1': [text1,text2,text3],
'group2': [text4],
'group3': [text5,text6],}
 

Таким образом , я могу легко получить дубликаты, как text1 дубликат text2 , text3 и наоборот.
Используя пакет Snapy python LSH, он дает мне результаты примерно такие:

 {'text1': ['text1','text5'],
'text2': []
'text4: ['text6']}
 

так что, как вы можете видеть, есть Ложные срабатывания (в text1 ), а также Ложные отрицательные (в text2 ) тоже.
Как я могу определить здесь новую метрику, где, если я хочу оценить работу этого алгоритма на основе настройки гиперпараметров, я могу увеличить или уменьшить число?

Я не могу использовать напрямую Top-K , так как есть экземпляры только с 1 дубликатом, а у некоторых их больше N . Кроме того, в результатах тоже есть пустые FP , FN тоже. Я даже не могу использовать sklearn.metrics.accuracy или около того, потому что у нас более 1 дубликата каждого экземпляра.

Мы будем признательны за любую помощь в поиске показателя для этого.

Обновление: Я придумал нижеприведенную функцию. Не мог бы кто-нибудь, пожалуйста, дать мне совет, если это правильный показатель, и если да, то как я могу объединить эти 3 числа, чтобы получить одно число?

 def metric(actual:[set],predicted:[set]):
    len_true = len(actual)
    len_pred = len(predicted)
    
    TP = len(actual.intersection(predicted)) # common in both are True Positive
    FP = len(predicted.difference(a.intersection(b))) # Extra in predicted are False Positive
    Missing = len(actual.difference(a.intersection(b))) # Extra in actual are Missing
    
    TP = TP/len_pred if len_pred > 0 else 0 # increase this value.  between 0 and 1
    FP = FP/len_pred if len_pred > 0 else 0 # Decrease this value. IS between 0 and 1
    Missing = Missing/len_true # value is between 0-1 . Decrease this value
    
    return TP, FP, Missing