Как вы знаете, сейчас в тренде искусственный интеллект, нейронные сети, использование различных вероятностных и логических подходов. И я попытаюсь сегодня рассказать о том, как это можно применить на практике для 1С.
Также существует определенный тренд создания программных помощников. Мы тоже решили создать своего помощника и назвать его Лариса. Она не такая мощная, как Siri или Алиса от Яндекса, но тоже имеет определенный потенциал и возможности. И сегодня я хочу рассказать про то, как она мыслит, как она думает, как видит информацию, как обрабатывает и как принимает решения.
Практические задачи, которые мы хотели решать с помощью нейросети
Прежде чем продолжить, я расскажу про задачи, которые мы ставили перед собой.
На конференции были прекрасные выступления про систему мониторинга, про то, как проводить анализ, изучая кучу графиков и десятки таблиц. Выявлять такие закономерности довольно сложно. Гораздо проще понять, что у нас произошло что-то плохое, когда уже идут письма и звонки от пользователей.
Одна из идей, которую я считаю оптимальной – это получать информацию о том, что сейчас происходит в системе буквально в двух словах. К примеру – «Все хорошо» либо «Свистать всех наверх, облачный сервер 1С упал, или отвалился интернет провайдер».
Самый оптимальный вариант для решения этой задачи – это использование нейронных сетей.
Что такое искусственная нейронная сеть?
Когда мы с вами говорим про нейронные сети, то обычно подразумеваем искусственную нейронную сеть.
Искусственная нейронная сеть – это упрощение биологической нейронной сети, упрощение структуры мозга. Не обязательно мозга человека, может быть, животного (крысы, мыши).
Основное звено нейронной сети – это нейрон. Он является кирпичиком, из которого выстраивается данная сложная структура.
Нейронная сеть обрабатывает сигналы:
- на вход (один или множество входов) нейрона подается сигнал,
- дальше происходит его обработка – она может быть сложная или простая;
- и этот сигнал передается дальше.
Нейроны группируются в ряды, называемые слоями. В нейронной сети обычно выделяют два крайних слоя:
- Первый называется входной, на него подаются сигналы, которые вы можете получить, либо они у вас есть.
- И выходной слой, с которого снимается результат обработки.
Все остальные слои называются скрытыми слоями. Каждый скрытый слой соединяется с предыдущим и последующим слоем, и информация может передаваться по сложной структуре связей, либо по простой, буквально по линейной.
Представление искусственного нейрона
Но это еще не все. При передаче информации от одного нейрона к другому происходит изменение уровня сигнала (умножение его на так называемый вес). В результате имитируется воздействие на систему.
Биологический нейрон, по сути, является минимальной структурной единицей нервной системы. Он может получать информацию, обрабатывать, хранить либо передавать дальше. В биологическом нейроне можно выделить три основных звена:
- дендриты;
- тело;
- и аксон.
Информация поступает на дендриты, дальше она через тело обрабатывается, и сигнал передается (или не передается) на аксон.
Соответственно, в упрощении нейрона все эти компоненты присутствуют:
- есть входы, на каждый из которых поступают сигналы;
- при обработке сигналы умножаются на вес;
- дальше все веса суммируются;
- с помощью активационной функции происходит выработка сигнала (либо не выработка);
- и все это передается дальше.
Нейронные сети в цифрах
Немного в цифрах, чтобы вы представили, насколько это сложные системы.
Относительно недавно было установлено, что в человеческом мозге порядка 86 млрд нейронов. И сейчас один из самых мощных нейрокомпьютеров содержит порядка 160 миллиардов. Количественный критерий достигнут.
Но не все, казалось бы, гладко. В качественном вопросе существуют проблемы. Сейчас самый мощный нейрокомпьютер по уровню находится где-то в районе мыши, может быть, даже таракана. Однако, как вы видите, между интеллектом человека и ближайшего нашего брата меньшего довольно большой разрыв. А между обычным человеком и гением буквально шажок.
Как вы думаете, что произойдет, когда нейронная сеть достигнет уровня соответствующего уровню человека?
Самоорганизующиеся нейронные сети Кохонена (SOM)
Самое замечательное свойство нейронной сети – это возможность обучения. Представьте себе, что есть некоторая общая структура и вы можете ее настроить на решение различных задач, даже без выполнения каких либо математических расчетов. Кроме этого бывает еще определенный класс сетей, которые могут самообучаться.
Самоорганизующиеся нейронные сети (SOM)– они обучаются без учителя.
Такие нейронные сети идеально подходят для решения поставленной нами задачи. Мы выбрали именно самоорганизующиеся карты (сети Кохонена). И я думаю, вы слышали о них, в интернете эта тема довольно широко освещена и совсем недавно был некоторый бум их использования на практике.
У данного класса сетей довольно большие преимущества для поставленной выше задачи:
- Используется простой алгоритм, это фактически однослойная нейронная сеть;
- С помощью этой сети можно обрабатывать информацию без нормирования (нормирование – это стандартная процедура, когда вы переводите все доступные вам информационные сигналы к единой шкале значений от 0 до 1).
- На вход сети вы можете подать любую информацию для анализа. Например, количество сотрудников или размер выручки (у одного клиента 300 тысяч долларов выручки и 75 сотрудников, у другого 85) – вы подаете на вход сети эту информацию, и она все это понимает и обрабатывает.
Сеть устроена просто:
- У вас есть определенный набор входных сигналов – той информации, которую вы хотите проанализировать.
- Каждый вход соединяется с нейроном, а все нейроны выстраиваются на прямоугольной сетке.
- И после обучения появляется некоторый рисунок разбиения на зоны. Эти зоны позволяют разбивать/разделять входящие данные на кластеры.
Это преимущество, которое есть у сетей Кохонена – с их помощью результат обучения можно преобразовать на карту, которая позволит увидеть и понять, как соотносятся между собой группы полученных данных.
В нашем случае это:
- рабочее состояние системы,
- либо состояние, характеризующееся конкретным сбоем:
- перегрузка, которая возникла,
- состояние, когда произошел обрыв сети и т.д.
Зная эту информацию, на карту подается результат преобразования, и мы получаем точку текущего состояния. Если рассмотреть процесс во времени, то мы можем фактически увидеть некоторую траекторию движения, когда система из работоспособного состояния может переместиться в аварийное.
Потом, в результате исправления она вернется в нормальное состояние, потом может еще что-то произойти. И тем самым мы можем увидеть эту динамику.
Небольшой флешбек, как это можно применить бизнесу. В бизнесе у нас другие задачи и цели. Если брать рынок и трейдеров, то они используют в своих данных для анализа более 30 параметров.
Например, смотрим задачу, когда есть контрагенты, и для каждого из них отслеживается объем либо количество закупок. И в рамках этого разбиения у нас получаются определенные зоны – например, стабильные и нестабильные покупатели. Я здесь выделил две зоны, а их может быть больше.
Дальше, проводя анализ и кластеризацию в различные моменты времени, вы можете отследить, как контрагенты из одной зоны могут мигрировать в другую зону, и в результате провести какой-то анализ.
- Если у нас возросло число стабильных покупателей, то были какие-то акции, скидки.
- Если у нас контрагент ушел в зону нестабильных покупателей, то это могли быть появление конкурента, либо менеджер плохо отрабатывает свою зарплату.
Как Лариса думает?
Итак, как в результате Лариса у нас думает?
Есть регламентное задание, которое запускает некоторую обработку:
- В этой обработке происходит загрузка XML-файла, представляющего собой структуру нейронной сети.
- Происходит выборка необработанных данных, и в результате все эти данные подаются на функцию обработки. Про нее я расскажу чуть позже.
- После того, как выполнена процедура вычисления, данные записываются обратно в базу.
В результате мы с вами имеем довольно простое суждение о состоянии нашей системы. Здесь приведена картинка – это динамический список в базе 1С. Цветами выделены различные области:
- красным – проблемная зона;
- розовым – критическая;
- без цвета – это нормальная работоспособная система.
Нейронная сеть в 1С
Вы скажете, что использование нейронных сетей на 1С – это тяжело и нереально, однако на практике некоторые задачи решить на ней возможно.
- Для нашего случая обработка входной информации по готовой нейронной сети на 1С выполняется очень быстро.
- Основная проблема для 1С – это процесс обучения. Его лучше вынести на специализированные инструменты, такие, как Tensor Flow или написать какой-нибудь собственный API или обработку.
Вот пример кода, который выполняет поиск решения нейронной сетью. Он в себе содержит не более 100 строчек кода и довольно прост.
Другой вопрос, который всегда возникает – как обучить нейронную сеть?
В зависимости от структуры выбранной вами сети ее обучение может быть довольно сложным, занимать довольно большой интервал времени и большие ресурсы. Особенно это касается решения задач преобразования и анализа изображений.
В общих словах, можно сказать, что процесс обучения – это подбор весов в нейронной сети.
- вы выбрали структуру нейронной сети,
- определили связи.
- и дальше запускаете процедуру, которая подбирает эти веса, чтобы в итоге нейронная сеть отвечала поставленным задачам.
Где взять данные для обучения?
Другая часть задачи – это получение данных, на которых вы будете ее обучать.
- Если вы ставите перед собой задачу обработки изображений, в интернете существуют довольно большие базы, которые имеют сотни тысяч изображений, разбитые на категории и т.д. Но у нас стоит задача мониторинга, в нашем случае получить такую выборку из интернета проблематично. Поэтому здесь мы используем информацию из Zabbix, если у вас есть такая система хранения, либо из того же самого ЦКК.
- Второй вариант – провести моделирование, но это довольно сложный и тяжелый процесс. Поэтому останавливаемся на первом варианте.
- После того, как у вас есть первичный набор данных, и проведено некоторое обучение, вы дальше можете в процессе работы использовать поступающие новые данные и новые ситуации, которые у вас появляются.
Такой нюанс – есть еще второй алгоритм обучения, который недавно предложили в Google. Там подбирают не веса, а структуру и активационные функции. Тем самым, этот алгоритм более приближен к процессу мышления человеческого мозга.
На слайде вы видите первую ситуацию, с которой мы столкнулись в процессе обучения. Здесь приведены примеры нагрузки на сервер 1С:
- На верхнем рисунке красным показан график нагрузки процессора, а зеленым – используемой памяти
- На нижнем рисунке – очередь к процессору.
В данном случае произошел сбой в хосте 1С и в результате проведенных мероприятий этот хост был сброшен и автоматически перезагружен. На верхнем рисунке это видно – когда у нас зеленый график пошел вниз.
Соответственно, на нем можно выделить две области:
- область нормальной, работоспособной системы, когда все хорошо.
- и область аномалии, ситуации, когда система находится в критической зоне и потом переходит в режим перегрузки, и работать в системе практически невозможно.
Если интерпретировать представленную выше ситуацию на двумерной плоскости относительно нагрузки на процессор и очереди, то мы видим следующую картину. Здесь убраны нейроны, которые не несут никакой информации, а остальные разбиты на две группы.
- одна из групп является аварийной и характеризует проблемную ситуацию;
- а другая – является нормальной, работоспособной системой.
Соответственно, обладая данной информацией, вы легко поймете, что у вас происходит, когда система начинает переходить из одного состояния в другое.
При дальнейшем анализе информации мы столкнулись с тем, что данных ситуаций множество. Здесь приводится проблема с диском, которая была у коллег, когда серьезный запрос «положил» базу.
Соответственно, количество анализируемой информации увеличилось – мы стали обрабатывать большее число критических случаев.
Еще одна хитрая ситуация, когда мы не сразу поняли, что происходит некоторая проблема, однако помощник ее отловил.
Здесь произошла ситуация, когда у одного из провайдеров в оборудовании произошло зависание системы, и она постепенно начала выкидывать клиентов из базы. Часть пользователей продолжала работать (1С показывала, что они в активном состоянии, что-то делают), но постепенно они тоже «отмирали».
В результате после устранения проблемы у нас произошел скачок нагрузки, и далее система вернулась в работоспособное состояние.
Неизвестные режимы работы. Аномалии
Когда вы начали обучать своего помощника (допустим, с небольшого набора данных – вы знаете, что у вас такое состояние работоспособное). Возникает вопрос, как понять и отловить другие неизвестные ситуации? Для этого необходимо ввести некоторое понятие, как аномалии – отклонения от нормы.
Вы обрисовываете некоторые границы, в рамках которых поведение считается допустимым. И при превышении данного состояния/поведения наш помощник Лариса информирует о том, что что-то пошло не так, «я такой ситуации не знаю». И он будет вас информировать об этом, чтобы вы приняли решение по реагированию на эту новую ситуацию.
Например, на графике приведено состояние системы, где у вас есть зона нормальной работы – нагрузка порядка 50-60%, и произошел скачок очереди к процессору совместно с повышением загрузки процессора до 90-100%. Это является отклонением, о чем Лариса нам успешно сообщила.
Здесь у вас может возникнуть желание сделать так, чтобы она не только ловила аномальные состояния, но и автоматически их классифицировала. Такую ситуацию можно решить автоматически, но на реальных системах так обычно не делают, потому что непонятно, куда все это может привести.
Вместо этого обычно используют помощника для формирования сообщений о состоянии системы (система оповещения). Ведь для того того, чтобы Лариса могла самостоятельно принять какое-то решение, требуется некоторый свод правил. Таблицу анализа состояния (с помощью того же APDEX) – о том что у нас изменилось положение пользователей в худшую сторону, не изменилось, либо стало лучше. А это довольно сложно реализовать, настроить и соответственно не оправдано на текущий момент.
Организация оповещений
Итак, вторая часть мышления Ларисы – это немного логического интеллекта. После того, как мы получили информацию о том, какое у нас состояние – плохо, хорошо или иначе, мы с вами можем применить некоторую машину состояний – описать правила, в результате которых она будет понимать, что ей необходимо делать. Здесь она отправляет информацию о том, что произошел переход состояния из нормального в критическое. То есть, система у нас только-только начала ухудшать положение пользователей. И, соответственно, мы можем уже применять определенные мероприятия для того, чтобы пользователи фактически ничего не почувствовали или не узнали.
Если же мы не смогли выполнить мероприятия в определенное время, то мы можем с вами уже проинформировать пользователей о том, что у нас есть определенные проблемы.
Большой плюс в том, что кроме суждений мы с вами можем еще и выдавать рекомендации о том, что происходит и как это исправить. Когда вы сталкиваетесь с ситуацией, вы ее, конечно же, решаете, а потом записываете информацию об этом куда-то в базу данных, чтобы Лариса определила, что в случае возникновения таких-то событий необходимы мероприятия, в результате которых данный инцидент будет устранен.
Соответственно, каждому кластеру либо зоне вы присваиваете данную информацию. После того как у вас происходит определенная ситуация, Лариса говорит вам, что случилось, и что необходимо сделать для того, чтобы устранить проблему. Это довольно удобно и хорошо.
Структура решения
Итак, структурно данная схема довольно проста.
- В центре находится конфигурация «Мониторинг производительности», которая хранит в себе фактическую информацию о сигналах либо решениях.
- И два класса обработок, которые используются.
- Первый класс – это обработки, которые загружают данные. Эти данные могут быть взяты из Zabbix, из «Центра контроля качества», данных технологического журнала, либо другие сигналы, которые вы сможете понять, получить и обработать.
- И второй класс обработок – анализируют данные и оповещают о проблемах. В этот класс входят две обработки, работающие по регламентному заданию.
- Первая обработка интерпретирует ситуацию с помощью нейронных сетей.
- И вторая – логическая, которая принимает определенные решения и что-то делает.
Проблемы нейронных сетей
Однако у самих нейронных сетей есть ряд проблем.
Конечно же, одна из проблем – это вопрос обучения. Замечательный пример – это диван леопардовой расцветки.
Суть в том, что, когда вы обучали нейронную сеть, вы подавали ей определенный набор картинок. В данном случае, животных – львов, тигров. И она, ленивая, как и мы с вами, нашла у этих картинок одну отличительную особенность – это «завитки на шкуре». И после того, как вы подали определенную специфическую информацию на вход, вы можете получить неожиданный результат. И вместо дивана с расцветкой леопарда, она вам с уверенностью скажет, что это леопард, а не мебель.
Для того, чтобы компенсировать возникшие проблемы, кроме еще большего процесса обучения, можно использовать логический подход. Особенно это удобно в системах с закономерностями, числами, правилами.
Что значит логический подход? С помощью определенных таблиц, деревьев решений выстраиваются закономерности и логические условия, с которыми можно просто и быстро оформить решение необходимой задачи, а не только использовать обученный “черный” ящик.
Данные таблицы довольно просто формулируются экспертом – используется наборы термов, которые определяет входную информацию и ее взаимоотношения внутри системы. Есть набор правил (база знаний), в рамках которых определяется, что происходит. И связь с решением решение, которое будет отображаться, передаваться пользователю.
Выводы
В итоге, в процессе решения данной задачи мы довольно столкнулись с некоторыми особенностями, которые мы преодолели и обошли. Мы поняли, как работать с наборами данных – как их получать, как их обрабатывать и что нужно исключать.
Поняли и поставили для себя цель – провести как провести дальнейшие доработки, чтобы помощником могли воспользоваться без особых умений не только мы, а еще и другие пользователи.
Соответственно, данный подход не обязательно применять только для мониторинга, его довольно удобно применять и для решения задач бизнеса.
У нейронных сетей, как я говорил, есть определенная возможность – она видит закономерности там, где мы не можем увидеть. Вы в голове не можете удержать 20-30-40-50 параметров для тысяч контрагентов и понять, чем контрагенты схожи между собой, а чем отличаются и почему.
Где найти проект?
Проект у нас открытый, выложен на GitHub https://github.com/Polyplastic/1c-parsing-tech-log . Если есть желание, можете присоединяться.
Вопросы:
- Я понял, что на первый слой вашей нейросети подаются данные из Zabbix или других систем мониторинга. Если меняется количество входных параметров, сеть приходится каждый раз переобучать? Или вне зависимости от того, какие системы мониторинга мы к ней подключаем, она продолжает так же хорошо определять аномальные ситуации?
- Конечно, ей требуется переобучение, либо она будет игнорировать поданные вами данные.
- А переобучение у вас происходит в каком-то другом модуле, не в 1С-ном?
- Если мы берем сеть Кохонена, но ее можно переобучить и в рамках 1С. Конечно же, это будет немного долго. Но если вы возьмете Tensor Flow, то там обучение производится через аппаратное ускорение GPU – это буквально минуты. А на 1С мы обучали порядка часа.
- А почему вы выбрали такую простую структуру нейронной сети? Почему не используете сверточные, рекурентные?
- Нейросети такого типа широко применяются для решения задач кластеризации. У вас есть наборы данных. И есть некоторое фазовое пространство, которое состоит из N-координат (30-40 координат). И в этом пространстве у вас есть наборы областей, в которых находится система. Она занимает не все пространство, а располагается шариками. Соответственно, данный подход удобно, просто и быстро обрабатывает эту сеть. Относительно использования других типов сетей – здесь есть сложности. Чем больше промежуточных слоев, тем тяжелее ее обучить, тем сложнее вопрос переобучения. И в итоге получается не столь эффективно.
- А можете привести качественные показатели – сколько у вас правильных срабатываний, сколько ложных срабатываний в процентном отношении
- У нас есть два варианта использования – сеть на нечеткой логике, и искусственная нейронная сеть. Нейронная сеть – порядка 90% срабатываний великолепно отрабатывает. А из-за влияния каких-то других параметров, которые мы не учли – мы можем неправильно интерпретировать, в результате мы просто заводим новые данные, которые позволяют скорректировать данное отклонение, соответственно, она будет лучше ловить. Все зависит еще и от настройки – сколько у вас данных и какого они качества.
****************
Данная статья написана по итогам доклада (видео), прочитанного на конференции INFOSTART EVENT 2019.
Приглашаем на конференции Инфостарта 2025 годаINFOSTART TEAMLEAD EVENT
Не только для разработчиков, но и для руководителей отделов разработки, тимлидов и ИТ-директоров. INFOSTART A&PM EVENT (Анализ & Управление проектами)
Практическая конференция для аналитиков и руководителей проектов 1С. |