На сегодняшний день автоматическая классификация текста, т.е. определение принадлежности текста к некой категории в условиях постоянно возрастающего объема используемой информации является актуальной и крайне интересной задачей. Классификация текста может определяться общей тематикой текста, использованием определенных понятий, стилей.
В статье описана разработка программы, построенной на основе нейронной сети для распознавания текста по категориям.
Для реализации программы использовался язык программирования высокого уровня Python 3.6.7 [1] с использованием платформы машинного обучения с открытым исходным кодом Anaconda 1.9.6 [2] и библиотек, позволяющих работать с текстом: scikit-learn 0.20.2 [3] и TensorFlow 1.12.0 [4].
Данная работа выполнена в рамках курсового проекта по дисциплине «Machine Learning. Обучающиеся технические системы», научный руководитель – д.ф.-м.н., профессор Воронова Л.И. [5].
Введение
Машинное обучение занимается построением математических моделей для исследования данных. Задачи «обучения» начинаются с появлением у этих моделей настраиваемых параметров, которые можно приспособить для отражения наблюдаемых данных, таким образом, программа как бы обучается на данных. Как только эти модели обучатся на имеющихся данных наблюдений, их можно будет использовать для предсказания и понимания различных аспектов данных новых наблюдений [6].
Классификация методами машинного обучения применяется в решении многих практических задач, таких как: фильтрация документов; распознавание спама; автоматическое аннотирование; поиск текстовых документов; навигация по большим информационным ресурсам; подбор рекламы; составление интернет-каталогов; классификация новостей; индексация данных в поисковых запросах и т.д.
Постановка задачи
Задачей является разработка и практическая реализация нейронной сети, которая позволяет классифицировать текст по категориям. Функционал данного программного модуля может быть использован в качестве расширения на различных поисковых сервисах, а также отдельных сайтах.
Данную задачу необходимо решить, используя машинное обучение типа «обучение с учителем», с применением нейронных сетей.
Нейронную сеть необходимо обучить и протестировать на выборках, распределение которых составляет 70% примеров для обучения и 30% для тестирования.
Описание набора исходных данных
В качестве исходных данных (dataset) был использован открытый набор данных BBC articles fulltext and category [7], состоящий из категорий и соответствующих им предложений, в формате csv, из 2226 строк формата «заголовок, текст» (рис. 1).
Рис. 1 – Часть датасета
Dataset содержит 5 категорий (классов): sport, business, politics, tech, entertainment.
Архитектура разрабатываемой нейронной сети
Проектируемая сеть имеет структуру многослойного персепрона (MLP), которую называют простыми нейронными сетями прямого распространения, а иногда и просто нейронными сетями [8].
Многослойные персептроны успешно применяются для решения задач классификации и имеют следующих три отличительных признака.
1. Каждый нейрон сети имеет нелинейную функцию активации.
2. Один или несколько скрытых слоев.
3. Высокая связность.
Автором статьи разработана архитектура нейронной сети для классификации текста по категориям и представлена на рисунке 2.
Нейронная сеть состоит из:
-Входного слоя - 1000 нейронов (количество слов в словаре).
-Одного скрытого слоя, состоящего из 512 нейронов.
-Выходного слоя - 5 нейронов (5 классов).
В процессе написания программы было произведено сравнение для получения оптимального результата обучения по количеству нейронов на скрытом слое. Результат сравнения представлен на рисунке 3.
Рис. 3 – Диаграмма сравнения точности при разном количестве нейронов
На диаграмме представлен график с вероятностями ошибки при использовании различного числа нейронов (128 с точностью 92,1%, 256 с 92,6%, 512 с 93,8%), используя один скрытый слой.
Так как нейронная сеть показала наибольший результат с 512 нейронами (самая верхняя кривая на диаграмме) в 93,8% точности с одним скрытым слоем, то код с добавлением второго слоя был закомментирован и не был использован в дальнейшем.
Обучение нейронной сети
Обучение происходит методом обратного распространения ошибки.
Обратное распространение ошибки - это очень эффективный в вычислительном плане подход к вычислению производных сложной функции стоимости.
В данном случае задача - использовать эти производные для извлечения весовых коэффициентов с целью параметризации многослойной искусственной нейронной сети. Сложность параметризации нейронных сетей состоит в очень большом количестве весовых коэффициентов в высокоразмерном пространстве признаков [9].
Цель обучения - найти набор весов и смещений, который минимизирует функцию потери [10]. Вывод нейронной сети задается формулой:
Для вычисления значения ошибки