Ответ
Плюсы:
- Простота и скорость: Алгоритм легко реализовать и вычислительно он недорогой.
- Эффективность для поиска: Отлично работает для задач информационного поиска и классификации текстов, так как выделяет слова, характерные для конкретного документа.
- Работа с разреженностью: Векторное представление получается разреженным, что эффективно по памяти.
- Интерпретируемость: Веса 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())