Какую формулу tf-idf использует модель LSA gensim?
Существует много разных способов вычисления tf и idf. Я хочу знать, какую формулу использует gensim в своей модели LSA. Я прошёл его исходный код lsimodel.py
, но для меня не очевидно, где создается матрица термина документа (возможно, из-за оптимизации памяти).
В одном документе LSA я прочитал, что каждая ячейка матрицы термина документа - это лог-частота этого слова в этом документе, деленная на энтропию этого слова:
tf(w, d) = log(1 + frequency(w, d))
idf(w, D) = 1 / (-Σ_D p(w) log p(w))
Тем не менее, это, кажется, очень необычная формулировка tf-idf. Более знакомая форма tf-idf:
tf(w, d) = frequency(w, d)
idf(w, D) = log(|D| / |{d ∈ D: w ∈ d}|)
Я также заметил, что есть вопрос о том, как TfIdfModel
сам реализован в генсим. Однако я не видел lsimodel.py
импорта TfIdfModel
и, следовательно, можно только предполагать, что lsimodel.py
имеет собственную реализацию tf-idf.
1 ответ
Насколько я понимаю, lsimodel.py
не преобразует шаг кодирования tf-idf. Вы можете найти некоторые подробности в документации API gensim - есть специальная модель tf-idf, которую можно использовать для кодирования текста, который впоследствии можно будет подавать в модель LSA. От tfidfmodel.py
Исходя из исходного кода, похоже, что последнее из двух определений tf-idf, которые вы перечислили, соблюдается.