Какие плюсы и минусы у TF-IDF?

«Какие плюсы и минусы у TF-IDF?» — вопрос из категории NLP и трансформеры, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Плюсы:

  • Простота и скорость: Алгоритм легко реализовать и вычислительно он недорогой.
  • Эффективность для поиска: Отлично работает для задач информационного поиска и классификации текстов, так как выделяет слова, характерные для конкретного документа.
  • Работа с разреженностью: Векторное представление получается разреженным, что эффективно по памяти.
  • Интерпретируемость: Веса TF-IDF имеют понятную логику — частота слова в документе, скорректированная на его распространенность в коллекции.

Минусы:

  • Отсутствие семантики: Не учитывает смысловую близость слов (синонимы, полисемию) и порядок слов (потеря контекста n-грамм).
  • Проблемы с редкими словами: Очень редкие слова могут получить высокий IDF и зашумлять модель.
  • Зависимость от корпуса: Веса пересчитываются при изменении коллекции документов.
  • Требует предобработки: Для качественной работы необходимы стемминг/лемматизация и удаление стоп-слов.

Пример использования с scikit-learn:

from sklearn.feature_extraction.text import TfidfVectorizer

corpus = [
    "Машинное обучение изучает алгоритмы.",
    "Глубокое обучение — это подраздел машинного обучения."
]
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(corpus)
print(vectorizer.get_feature_names_out())
print(X.toarray())