Создание платформы для анализа публичных опросов с помощью машинного обучения - технология будущего

XIII Международный конкурс научно-исследовательских и творческих работ учащихся
Старт в науке

Создание платформы для анализа публичных опросов с помощью машинного обучения - технология будущего

Силкин Г.О. 1
1Муниципальное бюджетное общеобразовательное учреждение средняя школа № 3 г. Выкса
Салкина С.Н. 1
1Муниципальное бюджетное общеобразовательное учреждение средняя школа № 3 г.Выкса
Автор работы награжден дипломом победителя III степени
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

Введение

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

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

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

Цель работы: создание платформы для составления, публикации, анализа опросов и тестов.

Задачи:

разобраться с понятием «Нейронная сеть»;

узнать что такое нейрон;

узнать принцип работы нейронной сети;

рассмотреть обучение «Нейронной сети»;

изучить создание опросов с помощью «Нейронной сети»;

создать платформу для создания публичных опросов.

Методы:

анализ;

исследование;

синтез.

Нейронные сети

История создания и развития

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

Самой первой моделей нейронной сети считается Перцептрон. Он был приложен Фрэнком Розенблаттом в 1957 году и впервые реализовал в виде электронной машины «Марк-1» в 1960 году. В 1943 году в своей статье «Логическое исчисление идей, относящихся к нервной активности» Уоррен Мак-Каллок и Уолтер Питтс предложили понятие искусственной нейронной сети. В частности, ими была предложена модель искусственного нейрона.

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

Но такая задача как распознавание образов на картинке или слов в аудиозаписи становиться очень трудной для компьютера. Такие данные очень хаотичны и найти закономерности в них очень сложно.

У человека ситуация обратная. Ему легко дается задача распознавания образов или классификации объектов. Но по сравнению с компьютером человеку довольно трудно делать математические вычисления.

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

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

Области применения

Сегодня вы не проводите ни дня без того чтобы в той или иной степени воспользоваться нейронными сетями. Приведу несколько примеров их использования:

Анализ вашего запроса при поиске в Google.

Когда вы делаете фотографию на ваш телефон встроенная программа улучшает качество картинки.

Заходя на Ютуб или во Вконтакте алгоритмы генерируют интересную для вас ленту новостей или контента.

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

Наложение масок в Instagram.

Рекомендация музыки в Spotify.

Хранилища данных у Google экономят до 40% электроэнергии из за оптимизации которую осуществляет нейронные сети. А в Китае почти во всех городах уже работает система распознавания лиц.

Принцип работы

В нейросеть подаются данные X, а на выходе она предсказывает данные Y. Что бы она делала это так, как вам нужно перед этим её обучают на примерах данных X и Y. Набор таких примеров для обучения называют датасетом.

Допустим, есть задача классификации изображений на две категории: кошки и собаки. При получении на вход изображения кошки нейросеть должна выдавать значение 1, при получении на вход изображения собаки 0. Теперь обучаем нейросеть. Подаём на вход данные X - изображение собаки, и данные Y - число 0. После предсказания мы сравниваем предсказанное Y с реальным Y, вычисляем ошибку и меняем веса сети. Такую операцию проводим несколько тысяч раз пока ошибка не будет минимальной.

Процесс обучения нейронной сети.

Нейрон

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

Строение нейрона

Внутри нейрона происходит три вещи:

1. Перемножение входных данных с весами

x1 => x1 * w1

x2 => x2 * w2

2. Сложение всего полученного с числом смещения

( x1 * w1 ) + (x2 * w2) + b

3. В конце всё проходит через функцию активации

f(x1 * w1 + x2 * w2 + b)

В качестве функции активации чаще всего используют сигмоидальную (Сигмоида). Грубо говоря она приближает числа больше нуля к 1, а числа меньше нуля к 0.

Сигмоида

Полная нейронная сеть

Нейронная сеть представляет собой группу связанных между собой нейронов. Простая нейронная сеть выглядит следующим образом:

Перцептрон

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

Наглядная схема перемножения весов

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

Главный цикл

Условно каждую итерацию цикла обучения нейросети можно разделить на две части: предсказание и обновление весов.

Эти две части выполняются некоторое количество раз - эпох. Количество эпох выставляется самостоятельно, зависит от сложности нейросети и сложности набора данных.

При обучении запускается следующий цикл который повторяется N эпох:

Предсказание нейросети.

Расчет ошибки.

Обновление весов

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

Предсказание

p - входной вектор

Wi - веса

bi - нейроны смещения

fi - функции активации

a3 - выходной вектор

Конечная функция предсказания трехслойной нейронной сети:

a3 = f3(W3*f2(W2*f1(W1*p+b1)+b2)+b3)

Обновление весов

Весь процесс обновления весов сводиться к уменьшению ошибки при предсказании с помощью этих весов.

Обновление весов прямопроходной нейронной сети производиться с помощью следующего backpropagation - алгоритм обратного распространения ошибки.

Backpropagation

После предсказания мы получаем вектор Yp, и обычно сравниваем его с правильным результатом Y с помощью функции среднеквадратической ошибки MSE (meansquareerror) или какой то другой функции ошибки.

MSE функция.

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

Формула обровления весов

График уменьшения ошибки с течением эпох

Проблемы обучения

Основными проблемами при обучении нейронной сети являются локальные минимумы и переобучение.

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

Схематическое изображение локального и глобального минимумов

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

Опросы и тесты

Задумка

Главная задумка сайта заставить нейросеть предсказывать ответ после прохождения, какого-либо теста. Идея задействовать машинное обучение в анализе тестов имеет большое количество плюсов.

Предположим мы хотим создать тест по прохождению, которого человек сможет узнать, насколько он психически здоров.

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

Чтобы нейросеть научилась определять степень психического здоровья с начала она должна на чём-то обучиться. Мы берём группу психических нездоровых людей и группу совершенно здоровых. Далее составляем тест из как то абстрактных или не очень опросов и даем пройти опрос двум группам. По проведению опроса мы узнали как здоровые, и нездоровые люди отвечают на одинаковые вопросы. Передаем эти данные нейросети и получаем инструмент способный предсказывать психическое здоровье пользователя по тому, как он ответишь на вопросы. В этом случае точность нейросети будет зависеть лишь от количества вопросов и опрошенных.

Или же можно привести пример с тем как можно будет использовать мою платформу для создания тестов на профориентацию.

Нам достаточно создать опрос в котором будут вопросы о интересах и качествах человека. И главным вопросом в нём будет вопрос о том, кем уже работает пользователь. Тем самым мы можем подать этот опрос на какой-нибудь завод или другое производства, и получить датасет.

Теперь на основе датасета из опрошенных можно создать тест, выбрав главный вопрос (“кем вы работаете?”) как результат того что должен показывать тест.

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

Реализация

Результат каждого опрошенного будет представлен как одномерный массив с длиной N, где N это количество ответов в опросе. В каждой ячейке стоит либо 0 либо 1 в зависимости от того выбрал ли человек этот ответ или нет. Например:

person_1 = [1,0,0,0,1,0,1,1,0,0,1,1,1,0]

Это будет входными данными для нейросети.

Вывести она должна будет один из ответов в ключевом вопросе.

key_question = [0,0,1,0]

Простота представлений данных опроса для нейросети является одним из главных двигателей проекта.

Сайт

Типы сайтов

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

Neural Test

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

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

Разработка сайта

Любой интернет сайт условно можно разделить на две части: серверную и клиентскую, или же frontend и backend.

Серверная часть

Для написания серверной части я задействовал язык python и модуль flask для создания api.

Api (applicationprogramminginterface) - это программный интерфейс приложения или же просто это множество «ручек», которые доступны пользователю данного ящика и которые он может вертеть и дёргать.

В моем случаи apiNuraltest делиться на часть с опросами и часть с тестами.

Допустим, если полное название сайта neuratest.com, то при обращении к блоку с опросами мы прописываем neuraltest.com/survey.

После того как мы обратились к блоку мы должны указать команду api которую хотим произвести и данные которые хотим передать.

Все данные, что мы отдаём и принимаем от api, представлены в формате json. Для этой задачи он самый распространённый.

Приведу пример создание и редактирования нового опроса:

Создаём новый опрос обращаясь к api по следующему url: neuraltest.com/survey/create. И передаю туда json данные: {“name”: “Teenagers survey”, “description”: “Couple questions about school”}

В этих данных я указал имя и описание опроса.

При получении данных сервер сначала проверяет корректность форматирования дынных. Например, api проверяет, не превышает ли имя опроса в длину 32 символа, или не используются ли в нём недоступные знаки.

При нарушении форматирования сервер вернёт вам следующее: {“response”:{“error”: “someerrordescription”}}

Если же всё введено верно, то api создаст опрос в базе данных и вернёт вам положительный ответ: {“response”: True}

После создания опроса у нас есть возможность отредактировать введенные данные при создании опроса. Прописываем url для изменения информации о опросе: neuraltest.com/survey/setInfo

Новые имя и описание: {“name”: “New teenagers survey”, “description”: “Couple questions about school, and other.”}

Сервер автоматический запомнил какой id у опроса, который в данный момент создаёт пользователь и присвоил ему новые значения.

База данных

В качестве базы данных для api я использовал SQL, а именно модуль для pythonsqlite3.

Для облегчении процесса проектирования базы данных я построил блок схему.

Блок-схема базы данных NeuralTest

Клиентская часть

К клиентской части относиться всё то, что отображается и вычисляется в браузере.

Во фронтэнде приходиться использовать несколько технологий сразу. Главное это HTML или же язык гипертекстовой разметки. Он создает главную структуру страницы, разбивает её по блокам. Визуальное наполнение и размеры объектов и отступов задаёт CSS - каскадная таблица стилей. Для того чтобы общаться с сервером и производить управление компонентами задействуется встроенный в браузер язык JavaScript.

Так как вышеперечисленные технологии довольно старые использовать их с сухую очень неудобно. Сейчас для создания клиентской части сайтов используются фреймворки.

Фреймворк (Framework) - это программная платформа, с помощью которой можно выполнять задачи намного быстрее и удобнее.

Я использовал фреймворк React. Он разработан и поддерживается компанией facebook. Он занимается тем, что сам генерирует нужный html код на странице. С его помощью я разобрал свой сайт за небольшие компоненты и составил из них приложение. Каждый компонент выполняет только свою задачу: берёт данные сайта, хранит и показывает их.

Дизайн

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

Для разработки дизайна интерфейса и логотипа сайта я использовал Figma.

Заключение

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

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

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

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

Литература

Системы искусственного интеллекта и нейронные сети: http://bourabai.ru/einf/chapter134.htm

Нейронные сети и нейрокомпьютеры: http://iit1.mpei.ac.ru/pubkrug1.pdf

Нейросети: как искусственный интеллект помогает в бизнесе и жизни: https://habr.com/ru/post/337870/

Зоопарк нейронной сети: https://www.asimovinstitute.org/neural-network-zoo/

Нейронные сети: их практическое применение: https://habr.com/ru/post/322392/

Просмотров работы: 248