Что означают компоненты TF и IDF
Что проверяют
Понимаете ли вы, зачем в формуле два множителя и что именно делает логарифм. Дальше обычно спрашивают, где TF-IDF до сих пор уместнее эмбеддингов и как он ведёт себя на коротких текстах.
Как отвечать
TF это частота термина внутри документа: сколько раз слово встретилось, обычно с нормировкой на длину документа или со сглаживанием логарифмом. IDF это обратная документная частота: логарифм отношения числа документов коллекции к числу документов, содержащих термин. Произведение даёт вес признака: слово значимо, если оно частое в этом документе и редкое в коллекции.
Логарифм нужен, чтобы сжать шкалу. Без него вес редкого слова рос бы линейно с размером коллекции, и одно случайное редкое слово перевешивало бы весь документ. Заодно частые служебные слова гасятся сами, так что отдельный стоп-лист требуется не всегда.
Что стоит добавить:
- сглаживание: в наивной записи знаменатель обращается в ноль на невиданном термине, поэтому на практике считают
log((1 + N) / (1 + df)) + 1и похожие варианты; - IDF оценивается по обучающей коллекции и применяется к новым документам как есть;
- итоговый вектор нормируют по норме L2, иначе длинные документы доминируют при сравнении косинусом;
- это разреженное представление, и для линейных моделей оно до сих пор сильный бейзлайн.
Где спотыкаются
Называют IDF долей документов или путают, что под логарифмом. Основание для ранжирования не важно, оно меняет все веса на общий множитель, но названное наугад значение сразу выдаёт, что кандидат формулу не считал.
Забывают, что это мешок слов. Порядок теряется, синонимы становятся разными признаками, опечатка становится новым признаком, а на коротких текстах вроде заголовков вектор почти вырожденный. Отсюда символьные n-граммы, лемматизация и переход к плотным представлениям.
Обучают векторизатор на всей выборке сразу и радуются метрике. Словарь и значения IDF подсмотрели тестовую часть, то есть в оценку попала утечка. Обучать надо на тренировочной части, а к тестовой применять готовое преобразование, и делать это внутри кросс-валидации.