Автор оригинала: FreeCodeCapm Team.
Mayank Tripathi
Компьютеры хороши с цифрами, но не так много с текстовыми данными. Одной из наиболее широко используемых методов для обработки текстовых данных является TF-IDF. В этой статье мы узнаем, как это работает и каковы его особенности.
Из нашей интуиции мы считаем, что слова, которые чаще, кажутся чаще, должны иметь больший вес в текстовом анализе данных, но это не всегда в этом случае. Слова такие как “”, “воля” и “вы” – называются Стопварды – Появляются больше всего в корпусе текста, но имеют очень мало значимости. Вместо этого слова, которые редки, являются теми, которые на самом деле помогают в различении данных и носить больше веса.
Введение в TF-IDF
TF-IDF Стенды для «терминов частоты – обратная частота данных». Во-первых, мы узнаем, что означает этот термин математически.
Термин частота (TF) : Дает нам частоту слова в каждом документе в корпусе. Это соотношение количества раз, когда слово появляется в документе по сравнению с общим количеством слов в этом документе. Это увеличивается как количество вхождений этого слова в документе увеличивается. Каждый документ имеет свой TF.
Обратная частота данных (IDF): Используется для расчета веса редких слов во всех документах в корпусе. Слова, которые редко встречаются в корпусе, имеют высокую оценку IDF. Это дается уравнением ниже.
Объединение этих двух мы придумываем счет TF-IDF (W) для слова в документе в корпусе. Это продукт TF и IDF:
Давайте возьмем пример, чтобы получить более четкое понимание.
ПРЕДЛОЖЕНИЕ 1: Автомобиль движется на дороге.
Приговор 2: Грузовик движется на шоссе.
В этом примере каждое предложение является отдельным документом.
Теперь мы рассчитаем TF-IDF для вышеуказанных двух документов, которые представляют наш корпус.
Из вышеуказанного стола мы видим, что TF-IDF общих слов были ноль, что показывает, что они не являются значительными. С другой стороны, TF-IDF «автомобиль», «грузовик», «дорога» и «шоссе» ненульны. Эти слова имеют больше значений.
Использование Python для расчета TF-IDF
Давайте теперь код TF-IDF в Python с нуля. После этого мы увидим, как мы можем использовать Sklearn для автоматизации процесса.
Функция Computetf
Вычисляет балл TF для каждого слова в корпусе по документу.
Функция ComputeDF
Вычисляет счет IDF каждое слово в корпусе.
Функция ComputEtFIDF
Ниже вычисляется оценка TF-IDF для каждого слова, умножая баллы TF и IDF.
Выходной вывод, полученный вышеуказанным кодом для набора документов D1 и D2, совпадает с тем, что мы вручную рассчитывали выше в таблице.
Вы можете обратиться к Эта ссылка для полной реализации.
keglenn.
Теперь мы увидим, как мы можем реализовать это, используя Sklearn в Python.
Во-первых, мы импортируем Tfidfvectorizer
от sklearn.feature_Extraction.Text
:
Теперь мы инициализируем векторизатор
А затем позвоните в FIT и преобразуйте над ним, чтобы рассчитать оценку TF-IDF для текста.
Под капотом Sklearn Fit_Transform выполняет следующие подходит
и трансформировать
Функции. Они можно найти в официальной библиотеке Sklearn в Github.
def fit(self, X, y=None): """Learn the idf vector (global term weights) Parameters ---------- X : sparse matrix, [n_samples, n_features] a matrix of term/token counts """ if not sp.issparse(X): X = sp.csc_matrix(X) if self.use_idf: n_samples, n_features = X.shape df = _document_frequency(X) # perform idf smoothing if required df += int(self.smooth_idf) n_samples += int(self.smooth_idf) # log+1 instead of log makes sure terms with zero idf don't get # suppressed entirely. idf = np.log(float(n_samples) / df) + 1.0 self._idf_diag = sp.spdiags(idf, diags=0, m=n_features, n=n_features, format='csr') return self def transform(self, X, copy=True): """Transform a count matrix to a tf or tf-idf representation Parameters ---------- X : sparse matrix, [n_samples, n_features] a matrix of term/token counts copy : boolean, default True Whether to copy X and operate on the copy or perform in-place operations. Returns ------- vectors : sparse matrix, [n_samples, n_features] """ if hasattr(X, 'dtype') and np.issubdtype(X.dtype, np.floating): # preserve float family dtype X = sp.csr_matrix(X, copy=copy) else: # convert counts or binary occurrences to floats X = sp.csr_matrix(X, dtype=np.float64, copy=copy) n_samples, n_features = X.shape if self.sublinear_tf: np.log(X.data, X.data) X.data += 1 if self.use_idf: check_is_fitted(self, '_idf_diag', 'idf vector is not fitted') expected_n_features = self._idf_diag.shape[0] if n_features != expected_n_features: raise ValueError("Input has n_features=%d while the model" " has been trained with n_features=%d" % ( n_features, expected_n_features)) # *= doesn't work X = X * self._idf_diag if self.norm: X = normalize(X, norm=self.norm, copy=False) return X
Одна вещь, чтобы заметить в вышеуказанном коде, в том, что вместо всего лишь журнал N_SAMPLES, 1 был добавлен в N_SAMPLES для расчета оценки IDF. Это гарантирует, что слова с баллом IDF нуля не подавляются полностью.
Полученный выходной выход находится в виде перекошенной матрицы, который нормализуется, чтобы получить следующий результат.
Таким образом, мы видели, как мы можем легко кодировать TF-IDF всего за 4 строки, используя Sklearn. Теперь мы понимаем, насколько мощный TF-IDF является инструментом для обработки текстовых данных из корпуса. Чтобы узнать больше о Sklearn TF-IDF, вы можете использовать Эта ссылка Отказ
Счастливое кодирование!
Спасибо за прочтение этой статьи. Обязательно поделитесь этим, если вы найдете это полезным.
Для получения дополнительной информации о программировании вы можете следовать за мной, так что вы получаете уведомление каждый раз, когда я придумываю новый пост.
Ваше здоровье!
Кроме того, давайте свяжемся о Twitter , LinkedIn , Github и Facebook Отказ