Какую формулу 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, которые вы перечислили, соблюдается.

Другие вопросы по тегам