Калькулятор TF-IDF
Вставьте несколько документов — по одному в строке или через пустую строку — и посмотрите, какие слова важнее всего в каждом. TF-IDF даёт высокий вес словам, которые часто встречаются в документе, но редко в остальных, и почти ноль словам, которые есть везде.
Работает в браузере: всё, что вы вводите, никуда не отправляется.
Как пользоваться
- Вставьте документы: по одному в строке или переключитесь на абзацы, если документ занимает несколько строк.
- Выберите варианты TF и IDF. По умолчанию — классические: повторы ÷ слова и ln(N ÷ df).
- Смотрите таблицу каждого документа: слова отсортированы по TF-IDF, рядом — повторы, TF и IDF.
Как это работает
Для каждого слова w в документе d:
- TF = число повторов w в d (или его вариант);
- df = число документов, где есть w; N = число документов;
- IDF = ln(N ÷ df);
- TF-IDF = TF × IDF.
Слова с одинаковым весом идут в том порядке, в каком впервые встретились в документе.
Пример
Три документа: «кот сидел дома», «пёс сидел дома», «кот спал дома». N = 3, в каждом документе 3 слова, поэтому у каждого слова, встреченного один раз, TF = 1 ÷ 3 = 0,3333.
Для документа 2:
- «пёс» есть в 1 документе: IDF = ln(3 ÷ 1) = 1,0986, TF-IDF = 0,3333 × 1,0986 = 0,3662;
- «сидел» есть в 2 документах: IDF = ln(3 ÷ 2) = 0,4055, TF-IDF = 0,1352;
- «дома» есть во всех 3: IDF = ln 1 = 0, TF-IDF = 0.
Значит, лучше всего документ 2 описывает слово «пёс».
Советы
- Для осмысленного IDF берите больше документов: при двух документах у каждого слова IDF будет либо ln 2, либо 0.
- Сначала уберите шаблонный текст (подписи, шапки), иначе он заберёт весь вес.
- Чтобы посчитать слова в одном тексте, используйте частотный анализ слов.
Частые вопросы
Что такое TF-IDF?
Вес слова в документе: частота слова (TF — как часто оно встречается в этом документе), умноженная на обратную документную частоту (IDF — насколько оно редкое среди всех документов). Выше всего оцениваются слова, частые в одном документе и редкие в других.
Какие формулы используются?
TF — число повторов, число повторов, делённое на число слов в документе (по умолчанию), или 1 + ln(повторы). IDF — ln(N ÷ df), где N — число документов, а df — число документов со словом, или сглаженный вариант ln((1 + N) ÷ (1 + df)) + 1, который scikit-learn использует по умолчанию. Логарифм натуральный.
Почему у слов вроде «и» ноль?
При IDF = ln(N ÷ df) у слова, которое есть в каждом документе, df = N, а ln 1 = 0, поэтому его TF-IDF равен 0 при любом числе повторов. Со сглаженным IDF оно получает небольшой положительный вес.
Как текст делится на слова?
Слово — подряд идущие буквы и цифры; апостроф внутри слова сохраняется, остальная пунктуация разделяет слова, всё переводится в нижний регистр. Стемминга и стоп-слов нет, поэтому «кошка» и «кошки» — разные слова.
Почему мои числа не совпадают со scikit-learn?
TfidfVectorizer берёт число повторов со сглаженным IDF, а потом нормирует вектор каждого документа к длине 1 (L2). Выберите «Число повторов» и сглаженный IDF — получите его числа до нормировки.