Что такое TF-IDF в машинном обучении
TF-IDF — это метод векторизации текста, который помогает оценить важность слова в конкретном документе относительно всего набора документов. Он учитывает не только то, как часто слово встречается в тексте, но и насколько редко оно встречается в корпусе.
В машинном обучении TF-IDF используют для преобразования текстов в числовые признаки: в поиске, классификации документов, анализе отзывов, рекомендательных системах и других NLP-задачах. В статье разберем, что такое TF-IDF, как работают TF и IDF, почему редкие и смысловые слова получают больший вес, а также как реализовать векторизацию текста на Python с помощью Scikit-learn.
Что внутри:
- что такое TF-IDF простыми словами;
- зачем нужна векторизация текста в машинном обучении;
- как работает TF — term frequency;
- как работает IDF — inverse document frequency;
- почему частые служебные слова получают меньший вес;
- как TF-IDF помогает поиску выбирать более релевантные документы;
- чем TfidfTransformer отличается от TfidfVectorizer;
- пример реализации TF-IDF на Python в Scikit-learn;
- где TF-IDF применяют в NLP и анализе текстов.
Введение в векторизацию TF-IDF в машинном обучении и его реализация с использованием Python.
Одним из важнейших способов изменения размера данных в процессе машинного обучения является использование термина "частота документа с инвертированной частотой", также известная как метод TF-IDF. В этой статье я расскажу, что такое метод TF-IDF в машинном обучении и как его реализовать с помощью языка программирования Python.
Что такое TF-IDF?
Идея метода TF-IDF заключается в том, чтобы придавать большое значение любому термину, который часто встречается в конкретном документе, но не во многих документах в корпусе. Если слово часто встречается в конкретном документе, но не во многих документах, оно, вероятно, удачно описывает содержание этого документа.
Scikit-Learn реализует метод TF-IDF в двух классах: TfidfTransformer, который принимает выходные данные разреженной матрицы, созданные CountVectorizer, и преобразует их, и TfidfVectorizer, который принимает текстовые данные и выполняет как извлечение функций из пакета слов, так и преобразование TF-IDF.
Зачем нужна векторизация TF-IDF?
Предположим, у поисковой системы есть база данных с тысячами описаний кошек, и пользователь хочет найти пушистых кошек, а затем вводит запрос «The furry cat». Поисковой системе необходимо решить, какой результат должен быть возвращен из базы данных.
Если в поисковой системе есть документы, которые соответствуют точному запросу, не будет никаких сомнений, но что, если ей нужно выбрать между частичными совпадениями? Чтобы упростить, скажем, он должен выбрать между этими двумя описаниями:
- «The pretty cat»
- «A furry kitten»
Первое описание содержит 2 из 3 слов запроса, а второе соответствует только 1 из 3, тогда поисковая система выберет первое описание. Как TF-IDF может помочь ему выбрать второе описание вместо первого?
TF одинаков для каждого слова, здесь никакой разницы. Однако можно было бы ожидать, что термины «cat» и «kitten» будут представлены во многих документах (высокая частота документов означает низкий IDF), а вот термин «furry» будет встречаться в меньшем количестве документов (IDF выше). Таким образом, TF-IDF для «cat» и «kitten» имеет низкое значение, а TF-IDF будет больше для «hairy», то есть в нашей базе данных слово «hairy» имеет большую силу. Различение как «cat» и «kitten».
Если мы используем TF-IDF для взвешивания различных слов, соответствующих запросу, слово «furry» будет более релевантным, чем слово «cat», и поэтому мы могли бы выбрать «A furry kitten» как лучшее соответствие.
Реализация алгоритма с помощью Python
А теперь давайте посмотрим, как реализовать метод TF-IDF с машинным обучением и использованием языка программирования Python. В приведенном ниже примере показана реализация векторизации TF-IDF с использованием Scikit-learn:
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())
print(X.shape)
Результат:
(4, 9)
Имейте в виду, что масштабирование TF-IDF предназначено для поиска слов, которые различают документы, но это неконтролируемый метод. Возможности с низким TF-IDF – это те, которые либо очень часто используются в документах, либо используются редко и только в очень длинных документах.
Надеюсь, вам понравилась эта статья о векторизации TF-IDF в машинном обучении.
FAQ
Вопрос: Что такое TF-IDF?
Ответ: TF-IDF — это метод оценки важности слова в документе. Он повышает вес слов, которые часто встречаются в конкретном документе, но редко встречаются во всем корпусе текстов.
Вопрос: Зачем TF-IDF нужен в машинном обучении?
Ответ: Алгоритмы машинного обучения работают с числами, а не с текстом. TF-IDF преобразует документы в числовые векторы, которые можно использовать для классификации, поиска, кластеризации и других NLP-задач.
Вопрос: Чем TF отличается от IDF?
Ответ: TF показывает, как часто слово встречается в конкретном документе. IDF показывает, насколько редко это слово встречается во всем наборе документов. Вместе они помогают выделить слова, которые лучше описывают смысл текста.
Вопрос: Чем TfidfVectorizer отличается от TfidfTransformer?
Ответ: TfidfVectorizer сразу принимает текстовые документы и строит TF-IDF-признаки. TfidfTransformer используется после CountVectorizer и преобразует уже готовую матрицу частот слов в TF-IDF.
Вопрос: Где применяется TF-IDF?
Ответ: TF-IDF применяют в поисковых системах, классификации текстов, анализе отзывов, тематической кластеризации, рекомендательных системах и базовых NLP-пайплайнах.
- Градиентный спуск в машинном обучении
- Метрики оценки Machine Learning моделей
- LSTM в машинном обучении
- Кривая AUC и ROC с использованием Python



