Рубрики
Без рубрики

Как обрабатывать текстовые данные с использованием TF-IDF в Python

Автор оригинала: 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 Отказ