использование idf со знаменателем + 1, когда во всех документах есть определенное слово - PullRequest
0 голосов
/ 17 ноября 2018

Согласно некоторым ссылкам, я вижу, что большую часть времени 1 добавляется к знаменателю уравнения idf, чтобы избежать записи журнала, он становится бесконечным, если слово не существует ни в одном документе.

Но что еслислово существует во всех документах?Тогда idf будет отрицательным.Как нам справиться с этой ситуацией?

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

Из sklearn TfidfTransformer;

# perform idf smoothing if required
df += int(self.smooth_idf)
n_samples += int(self.smooth_idf)
# log+1 instead of log makes sure terms with zero idf don't get
# suppressed entirely.
idf = np.log(n_samples / df) + 1

df и n_samples увеличиваются на единицу, если smooth_idf равно True.

Итак, мы добавляем один ки делитель и знаменатель, или мы не меняем ни одного из них
Поскольку мы также увеличиваем делитель, мы никогда не получим отрицательные значения.

В этом примере мы добавляем +1в журнал.Поскольку после этого шага idf преобразуется в разреженную матрицу, а в разреженной матрице пропускаются нули.Итак, мы хотим иметь значение, отличное от 0 для каждого термина.

Подробнее о smooth_idf из документации;

smooth_idf : boolean, default=True
Smooth idf weights by adding one to document frequencies, as if an
extra document was seen containing every term in the collection
exactly once. Prevents zero divisions.
0 голосов
/ 17 ноября 2018

Если в каждом документе из корпуса есть слово, то его значение «знания» очень плохое - потому что это слово не отличает один документ от корпуса.

...