Пример использования TF-IDF с Python и sklearn

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Введение в TF-IDF

TF-IDF (Term Frequency-Inverse Document Frequency) — это одна из наиболее популярных и эффективных статистических мер, используемых для оценки важности слова в документе относительно коллекции документов (корпуса). Она широко применяется в текстовой аналитике и информационном поиске для преобразования текстов в числовые векторы, которые могут быть использованы для различных задач машинного обучения, таких как классификация текстов, кластеризация и поиск информации.

TF (Term Frequency) измеряет, как часто слово встречается в документе. Это значение позволяет понять, насколько часто определенный термин используется в конкретном тексте. IDF (Inverse Document Frequency) оценивает, насколько слово уникально для данного документа по сравнению с другими документами в корпусе. Произведение этих двух величин дает значение TF-IDF, которое позволяет выделить важные слова, игнорируя часто встречающиеся, но менее значимые термины. Таким образом, TF-IDF помогает улучшить качество анализа текстов, выделяя наиболее информативные слова.

Кинга Идем в IT: пошаговый план для смены профессии

Установка необходимых библиотек

Для работы с TF-IDF в Python нам понадобятся следующие библиотеки:

  • scikit-learn для вычисления TF-IDF и выполнения других задач машинного обучения
  • pandas для работы с данными, такими как создание и манипуляция DataFrame
  • nltk для предварительной обработки текста, включая токенизацию и удаление стоп-слов

Установим их с помощью pip:

Bash
Скопировать код
pip install scikit-learn pandas nltk

Эти библиотеки предоставляют мощные инструменты для работы с текстовыми данными и их преобразования в числовые векторы. scikit-learn включает в себя множество алгоритмов машинного обучения, а pandas и nltk облегчают обработку и анализ текстов.

Загрузка и подготовка данных

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

Python
Скопировать код
import pandas as pd

data = {
    'document': [
        'Этот документ первый.',
        'Этот документ второй.',
        'И это третий документ.',
        'Документ четвертый отличается.'
    ]
}

df = pd.DataFrame(data)
print(df)

Перед применением TF-IDF необходимо провести предварительную обработку текста: токенизация, удаление стоп-слов и приведение слов к нижнему регистру. Для этого используем библиотеку nltk. Токенизация разбивает текст на отдельные слова, удаление стоп-слов исключает часто встречающиеся, но неинформативные слова, а приведение к нижнему регистру помогает унифицировать текст.

Python
Скопировать код
import nltk
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize

nltk.download('punkt')
nltk.download('stopwords')

stop_words = set(stopwords.words('russian'))

def preprocess(text):
    tokens = word_tokenize(text.lower())
    filtered_tokens = [word for word in tokens if word.isalnum() and word not in stop_words]
    return ' '.join(filtered_tokens)

df['processed'] = df['document'].apply(preprocess)
print(df)

Этот этап обработки текста важен для получения качественных результатов при применении TF-IDF. Он помогает удалить ненужные элементы и привести текст к более удобному для анализа виду.

Применение TF-IDF с использованием sklearn

Теперь, когда наши данные подготовлены, мы можем применить TF-IDF с помощью библиотеки scikit-learn. Для этого используем класс TfidfVectorizer, который позволяет легко преобразовать текстовые данные в числовые векторы.

Python
Скопировать код
from sklearn.feature_extraction.text import TfidfVectorizer

vectorizer = TfidfVectorizer()
tfidf_matrix = vectorizer.fit_transform(df['processed'])

print(tfidf_matrix.toarray())
print(vectorizer.get_feature_names_out())

TfidfVectorizer автоматически выполняет все необходимые шаги для вычисления TF-IDF, включая токенизацию и вычисление значений TF и IDF. Результатом является матрица, где каждая строка представляет документ, а каждый столбец — уникальное слово из корпуса. Значения в матрице представляют собой значения TF-IDF для каждого слова в каждом документе.

Пример анализа и интерпретации результатов

Рассмотрим полученные результаты. Матрица TF-IDF содержит значения TF-IDF для каждого слова в каждом документе. Выведем эти значения в удобочитаемом формате, чтобы легче было анализировать данные.

Python
Скопировать код
tfidf_df = pd.DataFrame(tfidf_matrix.toarray(), columns=vectorizer.get_feature_names_out())
print(tfidf_df)

Теперь мы можем проанализировать, какие слова имеют наибольшие значения TF-IDF в каждом документе. Это поможет нам понять, какие термины наиболее важны для каждого документа. Например, в новостных статьях это могут быть ключевые слова, отражающие основную тему статьи.

Python
Скопировать код
for index, row in tfidf_df.iterrows():
    print(f"Документ {index + 1}:")
    print(row.sort_values(ascending=False).head(3))

Этот простой пример показывает, как использовать TF-IDF для преобразования текстовых данных в числовые векторы с помощью Python и библиотеки scikit-learn. Вы можете использовать этот подход для различных задач, таких как классификация текстов, кластеризация и поиск информации. TF-IDF позволяет выделить наиболее важные слова в тексте, что может значительно улучшить качество ваших моделей машинного обучения.

TF-IDF — мощный инструмент для анализа текстов, и его применение может значительно улучшить качество ваших моделей машинного обучения. Надеюсь, этот пример был полезен и поможет вам в дальнейших исследованиях и проектах! 😉

Читайте также