Краткое представление о том, что такое TF-IDF:

Термин «частотно-обратная частота документа» говорит нам о релевантности слова в документе для набора документов.

Частота термина: сколько раз слово появляется в документе.

Инверсия частоты документа. Частота терминов придает одинаковое значение всем словам. Однако многие слова, такие как «есть», «и», «из», часто встречаются в предложениях, но не имеют значения. Следовательно, нам нужно уменьшить количество частых терминов, чтобы придать большее значение более редким терминам. IDF сообщает нам значение срока сбора документов.

Где используется TF-IDF?

Поисковые системы часто используют варианты схемы взвешивания tf-idf в качестве основного инструмента для оценки и ранжирования важности документа в ответ на вопрос пользователя.

Для простоты я решил рассчитать значения TF-IDF для трех предложений из моего любимого отрывка.

a=”А когда буря уляжется, ты не вспомнишь, как ты ее сделал, как тебе удалось выжить.”
b=”Ты даже не будешь уверен, что буря действительно закончилась . Но одно можно сказать наверняка.
c=«Когда вы выйдете из бури, вы уже не будете тем человеком, который вошёл».

Шаг 1. Удалите знаки препинания и символы верхнего регистра, определив функцию

Нам нужно убедиться, что все символы одинаковы, так как Python читает «Буря» и «Буря» как разные слова. Точно так же для пунктуации он читается как «это» и «это» по-разному. Неравномерность даст нам неправильный счет.

ВВОД:

preprocessor("И как только буря уляжется, вы не вспомните, как вы ее сделали, как вам удалось выжить.")

ВЫВОД:

Шаг 2. Разметьте каждое предложение

Токенизация документов/предложений означает разделение предложений на их слова. В результате получается «мешок слов», состоящий из всех слов предложения.

Шаг 3. Объедините все слова в союз с помощью set()

Теперь у нас есть 3 разных «мешка слов» для каждого предложения. TF-IDF дает общее количество слов во всех предложениях. Мы используем функцию set(), чтобы получить все УНИКАЛЬНЫЕ слова из лука_а, лука_b и лука_с.

лук_аб = набор (лук_а). союз (набор (лук_б))

Total_Set= set(bow_ab).union(set(bow_c))
Total_Set

Total_Set = набор (bow_ab). союз (набор (bow_c))

для слова в bow_a:
wordDictA[word]+=1

Шаг 5. Функция для расчета TF

Затем нам нужно определить функцию для вычисления частоты терминов каждого предложения в коллекции. Функция принимает словарь и токенизированные слова в качестве входных данных и вычисляет значение TF, используя следующую функцию:

Шаг 6. Функция для расчета IDF с использованием математического пакета

После импорта математической функции мы определяем функцию для вычисления IDF, которая принимает все словари в качестве входных данных.

idfs = idf([wordDictA, wordDictB,wordDictC])

Шаг 7. Функция для расчета TF*IDF

Наконец, мы пишем функцию для получения окончательного значения, то есть значения tf-idf для всех трех исходных предложений.

Мы запускаем простой цикл for, чтобы подсчитать количество слов для каждого «мешка слов».

На этом завершается часть кодирования расчетных значений. Давайте углубимся в то, что означают значения.

Интерпретация:

Термин встречается реже, если его показатель TF*IDF (вес) выше, и наоборот. Однако, если tf-idf ноль, это говорит нам о том, что слово не очень информативно, поскольку оно появляется во всех документах. (Предложения, в нашем случае)

Вы можете найти весь код здесь.

Ссылки:

[1] https://monkeylearn.com/blog/what-is-tf-idf/

[2] https://medium.com/@imamun/creating-a-tf-idf-in-python-e43f05e4d424