TF-IDF: Как компьютеры понимают важность слов в тексте
Представьте, что вы ищете информацию о кошках в большой библиотеке. Как вы поймете, какая книга действительно о кошках, а в какой кошки упоминаются лишь мельком? Именно для этого компьютеры используют метод под названием TF-IDF.Что такое TF-IDF? TF-IDF расшифровывается как "Term Frequency - Inverse Document Frequency". Не пугайтесь этих сложных слов! Давайте разберем их по частям:
- TF (Term Frequency) - Частота слова Представьте, что вы считаете, сколько раз слово "кошка" встречается в книге. Это и есть TF. Чем чаще слово встречается, тем оно важнее для этой книги.
Пример: В книге "Приключения Мурзика" слово "кошка" встречается 50 раз, а в книге "Собаки и их хозяева" - всего 2 раза. Значит, для первой книги "кошка" важнее.
- IDF (Inverse Document Frequency) - Обратная частота документа А теперь представьте, что вы проверяете, в скольких книгах библиотеки встречается слово "кошка". Если оно есть во всех книгах, то оно не очень-то помогает найти книгу именно о кошках. А вот если слово "Мурзик" есть только в одной книге, то оно очень важное для поиска.
Пример: Слово "и" есть во всех 1000 книгах библиотеки. Слово "кошка" есть в 100 книгах. Слово "Мурзик" есть только в 1 книге.IDF показывает, что "Мурзик" важнее "кошки", а "кошка" важнее "и".
Как работает TF-IDF?
TF-IDF объединяет эти два подхода. Он умножает частоту слова в книге (TF) на его редкость во всей библиотеке (IDF). Давайте посмотрим на пример:
У нас есть три коротких "книги":
- "Кошка любит молоко"
- "Собака любит кости"
- "Кошка и собака - друзья"
Посчитаем TF-IDF для слова "кошка":
- TF: В книге 1: 1/3 (одно слово из трех) В книге 2: 0 В книге 3: 1/5IDF: "Кошка" встречается в 2 книгах из 3.
- IDF = log(3/2) ≈ 0.18
- TF-IDF: Для книги 1: 1/3 * 0.18 ≈ 0.06
- Для книги 2: 0
- Для книги 3: 1/5 * 0.18 ≈ 0.036
В первой книге "кошка" имеет самый высокий показатель TF-IDF. Это значит, что для этой книги слово "кошка" самое важное!Зачем это нужно?
- Поиск информации: помогает находить самые подходящие тексты по запросу.
- Анализ текстов: определяет главные темы в тексте.
- Рекомендации: предлагает похожие тексты на основе важных слов.
Давайте рассмотрим пример использования TF-IDF на Python. Этот пример будет простым, но наглядным, чтобы показать, как работает TF-IDF на практике.
Пример использования TF-IDF на Python
Для начала, нам нужно будет установить библиотеку scikit-learn, которая содержит готовую реализацию TF-IDF. Вы можете установить ее с помощью pip:
pip install scikit-learn
Теперь давайте напишем код:
from sklearn.feature_extraction.text import TfidfVectorizer
# Наши документы
documents = [
"Кошка любит молоко",
"Собака любит кости",
"Кошка и собака - друзья"
]
# Создаем векторизатор TF-IDF
vectorizer = TfidfVectorizer()
# Применяем векторизатор к нашим документам
tfidf_matrix = vectorizer.fit_transform(documents)
# Получаем список всех слов
feature_names = vectorizer.get_feature_names_out()
# Выводим результаты
for i, doc in enumerate(documents):
print(f"Документ {i+1}: {doc}")
for j, feature_name in enumerate(feature_names):
tfidf_value = tfidf_matrix[i, j]
if tfidf_value > 0:
print(f" {feature_name}: {tfidf_value:.4f}")
print()
Давайте разберем, что делает этот код:
- Мы импортируем
TfidfVectorizer
из scikit-learn. Это инструмент, который автоматически вычисляет TF-IDF для нас. - Мы создаем список документов, которые хотим проанализировать.
- Создаем экземпляр
TfidfVectorizer
. - Применяем векторизатор к нашим документам с помощью
fit_transform()
. Это создает матрицу TF-IDF значений. - Получаем список всех уникальных слов в наших документах.
- В цикле выводим TF-IDF значения для каждого слова в каждом документе.
Когда вы запустите этот код, вы увидите примерно такой результат:
Документ 1: Кошка любит молоко
кошка: 0.5802
любит: 0.5802
молоко: 0.5802
Документ 2: Собака любит кости
кости: 0.6187
любит: 0.4438
собака: 0.6187
Документ 3: Кошка и собака - друзья
друзья: 0.4438
и: 0.4438
кошка: 0.4438
собака: 0.4438
Что мы видим в результатах?
- В первом документе все слова имеют одинаковый вес, потому что каждое слово встречается только один раз и только в этом документе.
- Во втором документе "кости" и "собака" имеют больший вес, чем "любит", потому что "любит" встречается и в других документах.
- В третьем документе все слова имеют одинаковый вес, но он меньше, чем в первых двух документах, потому что этот документ длиннее.
Этот пример показывает, как TF-IDF помогает выделить наиболее важные слова в каждом документе. Слова, которые часто встречаются в одном документе, но редко в других, получают более высокий вес.
TF-IDF - это умный способ, который помогает компьютерам понять, какие слова действительно важны в тексте. Это как если бы вы, читая книгу, подчеркивали самые главные слова, только компьютер делает это автоматически!Надеюсь, теперь вы лучше понимаете, как работает TF-IDF. Это действительно крутой инструмент, который помогает компьютерам лучше понимать тексты и находить нужную информацию!