Нейросеть для службы поддержки: кейс от NAUKA
 
Нейросеть для службы поддержки: кейс от NAUKA

Обилие рабочих задач не мешает увлечённым профессионалам стремиться к развитию. Создание корпоративного проекта NaukaLabs – тому подтверждение. Наши исследования будут направлены на выявление идей с высоким потенциалом для бизнеса и освоение прогрессивных технологий. Первой ласточкой стала нейронная сеть.

Теория

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

Структура нейронной сети пришла в мир программирования из биологии:

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

Для изучения процессов, протекающих в мозге, и при попытке их моделирования возникло понятие искусственного нейрона. Роль синапсов играют весовые коэффициенты, корректирующие значение входящих в нейрон данных. Сравнение суммы всех взвешенных сигналов со значением функции активации даёт на выходе тот или иной результат.

 

Искусственный нейрон

Совокупности нейронов могут образовывать нейронные сети, содержащие один или несколько слоёв. Картинка ниже – для самого простого случая: кружками обозначен входной слой, который не считается слоем нейронной сети, а справа расположен слой обычных нейронов. В однослойных нейронных сетях сигналы с входного слоя сразу подаются на выходной слой. Он производит необходимые вычисления, результаты которых сразу подаются на выходы.

Однослойная нейронная сеть

Более сложная структура – многослойная нейросеть. Работу скрытых слоев нейронов можно сравнить с крупным производством. Продукт – выходной сигнал – на заводе собирается по стадиям. После каждого станка получается некий промежуточный результат. Скрытые слои таким же образом превращают входные сигналы в те или иные промежуточные результаты.

Многослойная нейронная сеть

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

Рекуррентная нейронная сеть

Для каких целей полезна нейросеть? Перечислим основные типы задач:

  • Классификация. Технология сильно упрощает распределение данных по параметрам. Например, на вход даётся набор людей, и нужно решить, кому из них давать кредит, а кому нет. Эту работу может эффективно проделать нейронная сеть, анализируя возраст, платежеспособность, кредитную историю и т.д.
  • Регрессионный анализ. В переводе на русский, аппроксимация и прогнозирование. В качестве примера приведём возможность предсказывать следующий рост или падение акций, основываясь на текущей ситуации на фондовом рынке.
  • Кластеризация. Эта цель очень схожа с классификацией, правда, её результатом является кластер – по сути целый класс. Другими словами, кластеризация – это классификация, выполняемая самой нейронной сетью: нельзя определить заранее, какие получатся классы. Зато можно выявить скрытые или незамеченные зависимости между изучаемыми объектами нейронной сети

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

  1. Обучение с учителем — веса меняются так, чтобы ответы сети минимально отличались от уже готовых правильных ответов.
  2. Обучение без учителя — сеть самостоятельно классифицирует входные сигналы. Правильные (эталонные) выходные сигналы при этом не демонстрируются.

Практика

Только за последние полгода в службу поддержки компании NAUKA пользователи направили около 5700 сообщений. Сортировать их вручную слишком долго и скучно, куда веселее создать нейросеть, классифицирующую письма по типам.

Перечислим основные причины обращения:

  1. Ошибка. Сообщение описывает сбой программного обеспечения.
  2. Новые требования (пожелания). Обращение связано с новыми требованиями к функционалу ПО или пожеланиями к изменению данных.
  3. Требуется обучение (консультация). Пользователь сталкивается с незнанием работы программы или бизнес-процесса.
  4. Причина не поддаётся определению. Сообщения не имеют отношения к ПО – например, поздравления с 8 марта, Новым годом, просто ошибочные письма и т.д.

Разделим задачу создания нейросети на этапы решения:

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

На момент написания статьи NAUKA воплотила в жизнь первый шаг – сортировку на основе текста. Эта задача также выполнялась поэтапно:

  1. создание словаря,
  2. подбор модели нейронной сети,
  3. обучение сети,
  4. проверка сети – определение процента правильных ответов.

Остановимся подробнее на каждой стадии.

Создание словаря нейросети

Словарь – это весь массив имеющих смысловую нагрузку слов, что содержатся в выборке обучаемой модели. Не каждое слово, встреченное в тексте, является значимым, поэтому массив необходимо обработать.

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

В результате получилось 1111 значимых слов. Однако нейронная сеть не умеет работать непосредственно со словами, поэтому текст сообщения необходимо превратить в массив числовых значений.

На входе текст сообщения разбиваем на слова, нормализуем и проверяем его наличие в словаре. Если слово присутствует, переменной с соответствующим номером присваиваем значение 1. На выходе получаем массив длиной 1111 элементов, состоящий из нулей и единиц:

(1, 0, 0, 1, … , 0, 1, 0)

Построение нейронной сети

Делать с нуля слишком долго, так что мы решили использовать библиотеку Encog 3.3 – бесплатный API-интерфейс нейронной сети с открытым исходным кодом для Java и .Net. Используем сеть прямого распространения, т.е. от входа к выходу. Не хочется грузить читателей математикой, поэтому лишь упомянем для тех, кому это важно, что в качестве функции активации была выбрала сигмоидальная функция.

Специалисты NAUKA исследовали 3 варианта нейросети – с двумя скрытыми слоями нейронов, с одним скрытым слоем и без скрытых слоёв.

Обучение нейронной сети

Как было указано выше, в качестве тестовой выборки мы использовали 3416 сообщений, присланных в службу поддержки NAUKA за последние полгода. 75% этих данных мы направили на обучение нейросети, остальные 25% оставили для проверки.

Выполняем обучение с уровнем допустимой ошибки в 1%, используя алгоритм обучения Resilient Propagation (RProp). В отличие от других алгоритмов, также основанных на методе градиентного спуска, RProp использует знаки частных производных, а не их значения.

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

Переобучение

Переобучение – явление, когда построенная модель хорошо объясняет примеры из обучающей выборки, но относительно плохо работает на примерах, не участвовавших в обучении. При минимальной ошибке в процессе обучения сети она становится менее вариативной к данным, не участвующим в обучении.

Обучаем нейронную сеть до ошибки в 8% (в реальности оказалось максимум 7,2%). Проверка дала более удачный результат в 65% сообщений, классифицированных корректно. На этом этапе было замечено, что на одни и те же модули идут преимущественно сообщения одного содержания. Расширяем словарь, добавив сигнатуры модулей. Результат составил 68,6%.

Стоит отметить, что и многослойные, и однослойные нейросети дали одинаковый результат при проверке. Это говорит о линейной разделимости множества исходных данных. Значит, на практике допустимо использовать нейронную сеть без скрытых слоёв.

И всё же – можно ли улучшить прогноз? Можно, если учесть скрытые зависимости, которые не удалось отследить нашим программистам. А с этой задачей хорошо справится сама нейросеть, решающая задачу кластеризации. Для этого попробуем отойти от сетей прямого распространения. На сей раз используем нейронную сеть Кохонена – этот класс сетей, как правило, обучается без учителя и успешно применяется в задачах распознавания.

Выбрав алгоритм обучения Neighborhood Competitive Training, мы исследовали сети с числом кластеров, равным 10, 20, 40, 60, 80, 100.  Остановились на 80 кластерах – проверка показала точность прогноза, равную 64,98%. Таким образом, кластеризация дала результаты, схожие с обучающей выборкой.

Выводы

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

Перспективы применения таких программ весьма обширны – даже в рамках лишь одного из наших проектов. К примеру, нейросеть может рассматривать любые тексты от пользователей сайта на предмет запрещённых материалов – продажи сомнительных препаратов, нецензурной лексики, экстремизма и т.п. Она способна помочь службе поддержки в формировании возможных ответов на обращения. Технология упростит поиск людей по фото и анализ изображений для выявления порнографии. И это лишь малая толика возможностей нейронных сетей. Будем пробовать их на себе и обязательно поделимся новыми кейсами с вами!

NAUKA ВКонтакте

NAUKA в Facebook

NAUKA в Instagram

Вернуться в пресс-центр