Серия НЛП — реализация простого классификатора текста на Python

Автор: Дзен и искусство компьютерного программирования

1. Введение

В области обработки естественного языка (НЛП) классификация текста — это метод анализа текста, который можно использовать для группировки, категоризации или классификации текста по темам. Его цель — выявить потенциальное значение текста, чтобы помочь организаторам лучше понять информацию и извлечь из нее эффективную информацию. Вообще говоря, классификация текста является частью обучения с учителем (Supervised Learning), то есть набор обучающих данных известен, и необходимо предсказать метки новых данных. Вообще говоря, существуют следующие виды классификации текста:

  • Тематическое моделирование — это алгоритм кластеризации.
  • Мешок слов Моделирование — это векторная пространственная модель.
  • Анализ настроений.
  • Обнаружение эмоций.
  • Обобщающая классификация.

В этой статье будет показано, как использовать язык Python для реализации простого классификатора текста на основе библиотеки scikit-learn.

2. Объяснение основных понятий и терминов

2.1 Набор данных

Входными данными задачи НЛП обычно является текстовая последовательность (документ), то есть абзац текста, статья или комментарий и т. д. Обычно обучающий текст и тестовый текст различаются. Обучающий текст используется для обучения классификатора, а тестовый текст используется для оценки производительности классификатора. Следовательно, чтобы проверить действие классификатора, тестовый текст должен быть невидимым. Кроме того, количество тестовых текстов не может быть слишком маленьким, так как это повлияет на обобщающую способность классификатора. Поэтому наиболее распространенным подходом является случайный выбор определенной доли выборок из обучающего набора в качестве тестового набора.

2.2 Разработка функций

Ключом к задачам классификации текста является получение достаточно хороших признаков. Под разработкой функций понимается выбор подходящих текстовых функций и преобразование их в форму, которую могут использовать алгоритмы машинного обучения, то есть такие операции, как оцифровка (Numericalize), стандартизация (Standardlize) или кодирование (Encode). Поэтому задачи классификации текста часто также включают в себя такие операции, как выбор признаков, уменьшение размерности и пересечение признаков.

2.3 Выбор модели и настройка гиперпараметров

В практических приложениях модели для задач классификации текста часто включают нейронные сети, деревья решений, машины опорных векторов, байесовские методы и т. д. Каждая из этих моделей имеет свои преимущества и недостатки, и разные модели подходят для разных наборов данных. В то же время каждая модель имеет некоторые гиперпараметры, которые необходимо настроить, такие как количество скрытых слоев, глубина, скорость обучения, коэффициент регуляризации, стратегия настройки параметров и т. д. нейронной сети. Выберите хорошую модель и оптимизируйте гиперпараметры для достижения наилучшего эффекта классификации.

2.4 Показатели оценки

Существует множество показателей оценки для задач классификации текста, таких как точность, точность, отзыв, значение F, кривая AUC-ROC и т. д. Разница между точностью и точностью заключается в основном в двух аспектах:

  • Точность представляет собой среднее значение всех образцов, указывающее долю образцов, правильно классифицированных классификатором;
  • Точность — это среднее значение для каждой категории, указывающее долю выборок, правильно предсказанных классификатором в каждой категории.

Существует взаимосвязь между точностью и точностью, но они не совсем одинаковы. Например, если мы рассматриваем задачу распознавания рукописных цифр как задачу двоичной классификации, то уровень точности равен распознаванию всех изображений, а уровень точности — распознаванию всех цифр. Но для задач классификации по нескольким меткам точность и прецизионность трудно измерить. Обычно используемой метрикой для оценки задач классификации по нескольким меткам является значение F1, которое учитывает как точность, так и полноту.

Наконец, когда мы хотим измерить производительность классификатора, мы должны учитывать вышеупомянутые множественные показатели оценки, а также другие показатели производительности, такие как эффективность и потребление ресурсов.

3. Объяснение основных принципов алгоритма, конкретных рабочих этапов и математических формул.

3.1 Алгоритм TF-IDF

Алгоритм TF-IDF (частота термина – обратная частота документа, частота термина – обратная частота документа) является важным методом расчета веса функции и широко используется в классификации текста, поисковой сортировке, поиске информации, интеллектуальном анализе текста, системах рекламных рекомендаций и других областях. . Его основная идея:

  • Частота термина: чем больше раз встречается слово, тем больший вес он имеет в тексте. Другими словами, чем выше частота слова, тем больше вероятность того, что текущее слово считается репрезентативным.
  • Обратная частота документов: чем меньше вероятность появления текущего слова во всех документах, тем больше вес слова в тексте. Другими словами, если слово встречается во всей библиотеке документов очень часто и редко, то это слово имеет низкую репрезентативность.

Конкретная формула расчета выглядит следующим образом:

tfidf = tf * idf

tf = n / d(w) # где n — количество раз, которое текущее слово w появляется в текущем документе d, d — количество документов idf = log(N / df(w)) + 1 # где N общее количество документов, df(w) — количество документов, содержащих слово

3.2 Алгоритм KNN

K-Nearest Neighbours (KNN) — это простой и эффективный алгоритм классификации, который можно использовать в классификации текста, распознавании изображений, классификации биологической информации и других областях. Его основная идея такова: учитывая набор обучающих выборок, найдите k ближайших к нему выборок, а затем присвойте их категории выборке запроса. Вообще говоря, выбор подходящего значения k может привести к лучшим результатам классификации.

Конкретный процесс расчета выглядит следующим образом:

  1. Рассчитайте расстояние между выборкой запроса и обучающей выборкой.Метод измерения расстояния может быть Евклидовым расстоянием, Манхэттенским расстоянием или расстоянием Чебышева.
  2. Отсортируйте по расстоянию и выберите k обучающих выборок с наименьшим расстоянием от выборки запроса.
  3. Определите категории выбранных k обучающих выборок и присвойте ту же категорию выборке запроса.

3.3 Полиномиальный байесовский алгоритм

Мультиномиальный наивный байесовский алгоритм (MNB) — это алгоритм наивной байесовской классификации, который может решать задачи классификации по нескольким категориям. Его основная идея такова: предположим, что априорные вероятности каждой категории независимы друг от друга, то есть P(Ci|X) = P(Cj|X), i!= j. То есть в задачах классификации признаки каждой категории условно независимы.

Конкретный процесс расчета выглядит следующим образом:

  1. Для данного входного вектора признаков x вычислите априорную вероятность p(Ci) каждой категории.
  2. Для каждой категории i подсчитайте количество характерных слов, встречающихся в документе, запишите его как Ni и сгладьте Ni.
  3. Для каждой категории i подсчитайте количество документов во всей библиотеке документов, обозначенное Di.
  4. Для данного входного вектора признаков x вычислите вероятность появления p(wi|Ci) каждого признака категории в документе и сгладьте каждую вероятность.
  5. Для данного входного вектора признаков x вычислите апостериорную вероятность p(Ci|X), то есть P(Ci|X) = p(Ci)*prod{p(wi|Ci)}.
  6. Возвращает категорию с наибольшей апостериорной вероятностью в качестве результата классификации.

3.4 Алгоритм логистической регрессии

Алгоритм логистической регрессии (Логистическая регрессия) — это алгоритм классификации, подходящий для задач двоичной классификации. Его основная идея такова: предположим, что на кривой сигмовидной функции между входной переменной и выходной переменной имеется прямая линия, так что значение входной переменной проецируется на кривую в направлении значения выходной переменной (значения, большие больше или равное нулю отображается в 1, а значения меньше нуля отображаются в 1. Значение отображается в 0). Затем классифицируйте на основе точек на кривой.

Конкретный процесс расчета выглядит следующим образом:

  1. Метод градиентного спуска используется для итеративной оптимизации параметров модели, то есть для решения параметра θ так, чтобы функция правдоподобия была максимизирована.
  2. Используйте сигмовидную функцию, чтобы преобразовать значение линейного прогноза в значение вероятности. Чем ближе значение вероятности к 1, тем более достоверным является результат прогнозирования.
  3. Результат классификации определяется на основе порогового значения.

3.5 Алгоритм SVM

Алгоритм машины опорных векторов (SVM) — это двухклассовый алгоритм классификации, который может решать сложные задачи нелинейной классификации. Его основная идея такова: сначала на основе набора обучающих данных создается гиперплоскость сегментации (гиперплоскость), а гиперплоскость разделения этой гиперплоскости максимизирует расстояние между опорными векторами. Затем функция ядра используется для отображения исходных объектов в многомерное пространство, а штрафной параметр используется для максимизации интервала между опорными векторами.

Конкретный процесс расчета выглядит следующим образом:

  1. Сопоставьте гиперплоскость сегментации с набором обучающих данных, то есть найдите параметры Φ и b.
  2. На новом входном образце x используйте функцию ядра, чтобы сопоставить его с многомерным пространством, и вычислите проекцию на гиперплоскость.
  3. Результаты классификации оцениваются по размеру проекции.

4. Конкретные примеры кода и пояснения

В этом разделе в основном показано, как использовать язык Python для реализации простого классификатора текста на основе библиотеки scikit-learn. Мы подготовили воображаемый набор текстовых данных и реализовали простой классификатор текста с использованием API scikit-learn. Структура кода следующая:

import numpy as np
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import Pipeline

# Load the dataset and split it into training set and testing set randomly
corpus = ["apple pie is delicious", "banana bread is yummy",
          "orange juice is tasty", "grape soda is sweet"]
labels = [0, 0, 1, 1]
np.random.seed(0)
indices = np.arange(len(corpus))
np.random.shuffle(indices)
train_size = int(0.7*len(corpus))
train_indices = indices[:train_size]
test_indices = indices[train_size:]
training_set = [(corpus[idx], labels[idx]) for idx in train_indices]
testing_set = [(corpus[idx], labels[idx]) for idx in test_indices]
print("Training Set:", training_set)
print("Testing Set:", testing_set)

# Define a pipeline with text vectorization using count matrix, followed by MNB classifier
pipe = Pipeline([('vectorizer', CountVectorizer()),
                 ('classifier', MultinomialNB())])

# Train the model on the training set
model = pipe.fit(training_set[0::,0], training_set[0::,1])

# Test the trained model on the testing set
predicted = model.predict(testing_set[0::,0])
actual = testing_set[0::,1]
accuracy = sum((predicted == actual).astype(int))/len(actual)
print("Model Accuracy:", accuracy)

Запустив приведенный выше код, вы увидите следующий результат:

Training Set: [('apple pie is delicious', 0), ('banana bread is yummy', 0), ('orange juice is tasty', 1)]
Testing Set: [('grape soda is sweet', 1)]
Model Accuracy: 0.5

Это показывает, что наш классификатор текста выполнил определенные задачи классификации и достиг хорошей точности. Однако, поскольку этот набор данных прост, а соотношение обучающих и тестовых данных составляет 7:3, точность, возможно, все же необходимо повысить. В то же время мы также можем попытаться обучить и протестировать больше данных и использовать больше функций, таких как:

  • Обработка стоп-слов: удаление общих стоп-слов (таких как «есть», «the», «и») может повысить точность классификации;
  • Извлечение именной фразы: фразы или предложения могут быть извлечены как признаки для повышения точности классификации;
  • Больше алгоритмов классификации: помимо наивного Байеса мы также можем использовать другие методы, такие как Random Forest, AdaBoost, SVM и т. д., для сравнения эффектов каждого алгоритма.

рекомендация

отblog.csdn.net/universsky2015/article/details/133446753
рекомендация