Что такое TF-IDF в машинном обучении?
Введение в векторизацию 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 в машинном обучении.