Вопрос или проблема
После применения tfidf я рассматриваю сгенерированные характеристики:
from sklearn.feature_extraction.text import TfidfVectorizer
corpus = [
'This is the first document.',
'This document is the second document.',
'And this is the third one.',
'Is this the first document?',
]
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(corpus)
print(vectorizer.get_feature_names_out())
но я хочу также получить частоту каждого термина или характеристики. Как мне это сделать?
Исходя из приведенного примера, существует 9 различных слов, которые будут напечатаны в вашем операторе print
. Корпус состоит из 4 предложений, каждое слово будет представлено в строке из 4 строк с указанием своей частоты, таким образом X
, который содержит значения частоты, которые вы пытаетесь найти, будет иметь форму (4, 9)
.
Если вы выведете на печать значение X[0][0]
, вы получите частоту слова and
в первом предложении корпуса.
Ответ или решение
Вопрос о том, как получить частоту терминов, сгенерированных методом tfidf.get_feature_names_out()
, требует понимания работы алгоритма TfidfVectorizer из библиотеки Scikit-learn. Прежде чем углубиться в детали решения этой задачи, рассмотрим теорию, примеры и практическое применение.
Теория
Метод TfidfVectorizer
является распространенным инструментом для преобразования текста в количественные данные. Он вычисляет вес каждого слова в документе, опираясь на частоту его появления в этом документе (TF — term frequency) и обратную частоту вхождений в корпусе (IDF — inverse document frequency). Итоговое значение TF-IDF отражает важность термина в конкретном документе в сравнении с его значением в наборе документов.
Алгоритм TfidfVectorizer выполняет следующие шаги:
- Токенизация: разделение текста на отдельные слова.
- Построение словаря: формирование набора уникальных терминов из корпуса текста.
- Расчет TF: вычисление количества вхождений каждого термина в каждом документе.
- Расчет IDF: вычисление обратной частоты вхождений термина в наборе документов.
- Матричное представление: создание матрицы TF-IDF, где строки соответствуют документам, а столбцы — уникальным терминам, и значение на пересечении строки и столбца представляет взвешенную частоту термина.
Пример
Давайте рассмотрим пример на основе приведенного кода:
from sklearn.feature_extraction.text import TfidfVectorizer
corpus = [
'This is the first document.',
'This document is the second document.',
'And this is the third one.',
'Is this the first document?',
]
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(corpus)
features = vectorizer.get_feature_names_out()
print(features)
Этот фрагмент кода создает TfidfVectorizer и применяет его к корпусу из четырех предложений. После вызова fit_transform
мы получаем разреженную матрицу X, в которой содержатся веса TF-IDF для каждого термина в каждом документе. Метод get_feature_names_out()
возвращает массив уникальных терминов, найденных в корпусе текста.
Применение
Для получения частоты вхождений термина в каждом документе, может быть использован метод toarray()
, чтобы конвертировать разреженную матрицу в плотный формат:
# Получение плотной матрицы из разреженной
dense_matrix = X.toarray()
# Печать частот каждого термина в первом документе
first_document_tfidf = dense_matrix[0]
print("Частоты терминов в первом документе:")
for term, freq in zip(features, first_document_tfidf):
print(f"{term}: {freq:.3f}")
Этот код преобразует разреженную матрицу в массив NumPy, где каждая строка соответствует документу, а каждый столбец — термину из массива features
.
Дополнительные аспекты
Имея на руках матрицу TF-IDF, можно использовать её для различных задач, таких как:
- Кластеризация текстов: группировка документов с подобным содержимым.
- Классификация: определение тематики документа на основе частоты терминов.
- Рекомендательные системы: подбор контента, основываясь на совпадении терминов.
Более того, понимание работы TfidfVectorizer и методов работы с токенами помогает в реализации предобработки текстов, что является важным этапом в машинном обучении для работы с данными.
Заключение
Использование TfidfVectorizer и методов для извлечения информации о частоте терминов позволяет не только количественно оценить текстовые данные, но и извлечь скрытые закономерности в текстах. Это открывает потенциал для дальнейшего анализа и востребовано в различных прикладных задачах, включая анализ тенденций в текстах, автоматическое аннотирование и улучшение поисковых систем.