diff --git a/tex/50-implementation.tex b/tex/50-implementation.tex index 4c9a2cbb8e0c829a5111ad8b977f006a51806ab2..e2d88770641775302c644390df84a216e9bc31ea 100644 --- a/tex/50-implementation.tex +++ b/tex/50-implementation.tex @@ -1,503 +1,514 @@ -\chapter{Реализация прототипа системы рекомендации сервисов умного города} -\label{cha:realization} - -\section{Архитектура прототипа} - -Архитектура платформы предоставления городских сервисов и информации представлена на рисунке~\ref{fig:architecture}. -Платформа состоит из двух основных частей: компоненты управления персональной информацией пользователей и компоненты предоставления информации и сервисов. -Профили пользователей хранятся в Postgresql\footnote{https://www.postgresql.org/} базе данных. -Profiles management and access component предоставляет внешнее API для читателей и поставщиков информации профилей и внутреннее API для компонентов пользовательского интерфейса. -Компонент Social Network profiles reader осуществляет периодическое чтение персональной информации из социальной сети и загружает изменения в базу данных -(компонентов загрузки информации из сторонних источников может быть множество). - -\begin{figure}[htb] - \centering - \includegraphics[width=\textwidth, keepaspectratio]{inc/img/architecture} - \caption{Архитектура платформы предоставления городских сервисов и информации} - \label{fig:architecture} -\end{figure} - -Информация о сервисах (их описания, используемые при поиске), также хранится в Postgresql базе данных и предоставляется провайдерами сервисов. -Запросы пользователей на естественном языке обрабатываются Service search component, где происходит структурирование запроса и поиск сервисов по трем составляющим: -сопоставление запроса и описания сервиса; поиск схожих профилей пользователей; коллаборативная фильтрация. -Затем отправляются запросы сервисам на получение информации (ответа на вопрос пользователя). -Информация возвращается пользователю, имеющему возможность оценить качество. -При выполнении запроса сервису может потребоваться персональная информация пользователя. -В этом случае сервис запрашивает права на чтение части профиля у пользователя, предоставляя описание в виде маски RDF графа. - -На данный момент разработаны прототипы компонентов Social network profile reader, Profile management and access component, Service register component... - - -\section{Программная реализация компонентов прототипа} - -\subsection{Сервис управления цифровыми личностями} - -Для визуализации большого объема информации о цифровых личностях был разработан web-сервис, при помощи которого можно обозревать цифровые личности, -просматривать параметры, предпочтения и выявленные сценарии использования сервисов умного города. -Web-сервис разбит на две части: backend-часть, которая отвечает за обработку данных о цифровых личностях и frontend-часть, -которая отвечает за визуализацию данных и взаимодействие пользователя с backend-частью web-сервиса. - -Backend-часть реализована на языке программирования Python\footnote{https://www.python.org/} и микрофреймворке Flask\footnote{http://flask.pocoo.org/}. -Информация о цифровых личностях хранится в ORM-подобном виде благодаря пакету SQLAlchemy\footnote{https://www.sqlalchemy.org/}. -Backend-часть сервиса агрегирует полученные данные о цифровых личностях, сервисах умного города и передает ее по определенным URL-адресам в виде JSON. -Также возможно, если это необходимо, изменение данных пользователем. - -Frontend-часть представлена на рисунках~\ref{fig:di_front_1} и~\ref{fig:di_front_2}. -Frontend был реализован на языке программирования Javascript и фреймворке Vue.js\footnote{https://vuejs.org/}, который позволяет создавать SPA-приложения. -Пользователь может просматривать информацию о цифровой личности (имя/фамилия, возраст, пол, выявленные при кластеризации признаки и т.д.), -цифровых сервисах умного города (их использование и географическую привязку взаимодействия), а также изменять информацию. - -\begin{figure}[htb] - \centering - \includegraphics[width=\textwidth, keepaspectratio]{inc/img/di_front_1} - \caption{Цифровая личность, ее признаки и использование сервисов умного города} - \label{fig:di_front_1} -\end{figure} - -\begin{figure}[htb!] - \centering - \includegraphics[width=\textwidth, keepaspectratio]{inc/img/di_front_2} - \caption{Частота использования сервисов умного города цифровой личностью} - \label{fig:di_front_2} -\end{figure} - -\subsection{Кластерный анализ} - -\subsubsection*{\textbf{Генерация контекстов использования сервисов}} - -Для каждого из полученных после обработки профилей пользователей было сгенерировано по три контекста использования сервисов, -то есть при каком контексте данный пользователей воспользовался каким-либо сервисом. В результате было получено 48399 контекстов. - -Каждый контекст содержал информацию о: - -\begin{enumerate} - \item Месте, в котором использовался конкретный сервис: на учебе/на работе, у метро, у светофора, на остановке, дома, на даче, в другом месте; - \item Времени, когда использовался определенный сервис: утром, днем, вечером, ночью; - \item Дне недели, когда использовался конкретный сервис: выходной или будний день. -\end{enumerate} - -Время и день недели генерировались случайным образом. -Местоположение генерировалось с помощью эвристики, учитывающей время, день недели, образование и наличие работы. - -Каждый контекст использования сервисов имеет свой id, а также id профиля пользователя, к которому привязан данный контекст. -В листинге~\ref{lst:context_example} представлен пример контекста. - -\inputminted[frame=lines, linenos, breaklines]{js}{../src/context_example.json} -\begin{listing}[H] - \caption{Пример контекста использования сервиса} - \label{lst:context_example} -\end{listing} - -\subsubsection*{\textbf{Предсказание использования сервисов}} - -Для решения проблемы ``холодного старта'' для каждого сервиса была проведена оценка корреляции по каждому из следующих признаков пользователя: -\emph{высокий доход, наличие автомобиля, наличие прав, наличие велосипеда, наличие мотоцикла, наличие самоката, наличие детей, -наличие гражданства, статус: школьник, студент, работающий; наличие инвалидности, наличие инвалидной коляски, наличие питомца, -малый возраст, большой возраст, пол, отношение к курению, отношение к алкоголю, ночь, дома, на работе, на учёбе, в метро, на остановке, на светофоре, на даче, выходной}. - -В результате была получена матрица $W$ (листинг~\ref{lst:mat_service_features}), размером $N_s \times N_f$, где $N_s$~---~количество сервисов, $N_f$~---~количество признаков пользователя. - -\inputminted[frame=lines, linenos, breaklines]{python}{../src/mat_service_feature.py} -\begin{listing}[H] - \caption{Матрица соотношения сервисов и признаков пользователей} - \label{lst:mat_service_features} -\end{listing} - -Похожая матрица составлялась для контекстов пользователей, -в результате чего была получена матрица $X$ (листинг~\ref{lst:mat_context_features}), размером $N \times N_f$, где $N$~---~количество контекстов пользователей, $N_f$~---~количество признаков пользователя. - -% mat_context_feature.py - -\inputminted[frame=lines, linenos, breaklines]{python}{../src/mat_context_feature.py} -\begin{listing}[H] - \caption{Матрица соотношения контекстов и признаков пользователей} - \label{lst:mat_context_features} -\end{listing} - -Полученные матрицы и перемножались так, чтобы получилась матрица кол-во контекстов пользователей $\times$ количество сервисов, -где отдельное значение тем больше, чем больше соответствующий сервис мог быть использован при соответствующем контексте пользователя. - -Идея дальнейших действий основана на логистической регрессии, многоклассовый вариант которой производит предсказания по формуле~\ref{eq:multiclass_logical_regression}: - -\begin{equation} - \label{eq:multiclass_logical_regression} - \begin{aligned} - p_i &= \sigma (WX_i + b), \text{где} \\ - \sigma(z) &= \frac{exp(z_j)}{\sum^K_{k=1} exp(z_k)}, z = (z_1, z_2, ..., z_K), - \end{aligned} -\end{equation} - -при этом выражение $WX + b$ отражает уверенность классификатора в принадлежности тому или иному классу, -функция $\sigma(z)$ приводит эти уверенности в диапазон $[0 \ldots 1]$ так, что сумма результатов равна единице. - -При оценке матрицы $W$ учитывались степени влияния признаков относительно друг друга, но абсолютные значения неизвестны. -Поэтому для получения показателей, характеризующих вероятность использования при определенном контексте определенного сервиса матрица умножалась на коэффициент $k$, -подобранный так, чтобы итоговые показатели могли содержать один-три сервиса со значительной уверенностью. - -Таким образом, уверенности в том, что в $i$-том контексте можно использовать конкретные сервисы вычислялись по формуле $p_i = \sigma(kWX_i + b)$. -Вектор $b$ подбирался таким образом, чтобы каждый из сервисов в среднем рекомендовался с одинаковой уверенностью $\frac{1}{N_s}$, -путем математической оптимизации, представленной в формуле~\ref{eq:multiclass_optimization}. - -\begin{equation} - \label{eq:multiclass_optimization} - b = arg \; min || \big( \frac{1}{N} \sum^N_{j=1} p_j \big) - \frac{1}{N_s} || -\end{equation} - -\subsubsection*{\textbf{Кластеризация}} - -Кластеризация (кластерный анализ)~---~типичная задача статистического анализа данных: задача обнаружения и разбиения множества объектов одной природы на группы, -называемые кластерами, так, чтобы объекты одной группы обладали похожим свойством. -Под ``свойством'' понимается близость объектов друг к другу относительно выбранной метрики. - -Цели кластеризации: - -\begin{enumerate} - \item упростить дальнейшую обработку данных, разбить множество объектов на группы схожих объектов чтобы работать с каждой группой в отдельности; - \item выделить нетипичные объекты, которые не подходят ни к одному из кластеров; - \item разработать типологии или классификации объектов; - \item исследовать концептуальные схемы группировки объектов. -\end{enumerate} - -Основная задача~---~кластеризовать полученные контексты использования определенных сервисов конкретными пользователями. -В качестве переменных, по которым будут оцениваться объекты в выборке использовались векторы уверенностей по каждому сервису. -В качестве метода определения меры сходства между объектами было выбрано евклидово расстояние $R(x, y) = \{\sum_i (x_i - y_i)^2\}^{1/2}$, -которое попросту является геометрическим расстоянием в многомерном пространстве. - -В качестве метода кластерного анализа было решено использовать метод К-средних, реализованный в библиотеке scikit-learn\footnote{https://scikit-learn.org/}, -в которой реализовано большое количество алгоритмов машинного обучения. -По сравнению с другими методами метод К-средних является хорошо изученным, имеет приближение, -позволяющее обрабатывать огромное количество примеров (48399 контекстов оказались проблемой для, например, агломеративной кластеризации), -а также позволяет контролировать количество кластеров. - -Кластеризация методом K-средних начинается с выбора k случайно расположенных центроидов (точек, представляющих центр кластера). -Каждому элементу назначается ближайший центроид, евклидово расстояние до которого минимально. -После того как назначение выполнено, каждый центроид перемещается в точку, рассчитываемую как среднее по всем приписанным к нему элементам. -Затем назначение выполняется снова. Эта процедура повторяется до тех пор, пока назначения не прекратят изменяться. - -Существует модификация данного метода под названием Mini-Batch k-Means\footnote{https://www.eecs.tufts.edu/~dsculley/papers/fastkmeans.pdf}. -Основная идея данной модификации заключается в том, что на каждой итерации вместо полного прохода по данным мы работаем с мини-батчами~---~небольшими подмножествами данных. -Чтобы уменьшить влияние шума, создаваемого таким образом, на втором этапе положения кластера заменяются на , где предыдущее положение кластера,~---~центроид точек кластера -(то, на что заменяется положение кластера в оригинальном алгоритме), а обратно пропорционально количеству точек, которое участвовало в вычислении центроидов для данного кластера. - -Для визуализации результата кластеризации получившиеся кластеры были спроецированы на плоскость с помощью алгоритма t-SNE, реализованного в библиотеке openTSNE\footnote{https://github.com/pavlin-policar/openTSNE}, -который является техникой нелинейного снижения размерности, хорошо подходящей для вложения данных высокой размерности для визуализации -в пространство низкой размерности (двух- или трехмерное). Результат работы алгоритма представлен на рисунке~\ref{fig:clusterization_result}: - -\begin{figure}[htb] - \centering - \includegraphics[width=\textwidth, keepaspectratio]{inc/img/clusterization_result} - \caption{Результат кластеризации} - \label{fig:clusterization_result} -\end{figure} - -Для каждого получившегося кластера были посчитаны средние значения уверенностей при определенном контексте использования по каждому из сервисов. -В результате были получены следующие предполагаемые сценарии использования сервисов при определенном контексте (см. таблицу~\ref{tab:scenario_table}). - -\begin{center} - \begin{longtable}{|p{0.3\textwidth}|p{0.3\textwidth}|p{0.3\textwidth}|} - \hline - Сценарий & Используемый сервис & Оценка уверенности \\ - \hline \endfirsthead - - \multirow{3}{0.3\textwidth}{\textbf{Сценарий поиска досуга в городе}} & сервис общественных бассейнов города & 0.1535 \\ \cline{2-3} - & сервис каршеринга & 0.1304 \\ \cline{2-3} - & сервис танцевальных студий города & 0.1233 \\ - \hline - - \multirow{3}{0.3\textwidth}{\textbf{Сценарий поиска ближайших заведений и мероприятий в городе}} & сервис ближайших ночных общественных заведений & 0.5782 \\ \cline{2-3} - & сервис ближайших мероприятий и фестивалей в городе & 0.2335 \\ \cline{2-3} - & сервис покупки билетов на концерт & 0.1263 \\ - \hline - - \multirow{3}{0.3\textwidth}{\textbf{Сценарий использования сервисов для людей с ОФВ}} & сервис ближайших травмпунктов & 0.1977 \\ \cline{2-3} - & сервис заказа такси для перевозки инвалида & 0.1611 \\ \cline{2-3} - & сервис маршрутов с возможность перемещения инвалидных колясок & 0.1277 \\ - \hline - - \multirow{3}{0.3\textwidth}{\textbf{Сценарий поиска ближайших заправок и цен на топливо}} & сервис цен на топливо & 0.4452 \\ \cline{2-3} - & сервис ближайших заправок & 0.3040 \\ \cline{2-3} - & сервис проката велосипедов & 0.0757 \\ - \hline - - \multirow{3}{0.3\textwidth}{\textbf{Сценарий вызова \newline экстренных служб}} & сервис вызова скорой помощи & 0.5050 \\ \cline{2-3} - & сервис ближайших постов полиции & 0.3193 \\ \cline{2-3} - & сервис ближайших аптек города & 0.0139 \\ - \hline - - \multirow{3}{0.3\textwidth}{\textbf{Сценарий поиска мест для курения}} & сервис поиска мест для курения & 0.8388 \\ \cline{2-3} - & сервис поиска акций на абонементы в спортзал & 0.0369 \\ \cline{2-3} - & сервис поиска кафе и ресторанов с бизнес-ланчами & 0.0099 \\ - \hline - - \multirow{3}{0.3\textwidth}{\textbf{Сценарий поиска кинотеатров и театров}} & сервис кинотеатров IMAX & 0.3491 \\ \cline{2-3} - & сервис ближайших кинотеатров & 0.3296 \\ \cline{2-3} - & сервис театров города & 0.1545 \\ - \hline - - \multirow{3}{0.3\textwidth}{\textbf{Сценарий использования сервисов для спортсменов}} & сервис поиска тренера по конкретному виду спорта & 0.4287 \\ \cline{2-3} - & сервис спортивных и тренажерных залов города & 0.3209 \\ \cline{2-3} - & сервис поиска акций на абонементы в спортзал & 0.1745 \\ - \hline - - \multirow{3}{0.3\textwidth}{\textbf{Сценарий поиска тренажерного зала/тренера}} & сервис поиска акций на абонементы в спортзал & 0.4156 \\ \cline{2-3} - & сервис поиска тренера по конкретному виду спорта & 0.4240 \\ \cline{2-3} - & сервис поиска мест для курения & 0.0830 \\ - \hline - - \multirow{3}{0.3\textwidth}{\textbf{\small Сценарий использования сервисов для пожилых людей}} & сервис ближайших аптек города & 0.8260 \\ \cline{2-3} - & сервис театров города & 0.0311 \\ \cline{2-3} - & сервис общественных бассейнов города & 0.0153 \\ - \hline - - \multirow{3}{0.3\textwidth}{\textbf{Сценарий поиска досуга по предпочтениям}} & сервис поиска заведений по конкретной кухне & 0.2839 \\ \cline{2-3} - & сервис концертов в городе & 0.2778 \\ \cline{2-3} - & сервис театров города & 0.1590 \\ - \hline - - \multirow{3}{0.3\textwidth}{\textbf{Сценарий способов передвижения для пешего пользователя}} & сервис заказа такси & 0.1533 \\ \cline{2-3} - & сервис ближайших остановок общественного транспорта & 0.1510 \\ \cline{2-3} - & сервис ближайших станций метро & 0.1390 \\ - \hline - - \multirow{3}{0.3\textwidth}{\textbf{Сценарий оплаты услуг автомобилиста}} & сервис оплаты парковки & 0.2628 \\ \cline{2-3} - & сервис оплаты штрафов & 0.2174 \\ \cline{2-3} - & сервис проката автомобилей & 0.2009 \\ - \hline - - \multirow{3}{0.3\textwidth}{\textbf{Сценарий поиска кратчайших маршрутов для автомобиля}} & сервис построения кратчайших маршрутов для автомобиля & 0.6842 \\ \cline{2-3} - & сервис поиска платных парковок в городе & 0.0993 \\ \cline{2-3} - & сервис поиска заведений по конкретной кухне & 0.0834 \\ - \hline - - \multirow{3}{0.3\textwidth}{\textbf{Сценарий поиска акций и выгодных предложений}} & сервис кинотеатров с самыми низкими ценами & 0.3630 \\ \cline{2-3} - & сервис ресторанов и кафе с выгодными акциями & 0.2591 \\ \cline{2-3} - & сервис выставок в городе & 0.0400 \\ - \hline - - \multirow{3}{0.3\textwidth}{\textbf{Сценарий поиска средств передвижения при отсутствии прав и тс}} & сервис проката велосипедов & 0.2275 \\ \cline{2-3} - & сервис проката самокатов & 0.2171 \\ \cline{2-3} - & сервис поиска попутчиков в городе & 0.2053 \\ - \hline - - \multirow{3}{0.3\textwidth}{\textbf{Сценарий поиска бесплатных парковок и ближайших заправок}} & сервис бесплатных парковок в городе & 0.8836 \\ \cline{2-3} - & сервис ближайших заправок & 0.0650 \\ \cline{2-3} - & сервис маршрутов для велосипедистов в городе & 0.0133 \\ - \hline - - \multirow{3}{0.3\textwidth}{\textbf{Сценарий поиска заведений питания}} & сервис поиска кафе и ресторанов с бизнес-ланчами & 0.4233 \\ \cline{2-3} - & сервис поиска заведений с вегетарианской кухней & 0.1046 \\ \cline{2-3} - & сервис ресторанов и кафе с выгодными акциями & 0.0908 \\ - \hline - - \multirow{3}{0.3\textwidth}{\textbf{Сценарий поиска развлечений для туристов/выходного дня}} & сервис поиска достопримечательностей в городе & 0.0319 \\ \cline{2-3} - & сервис построения живописных маршрутов & 0.0317 \\ \cline{2-3} - & сервис выставок в городе & 0.0768 \\ - \hline - - \multirow{3}{0.3\textwidth}{\textbf{Сценарий использования сервисов в позднее время суток}} & сервис график разведения мостов & 0.5464 \\ \cline{2-3} - & сервис круглосуточных заведений питания & 0.1279 \\ \cline{2-3} - & сервис ближайших ночных заведений & 0.1086 \\ - \hline - - \caption{Сценарии использования сервисов при определенном контексте кластеров} - \label{tab:scenario_table} - \end{longtable} -\end{center} - -\subsection{Классификация} - -Классификация пользователей социальной сети VK.com была произведена на основе нейронных сетей. -На вход классификатору подается набор данных о цифровых личностях умного города. -Каждая цифровая личность обладает определенным набором характеристик, на основе которых можно произвести классификацию. -Вдобавок, для обучения нейронной модели были использованы данные кластерного анализа цифровых личностей, -на основании которых были выделены определенные группы пользователей. Таким образом, обучение нейронное модели можно характеризовать как обучение с учителем. - -Для реализации задач классификации был использован язык программирования Python. -Для работы с нейронными сетями были использованы открытое программное обеспечение Tensorflow\footnote{https://www.tensorflow.org/} и Keras\footnote{https://keras.io/}. -Обработка набора данных цифровых личностей реализована при помощи пакета Pandas\footnote{https://pandas.pydata.org/}. -Нейронная модель состоит из входного слоя, в котором задаются параметры цифровой личности, -два внутренних скрытых слоев размерностью 128 нейрона и выходной слой, который содержит результат классификации (размерность~---~20 нейронов). -Для внутренних слоев используется функция активации ReLU, для выходного~---~сигмоида. - -Обучение нейронной классификационной модели происходит на протяжении 20 эпох. -В результате точность предсказания на итоговой выборке составляет около 91.4\%, что является допустимым результатом. -Процесс обучения представлен на рисунке~\ref{fig:classification_nn_graph}. - -\begin{figure}[htb] - \centering - \includegraphics[width=\textwidth, keepaspectratio]{inc/img/classification_nn_graph} - \caption{Процесс обучения классифицирующей нейронной сети} - \label{fig:classification_nn_graph} -\end{figure} - -\subsection{Рекомендация сервисов} - -В рамках данной работы была создана модель рекомендации с учетом контекста (где каждый уникальный набор значений свойств контекста пользователя рассматривался как отдельный субъект). -Для обучения и тестирования модели исходный набор данных, содержащий 3.6 млн экземпляров оценок релевантности одного сервиса для одного пользователя, -был случайным образом разделены 90/10. -Результаты обучения представлены на рисунках~\ref{fig:recommendations_1} и~\ref{fig:recommendations_2}, изображающих зависимость среднеквадратической ошибки от различных параметров. -На оси абсцисс рисунка~\ref{fig:recommendations_1} изображено количество латентных факторов, разные графики показывают ошибку при разных коэффициентах регуляризации. -На оси абсцисс рисунка~\ref{fig:recommendations_2} изображен весовой коффциент, а разные графики показывают ошибку при разных добавочных коэффициентах. -Таком образом, были опробованы различные комбинации параметров моделей (количество латентных факторов, коэффициент регуляризации, добавочный вес и весовой коэффициент), -лучше результаты были получены с использованием следующих параметров: количества латентных факторов 75, коэффициента регуляризации 0.1, добавочным весом 0.1, -весовым коэффициентом 500. Обучение происходило до тех пор, пока функция потерь убывала, плюс дополнительно 10 итераций. -Для каждого набора параметров количество итераций не превосходило 50. -Слабое влияние добавочного коэффициента на результат можно объяснить малым количеством пропущенных оценок в обучающей выборке. - -\begin{figure}[htb] - \centering - \includegraphics[width=\textwidth, keepaspectratio]{inc/img/recommendations_1} - \caption{графики среднеквадратической ошибки рекомендации при различном количестве скрытых факторов (ось абсцисс) - и различных коэффициентах регуляризации при фиксированном значении весового коэффициента 500 и добавочного веса 0.1} - \label{fig:recommendations_1} -\end{figure} - -\begin{figure}[htb] - \centering - \includegraphics[width=\textwidth, keepaspectratio]{inc/img/recommendations_2} - \caption{графики среднеквадратической ошибки рекомендации при различных весовых коэффициентах (ось абсцисс) - и добавочных коэффициентов при фиксированном количестве латентных факторов 75 и коэффициента регуляризации 0.1} - \label{fig:recommendations_2} -\end{figure} - -\subsection{Семантический анализ запроса} - -Для успешной реализации выполнения пользовательского запроса на естественном языке в сервисах умного города требуется решить задачу семантического анализа запросов пользователя, -а именно~---~семантической связность групп токенов из пользовательского запроса на естественном языке и сущностей из онтологии. -Субъекты могут быть известны заранее и присутствовать в общих или специализированных базах знаний. -Они также могут быть созданы на основе открытых номенклатур и словарей, и их невозможно перечислить заранее. - -Рассмотрим алгоритм работы реализованного сервиса по семантическому анализу запроса на естественном языке: - -\begin{enumerate} - \item Берем базу запросов из Facebook с размеченными сущностями из базы знаний Freebase; - \item Делаем маппинг сущностей базы знаний Freebase в сущности в Wikidata; - \item Подготавливаем данные; - \item Обрабатываем данные; - \item Сохраняем полученные результаты для выявления оптимальной стратегии поиска связанных сущностей; - \item Вычисляем точность алгоритмов по следующим параметрам: - \begin{enumerate} - \item Для каждого варианта представления строк; - \item Для разного числа результатов: 1, 3, 5, 10, 30, 50, 100. - \end{enumerate} -\end{enumerate} - -Варианты представления строк запросов: - -\begin{enumerate} - \item Переводим nls на русский язык. - \item Переводим nls с леммами на русский язык. - \item Переводим nls без стоп слов до первого не стоп слова на русский язык. - \item Переводим nls без стоп слов на русский язык. - \item Переводим nls на русском без стоп слов до первого не стоп слова на русский язык. - \item Переводим nls на русском без стоп слов на русский язык. - \item Добавляем nls с леммами. - \item Добавляем nls без стоп слов до первого не стоп слова. - \item Добавляем nls без стоп слов. - \item Добавляем nls на русском без стоп слов до первого не стоп слова. - \item Добавляем nls на русском без стоп слов. -\end{enumerate} - -В таблице~\ref{tab:wikidata_table} представлены результаты работы алгоритма поиска сущностей Wikidata в запросах на естественном языке. -В результате была реализована группа алгоритмов по определению сущностей wikidata в запросах на русском языке и определена точность реализованных алгоритмов. - -\begin{center} - \begin{longtable}{|p{0.3\textwidth}|c|c|c|c|c|c|c|} - \hline - & top1 & top3 & top5 & top10 & top30 & top50 & top100 \\ - \hline \endfirsthead - String & 20\% & 25\% & 27\% & 32\% & 36\% & 39\% & 45\% \\ - \hline - String lemmas & 29\% & 33\% & 36\% & 40\% & 43\% & 47\% & 51\% \\ - \hline - Cut start & 20\% & 23\% & 26\% & 31\% & 37\% & 40\% & 44\% \\ - \hline - Cut all & 20\% & 21\% & 24\% & 26\% & 35\% & 37\% & 42\% \\ - \hline - Cut start by lemmas & 23\% & 25\% & 27\% & 34\% & 40\% & 42\% & 46\% \\ - \hline - Cut all by lemmas & 17\% & 20\% & 22\% & 24\% & 29\% & 31\% & 45\% \\ - \hline - String lemmas processed & 14\% & 17\% & 19\% & 23\% & 27\% & 29\% & 33\% \\ - \hline - Cut start processed & 15\% & 20\% & 22\% & 26\% & 29\% & 32\% & 38\% \\ - \hline - Cut all processed & 12\% & 14\% & 16\% & 19\% & 22\% & 24\% & 28\% \\ - \hline - Cut start by lemmas ru processed & 10\% & 13\% & 15\% & 19\% & 22\% & 24\% & 26\% \\ - \hline - Cut all by lemmas ru processed & 9\% & 11\% & 13\% & 16\% & 19\% & 20\% & 24\% \\ - \hline - - \caption{Результаты работы алгоритма поиска сущностей Wikidata в запросах на естественном языке} - \label{tab:wikidata_table} - \end{longtable} -\end{center} - -\subsection{Анализ эмоционального состояния в зависимости от контекста пользователя} - -Сервис будет реализован при помощи API Microsoft Azure для распознавания лиц на фотографиях с указанием эмоций. -На вход подается кадр с камеры. -При помощи API на кадре определяется человек, его пол и возраст, а также вероятности наблюдения той или иной эмоции: -злости, сомнения, отвращения, страха, счастья, грусти и удивления. - -На основе информации о поле и возрасте зрителя определяется демографическая группа, к которой принадлежит пользователь. -Информация о демографической группе пользователя и его текущем эмоциональном состоянии позволяет подобрать рекомендуемые значения эмоционального состояния. -Для определения этих значений необходимо проведение соответствующих экспериментов с участием квалифицированных экспертов. -Предполагается, что нахождения зрителя в подобном состоянии позволит более эффективно демонстрировать рекламу. - -На основе текущего и желаемого эмоциональных состояний пользователя производится подбор рекламных роликов. -Ролики должны быть подобраны таким образом, чтобы приблизить текущее эмоциональное состояние пользователя к желаемому. -Оценка изменения эмоционального состояния для пользователей, принадлежащих к определенной демографической группе, -производится на основе статистических данных о результатах демонстрации данного ролика представителям данной демографической группы. -При холодном старте предполагается, что результат от демонстрации ролика совпадает с желаемым эмоциональным состоянием пользователя. - -\subsection{Подбор персонала в организацию} - -Сервис реализован в рамках системы управления компетенциями, так как в ней имеются возможности профилирования организаций и работников, -а также формализованы компетенции работников. -Backend реализован с использованием Java и фреймворка Spring\footnote{https://spring.io/}. Интерфейс сервиса представлен на рисунке~\ref{fig:cmpt_1}. - -% cmpt_1 - -\begin{figure}[htb] - \centering - \includegraphics[width=\textwidth, keepaspectratio]{inc/img/cmpt_1} - \caption{Интерфейс настройки предпочтений организации} - \label{fig:cmpt_1} -\end{figure} - -Организация представлена в системе в виде профиля, содержащего информацию о ней, а также компетенции, которыми организация владеет. -Компетенция представляет собой совокупность навыка и уровня владения. -Профили работников также содержат информацию о работнике и его профессиональные компетенции. -Помимо этого, профиль работника содержит информацию о профессиональном опыте, которая используется при подборе персонала. - -Подбор персонала происходит на основе обязательных и дополнительных требований к компетенциям работников, а также дополнительных критериев, таких как образование и опыт работы. -Данные предпочтения можно задавать перед поиском, при этом для удобства пользования они заполняются автоматически с возможностью изменения -на основе данных о компетенциях организации и истории пользования сервисом. -Так, в обязательные требования заносятся компетенции, в которых у организации наивысший профессиональный уровень владения. -Остальные компетенции заносятся в дополнительные требования. Для быстрого добавления требований предоставляется список компетенций, смежных тем, -которыми владеет организация. Дополнительные критерии отбора показываются в том порядке, в каком они чаще всего указываются при подборе персонала. -Порядок критериев учитывается в дальнейшем при ранжировании найденных работников. -При повторном использовании сервиса есть возможность скопировать предпочтения, которые были заданы в предыдущий раз. - -При подборе персонала происходит отсев профилей работников, содержащихся в системе, и ранжировка оставшихся работников. -Отсев выполняется на основе обязательных требованиев и критериев, указанных организацией. -Если работник не владеет на необходимом уровне хотя бы одной компетенцией, указанных в качестве обязательных, или не обладает обязательным критерием, -то он не будет показан в результатах. Работники, подходящие обязательным требованиям, ранжируются в соответствии с дополнительными требованиями и критериями в том порядке, -в каком они указаны в предпочтениях организации. -Пример вывода результата подбора персонала показан на рисунке~\ref{fig:cmpt_2}. - -\begin{figure}[htb] - \centering - \includegraphics[width=0.7\textwidth, keepaspectratio]{inc/img/cmpt_2} - \caption{Результат работы сервиса подбора персонала} - \label{fig:cmpt_2} -\end{figure} - -\section{Примеры работы прототипа и оценка точности используемых методов машинного обучения} - -%%% Local Variables: -%%% mode: latex -%%% TeX-master: "rpz" -%%% End: +\chapter{Реализация прототипа системы рекомендации сервисов умного города} +\label{cha:realization} + +\section{Архитектура прототипа} + +Архитектура платформы предоставления городских сервисов и информации представлена на рисунке~\ref{fig:architecture}. +Платформа состоит из двух основных частей: компоненты управления персональной информацией пользователей и компоненты предоставления информации и сервисов. +Профили пользователей хранятся в Postgresql\footnote{https://www.postgresql.org/} базе данных. +Profiles management and access component предоставляет внешнее API для читателей и поставщиков информации профилей и внутреннее API для компонентов пользовательского интерфейса. +Компонент Social Network profiles reader осуществляет периодическое чтение персональной информации из социальной сети и загружает изменения в базу данных +(компонентов загрузки информации из сторонних источников может быть множество). + +\begin{figure}[htb] + \centering + \includegraphics[width=\textwidth, keepaspectratio]{inc/img/architecture} + \caption{Архитектура платформы предоставления городских сервисов и информации} + \label{fig:architecture} +\end{figure} + +Информация о сервисах (их описания, используемые при поиске), также хранится в Postgresql базе данных и предоставляется провайдерами сервисов. +Запросы пользователей на естественном языке обрабатываются Service search component, где происходит структурирование запроса и поиск сервисов по трем составляющим: +сопоставление запроса и описания сервиса; поиск схожих профилей пользователей; коллаборативная фильтрация. +Затем отправляются запросы сервисам на получение информации (ответа на вопрос пользователя). +Информация возвращается пользователю, имеющему возможность оценить качество. +При выполнении запроса сервису может потребоваться персональная информация пользователя. +В этом случае сервис запрашивает права на чтение части профиля у пользователя, предоставляя описание в виде маски RDF графа. + +На данный момент разработаны прототипы компонентов Social network profile reader, Profile management and access component, Service register component... + + +\section{Программная реализация компонентов прототипа} + +\subsection{Сервис управления цифровыми личностями} + +Для визуализации большого объема информации о цифровых личностях был разработан web-сервис, при помощи которого можно обозревать цифровые личности, +просматривать параметры, предпочтения и выявленные сценарии использования сервисов умного города. +Web-сервис разбит на две части: backend-часть, которая отвечает за обработку данных о цифровых личностях и frontend-часть, +которая отвечает за визуализацию данных и взаимодействие пользователя с backend-частью web-сервиса. + +Backend-часть реализована на языке программирования Python\footnote{https://www.python.org/} и микрофреймворке Flask\footnote{http://flask.pocoo.org/}. +Информация о цифровых личностях хранится в ORM-подобном виде благодаря пакету SQLAlchemy\footnote{https://www.sqlalchemy.org/}. +Backend-часть сервиса агрегирует полученные данные о цифровых личностях, сервисах умного города и передает ее по определенным URL-адресам в виде JSON. +Также возможно, если это необходимо, изменение данных пользователем. + +Frontend-часть представлена на рисунках~\ref{fig:di_front_1} и~\ref{fig:di_front_2}. +Frontend был реализован на языке программирования Javascript и фреймворке Vue.js\footnote{https://vuejs.org/}, который позволяет создавать SPA-приложения. +Пользователь может просматривать информацию о цифровой личности (имя/фамилия, возраст, пол, выявленные при кластеризации признаки и т.д.), +цифровых сервисах умного города (их использование и географическую привязку взаимодействия), а также изменять информацию. + +\begin{figure}[htb] + \centering + \includegraphics[width=\textwidth, keepaspectratio]{inc/img/di_front_1} + \caption{Цифровая личность, ее признаки и использование сервисов умного города} + \label{fig:di_front_1} +\end{figure} + +\begin{figure}[htb!] + \centering + \includegraphics[width=\textwidth, keepaspectratio]{inc/img/di_front_2} + \caption{Частота использования сервисов умного города цифровой личностью} + \label{fig:di_front_2} +\end{figure} + +\subsection{Кластерный анализ} + +\subsubsection*{\textbf{Генерация контекстов использования сервисов}} + +Для каждого из полученных после обработки профилей пользователей было сгенерировано по три контекста использования сервисов, +то есть при каком контексте данный пользователей воспользовался каким-либо сервисом. В результате было получено 48399 контекстов. + +Каждый контекст содержал информацию о: + +\begin{enumerate} + \item Месте, в котором использовался конкретный сервис: на учебе/на работе, у метро, у светофора, на остановке, дома, на даче, в другом месте; + \item Времени, когда использовался определенный сервис: утром, днем, вечером, ночью; + \item Дне недели, когда использовался конкретный сервис: выходной или будний день. +\end{enumerate} + +Время и день недели генерировались случайным образом. +Местоположение генерировалось с помощью эвристики, учитывающей время, день недели, образование и наличие работы. + +Каждый контекст использования сервисов имеет свой id, а также id профиля пользователя, к которому привязан данный контекст. +В листинге~\ref{lst:context_example} представлен пример контекста. + +\inputminted[frame=lines, linenos, breaklines]{js}{../src/context_example.json} +\begin{listing}[H] + \caption{Пример контекста использования сервиса} + \label{lst:context_example} +\end{listing} + +\subsubsection*{\textbf{Предсказание использования сервисов}} + +Для решения проблемы ``холодного старта'' для каждого сервиса была проведена оценка корреляции по каждому из следующих признаков пользователя: +\emph{высокий доход, наличие автомобиля, наличие прав, наличие велосипеда, наличие мотоцикла, наличие самоката, наличие детей, +наличие гражданства, статус: школьник, студент, работающий; наличие инвалидности, наличие инвалидной коляски, наличие питомца, +малый возраст, большой возраст, пол, отношение к курению, отношение к алкоголю, ночь, дома, на работе, на учёбе, в метро, на остановке, на светофоре, на даче, выходной}. + +В результате была получена матрица $W$ (листинг~\ref{lst:mat_service_features}), размером $N_s \times N_f$, где $N_s$~---~количество сервисов, $N_f$~---~количество признаков пользователя. + +\inputminted[frame=lines, linenos, breaklines]{python}{../src/mat_service_feature.py} +\begin{listing}[H] + \caption{Матрица соотношения сервисов и признаков пользователей} + \label{lst:mat_service_features} +\end{listing} + +Похожая матрица составлялась для контекстов пользователей, +в результате чего была получена матрица $X$ (листинг~\ref{lst:mat_context_features}), размером $N \times N_f$, где $N$~---~количество контекстов пользователей, $N_f$~---~количество признаков пользователя. + +% mat_context_feature.py + +\inputminted[frame=lines, linenos, breaklines]{python}{../src/mat_context_feature.py} +\begin{listing}[H] + \caption{Матрица соотношения контекстов и признаков пользователей} + \label{lst:mat_context_features} +\end{listing} + +Полученные матрицы и перемножались так, чтобы получилась матрица кол-во контекстов пользователей $\times$ количество сервисов, +где отдельное значение тем больше, чем больше соответствующий сервис мог быть использован при соответствующем контексте пользователя. + +Идея дальнейших действий основана на логистической регрессии, многоклассовый вариант которой производит предсказания по формуле~\ref{eq:multiclass_logical_regression}: + +\begin{equation} + \label{eq:multiclass_logical_regression} + \begin{aligned} + p_i &= \sigma (WX_i + b), \text{где} \\ + \sigma(z) &= \frac{exp(z_j)}{\sum^K_{k=1} exp(z_k)}, z = (z_1, z_2, ..., z_K), + \end{aligned} +\end{equation} + +при этом выражение $WX + b$ отражает уверенность классификатора в принадлежности тому или иному классу, +функция $\sigma(z)$ приводит эти уверенности в диапазон $[0 \ldots 1]$ так, что сумма результатов равна единице. + +При оценке матрицы $W$ учитывались степени влияния признаков относительно друг друга, но абсолютные значения неизвестны. +Поэтому для получения показателей, характеризующих вероятность использования при определенном контексте определенного сервиса матрица умножалась на коэффициент $k$, +подобранный так, чтобы итоговые показатели могли содержать один-три сервиса со значительной уверенностью. + +Таким образом, уверенности в том, что в $i$-том контексте можно использовать конкретные сервисы вычислялись по формуле $p_i = \sigma(kWX_i + b)$. +Вектор $b$ подбирался таким образом, чтобы каждый из сервисов в среднем рекомендовался с одинаковой уверенностью $\frac{1}{N_s}$, +путем математической оптимизации, представленной в формуле~\ref{eq:multiclass_optimization}. + +\begin{equation} + \label{eq:multiclass_optimization} + b = arg \; min || \big( \frac{1}{N} \sum^N_{j=1} p_j \big) - \frac{1}{N_s} || +\end{equation} + +\subsubsection*{\textbf{Кластеризация}} + +Кластеризация (кластерный анализ)~---~типичная задача статистического анализа данных: задача обнаружения и разбиения множества объектов одной природы на группы, +называемые кластерами, так, чтобы объекты одной группы обладали похожим свойством. +Под ``свойством'' понимается близость объектов друг к другу относительно выбранной метрики. + +Цели кластеризации: + +\begin{enumerate} + \item упростить дальнейшую обработку данных, разбить множество объектов на группы схожих объектов чтобы работать с каждой группой в отдельности; + \item выделить нетипичные объекты, которые не подходят ни к одному из кластеров; + \item разработать типологии или классификации объектов; + \item исследовать концептуальные схемы группировки объектов. +\end{enumerate} + +Основная задача~---~кластеризовать полученные контексты использования определенных сервисов конкретными пользователями. +В качестве переменных, по которым будут оцениваться объекты в выборке использовались векторы уверенностей по каждому сервису. +В качестве метода определения меры сходства между объектами было выбрано евклидово расстояние $R(x, y) = \{\sum_i (x_i - y_i)^2\}^{1/2}$, +которое попросту является геометрическим расстоянием в многомерном пространстве. + +В качестве метода кластерного анализа было решено использовать метод К-средних, реализованный в библиотеке scikit-learn\footnote{https://scikit-learn.org/}, +в которой реализовано большое количество алгоритмов машинного обучения. +По сравнению с другими методами метод К-средних является хорошо изученным, имеет приближение, +позволяющее обрабатывать огромное количество примеров (48399 контекстов оказались проблемой для, например, агломеративной кластеризации), +а также позволяет контролировать количество кластеров. + +Кластеризация методом K-средних начинается с выбора k случайно расположенных центроидов (точек, представляющих центр кластера). +Каждому элементу назначается ближайший центроид, евклидово расстояние до которого минимально. +После того как назначение выполнено, каждый центроид перемещается в точку, рассчитываемую как среднее по всем приписанным к нему элементам. +Затем назначение выполняется снова. Эта процедура повторяется до тех пор, пока назначения не прекратят изменяться. + +Существует модификация данного метода под названием Mini-Batch k-Means\footnote{https://www.eecs.tufts.edu/~dsculley/papers/fastkmeans.pdf}. +Основная идея данной модификации заключается в том, что на каждой итерации вместо полного прохода по данным мы работаем с мини-батчами~---~небольшими подмножествами данных. +Чтобы уменьшить влияние шума, создаваемого таким образом, на втором этапе положения кластера заменяются на , где предыдущее положение кластера,~---~центроид точек кластера +(то, на что заменяется положение кластера в оригинальном алгоритме), а обратно пропорционально количеству точек, которое участвовало в вычислении центроидов для данного кластера. + +Для визуализации результата кластеризации получившиеся кластеры были спроецированы на плоскость с помощью алгоритма t-SNE, реализованного в библиотеке openTSNE\footnote{https://github.com/pavlin-policar/openTSNE}, +который является техникой нелинейного снижения размерности, хорошо подходящей для вложения данных высокой размерности для визуализации +в пространство низкой размерности (двух- или трехмерное). Результат работы алгоритма представлен на рисунке~\ref{fig:clusterization_result}: + +\begin{figure}[htb] + \centering + \includegraphics[width=\textwidth, keepaspectratio]{inc/img/clusterization_result} + \caption{Результат кластеризации} + \label{fig:clusterization_result} +\end{figure} + +Для каждого получившегося кластера были посчитаны средние значения уверенностей при определенном контексте использования по каждому из сервисов. +В результате были получены следующие предполагаемые сценарии использования сервисов при определенном контексте (см. таблицу~\ref{tab:scenario_table}). + +\begin{center} + \begin{longtable}{|p{0.3\textwidth}|p{0.3\textwidth}|p{0.3\textwidth}|} + \hline + Сценарий & Используемый сервис & Оценка уверенности \\ + \hline \endfirsthead + + \multirow{3}{0.3\textwidth}{\textbf{Сценарий поиска досуга в городе}} & сервис общественных бассейнов города & 0.1535 \\ \cline{2-3} + & сервис каршеринга & 0.1304 \\ \cline{2-3} + & сервис танцевальных студий города & 0.1233 \\ + \hline + + \multirow{3}{0.3\textwidth}{\textbf{Сценарий поиска ближайших заведений и мероприятий в городе}} & сервис ближайших ночных общественных заведений & 0.5782 \\ \cline{2-3} + & сервис ближайших мероприятий и фестивалей в городе & 0.2335 \\ \cline{2-3} + & сервис покупки билетов на концерт & 0.1263 \\ + \hline + + \multirow{3}{0.3\textwidth}{\textbf{Сценарий использования сервисов для людей с ОФВ}} & сервис ближайших травмпунктов & 0.1977 \\ \cline{2-3} + & сервис заказа такси для перевозки инвалида & 0.1611 \\ \cline{2-3} + & сервис маршрутов с возможность перемещения инвалидных колясок & 0.1277 \\ + \hline + + \multirow{3}{0.3\textwidth}{\textbf{Сценарий поиска ближайших заправок и цен на топливо}} & сервис цен на топливо & 0.4452 \\ \cline{2-3} + & сервис ближайших заправок & 0.3040 \\ \cline{2-3} + & сервис проката велосипедов & 0.0757 \\ + \hline + + \multirow{3}{0.3\textwidth}{\textbf{Сценарий вызова \newline экстренных служб}} & сервис вызова скорой помощи & 0.5050 \\ \cline{2-3} + & сервис ближайших постов полиции & 0.3193 \\ \cline{2-3} + & сервис ближайших аптек города & 0.0139 \\ + \hline + + \multirow{3}{0.3\textwidth}{\textbf{Сценарий поиска мест для курения}} & сервис поиска мест для курения & 0.8388 \\ \cline{2-3} + & сервис поиска акций на абонементы в спортзал & 0.0369 \\ \cline{2-3} + & сервис поиска кафе и ресторанов с бизнес-ланчами & 0.0099 \\ + \hline + + \multirow{3}{0.3\textwidth}{\textbf{Сценарий поиска кинотеатров и театров}} & сервис кинотеатров IMAX & 0.3491 \\ \cline{2-3} + & сервис ближайших кинотеатров & 0.3296 \\ \cline{2-3} + & сервис театров города & 0.1545 \\ + \hline + + \multirow{3}{0.3\textwidth}{\textbf{Сценарий использования сервисов для спортсменов}} & сервис поиска тренера по конкретному виду спорта & 0.4287 \\ \cline{2-3} + & сервис спортивных и тренажерных залов города & 0.3209 \\ \cline{2-3} + & сервис поиска акций на абонементы в спортзал & 0.1745 \\ + \hline + + \multirow{3}{0.3\textwidth}{\textbf{Сценарий поиска тренажерного зала/тренера}} & сервис поиска акций на абонементы в спортзал & 0.4156 \\ \cline{2-3} + & сервис поиска тренера по конкретному виду спорта & 0.4240 \\ \cline{2-3} + & сервис поиска мест для курения & 0.0830 \\ + \hline + + \multirow{3}{0.3\textwidth}{\textbf{\small Сценарий использования сервисов для пожилых людей}} & сервис ближайших аптек города & 0.8260 \\ \cline{2-3} + & сервис театров города & 0.0311 \\ \cline{2-3} + & сервис общественных бассейнов города & 0.0153 \\ + \hline + + \multirow{3}{0.3\textwidth}{\textbf{Сценарий поиска досуга по предпочтениям}} & сервис поиска заведений по конкретной кухне & 0.2839 \\ \cline{2-3} + & сервис концертов в городе & 0.2778 \\ \cline{2-3} + & сервис театров города & 0.1590 \\ + \hline + + \multirow{3}{0.3\textwidth}{\textbf{Сценарий способов передвижения для пешего пользователя}} & сервис заказа такси & 0.1533 \\ \cline{2-3} + & сервис ближайших остановок общественного транспорта & 0.1510 \\ \cline{2-3} + & сервис ближайших станций метро & 0.1390 \\ + \hline + + \multirow{3}{0.3\textwidth}{\textbf{Сценарий оплаты услуг автомобилиста}} & сервис оплаты парковки & 0.2628 \\ \cline{2-3} + & сервис оплаты штрафов & 0.2174 \\ \cline{2-3} + & сервис проката автомобилей & 0.2009 \\ + \hline + + \multirow{3}{0.3\textwidth}{\textbf{Сценарий поиска кратчайших маршрутов для автомобиля}} & сервис построения кратчайших маршрутов для автомобиля & 0.6842 \\ \cline{2-3} + & сервис поиска платных парковок в городе & 0.0993 \\ \cline{2-3} + & сервис поиска заведений по конкретной кухне & 0.0834 \\ + \hline + + \multirow{3}{0.3\textwidth}{\textbf{Сценарий поиска акций и выгодных предложений}} & сервис кинотеатров с самыми низкими ценами & 0.3630 \\ \cline{2-3} + & сервис ресторанов и кафе с выгодными акциями & 0.2591 \\ \cline{2-3} + & сервис выставок в городе & 0.0400 \\ + \hline + + \multirow{3}{0.3\textwidth}{\textbf{Сценарий поиска средств передвижения при отсутствии прав и тс}} & сервис проката велосипедов & 0.2275 \\ \cline{2-3} + & сервис проката самокатов & 0.2171 \\ \cline{2-3} + & сервис поиска попутчиков в городе & 0.2053 \\ + \hline + + \multirow{3}{0.3\textwidth}{\textbf{Сценарий поиска бесплатных парковок и ближайших заправок}} & сервис бесплатных парковок в городе & 0.8836 \\ \cline{2-3} + & сервис ближайших заправок & 0.0650 \\ \cline{2-3} + & сервис маршрутов для велосипедистов в городе & 0.0133 \\ + \hline + + \multirow{3}{0.3\textwidth}{\textbf{Сценарий поиска заведений питания}} & сервис поиска кафе и ресторанов с бизнес-ланчами & 0.4233 \\ \cline{2-3} + & сервис поиска заведений с вегетарианской кухней & 0.1046 \\ \cline{2-3} + & сервис ресторанов и кафе с выгодными акциями & 0.0908 \\ + \hline + + \multirow{3}{0.3\textwidth}{\textbf{Сценарий поиска развлечений для туристов/выходного дня}} & сервис поиска достопримечательностей в городе & 0.0319 \\ \cline{2-3} + & сервис построения живописных маршрутов & 0.0317 \\ \cline{2-3} + & сервис выставок в городе & 0.0768 \\ + \hline + + \multirow{3}{0.3\textwidth}{\textbf{Сценарий использования сервисов в позднее время суток}} & сервис график разведения мостов & 0.5464 \\ \cline{2-3} + & сервис круглосуточных заведений питания & 0.1279 \\ \cline{2-3} + & сервис ближайших ночных заведений & 0.1086 \\ + \hline + + \caption{Сценарии использования сервисов при определенном контексте кластеров} + \label{tab:scenario_table} + \end{longtable} +\end{center} + +\subsection{Классификация} + +Классификация пользователей социальной сети VK.com была произведена на основе нейронных сетей. +На вход классификатору подается набор данных о цифровых личностях умного города. +Каждая цифровая личность обладает определенным набором характеристик, на основе которых можно произвести классификацию. +Вдобавок, для обучения нейронной модели были использованы данные кластерного анализа цифровых личностей, +на основании которых были выделены определенные группы пользователей. Таким образом, обучение нейронное модели можно характеризовать как обучение с учителем. + +Для реализации задач классификации был использован язык программирования Python. +Для работы с нейронными сетями были использованы открытое программное обеспечение Tensorflow\footnote{https://www.tensorflow.org/} и Keras\footnote{https://keras.io/}. +Обработка набора данных цифровых личностей реализована при помощи пакета Pandas\footnote{https://pandas.pydata.org/}. +Нейронная модель состоит из входного слоя, в котором задаются параметры цифровой личности, +два внутренних скрытых слоев размерностью 128 нейрона и выходной слой, который содержит результат классификации (размерность~---~20 нейронов). +Для внутренних слоев используется функция активации ReLU, для выходного~---~сигмоида. + +Обучение нейронной классификационной модели происходит на протяжении 20 эпох. +В результате точность предсказания на итоговой выборке составляет около 91.4\%, что является допустимым результатом. +Процесс обучения представлен на рисунке~\ref{fig:classification_nn_graph}. + +\begin{figure}[htb] + \centering + \includegraphics[width=\textwidth, keepaspectratio]{inc/img/classification_nn_graph} + \caption{Процесс обучения классифицирующей нейронной сети} + \label{fig:classification_nn_graph} +\end{figure} + +\subsection{Рекомендация сервисов} + +В рамках данной работы была создана модель рекомендации с учетом контекста (где каждый уникальный набор значений свойств контекста пользователя рассматривался как отдельный субъект). +Для обучения и тестирования модели исходный набор данных, содержащий 3.6 млн экземпляров оценок релевантности одного сервиса для одного пользователя, +был случайным образом разделены 90/10. +Результаты обучения представлены на рисунках~\ref{fig:recommendations_1} и~\ref{fig:recommendations_2}, изображающих зависимость среднеквадратической ошибки от различных параметров. +На оси абсцисс рисунка~\ref{fig:recommendations_1} изображено количество латентных факторов, разные графики показывают ошибку при разных коэффициентах регуляризации. +На оси абсцисс рисунка~\ref{fig:recommendations_2} изображен весовой коффциент, а разные графики показывают ошибку при разных добавочных коэффициентах. +Таком образом, были опробованы различные комбинации параметров моделей (количество латентных факторов, коэффициент регуляризации, добавочный вес и весовой коэффициент), +лучше результаты были получены с использованием следующих параметров: количества латентных факторов 75, коэффициента регуляризации 0.1, добавочным весом 0.1, +весовым коэффициентом 500. Обучение происходило до тех пор, пока функция потерь убывала, плюс дополнительно 10 итераций. +Для каждого набора параметров количество итераций не превосходило 50. +Слабое влияние добавочного коэффициента на результат можно объяснить малым количеством пропущенных оценок в обучающей выборке. + +\begin{figure}[htb] + \centering + \includegraphics[width=\textwidth, keepaspectratio]{inc/img/recommendations_1} + \caption{графики среднеквадратической ошибки рекомендации при различном количестве скрытых факторов (ось абсцисс) + и различных коэффициентах регуляризации при фиксированном значении весового коэффициента 500 и добавочного веса 0.1} + \label{fig:recommendations_1} +\end{figure} + +\begin{figure}[htb] + \centering + \includegraphics[width=\textwidth, keepaspectratio]{inc/img/recommendations_2} + \caption{графики среднеквадратической ошибки рекомендации при различных весовых коэффициентах (ось абсцисс) + и добавочных коэффициентов при фиксированном количестве латентных факторов 75 и коэффициента регуляризации 0.1} + \label{fig:recommendations_2} +\end{figure} + +\subsection{Семантический анализ запроса} + +Для успешной реализации выполнения пользовательского запроса на естественном языке в сервисах умного города требуется решить задачу семантического анализа запросов пользователя, +а именно~---~семантической связность групп токенов из пользовательского запроса на естественном языке и сущностей из онтологии. +Субъекты могут быть известны заранее и присутствовать в общих или специализированных базах знаний. +Они также могут быть созданы на основе открытых номенклатур и словарей, и их невозможно перечислить заранее. + +Рассмотрим алгоритм работы реализованного сервиса по семантическому анализу запроса на естественном языке: + +\begin{enumerate} + \item Берем базу запросов из Facebook с размеченными сущностями из базы знаний Freebase; + \item Делаем маппинг сущностей базы знаний Freebase в сущности в Wikidata; + \item Подготавливаем данные; + \item Обрабатываем данные; + \item Сохраняем полученные результаты для выявления оптимальной стратегии поиска связанных сущностей; + \item Вычисляем точность алгоритмов по следующим параметрам: + \begin{enumerate} + \item Для каждого варианта представления строк; + \item Для разного числа результатов: 1, 3, 5, 10, 30, 50, 100. + \end{enumerate} +\end{enumerate} + +Варианты представления строк запросов: + +\begin{enumerate} + \item Переводим nls на русский язык. + \item Переводим nls с леммами на русский язык. + \item Переводим nls без стоп слов до первого не стоп слова на русский язык. + \item Переводим nls без стоп слов на русский язык. + \item Переводим nls на русском без стоп слов до первого не стоп слова на русский язык. + \item Переводим nls на русском без стоп слов на русский язык. + \item Добавляем nls с леммами. + \item Добавляем nls без стоп слов до первого не стоп слова. + \item Добавляем nls без стоп слов. + \item Добавляем nls на русском без стоп слов до первого не стоп слова. + \item Добавляем nls на русском без стоп слов. +\end{enumerate} + +В таблице~\ref{tab:wikidata_table} представлены результаты работы алгоритма поиска сущностей Wikidata в запросах на естественном языке. +В результате была реализована группа алгоритмов по определению сущностей wikidata в запросах на русском языке и определена точность реализованных алгоритмов. + +\begin{center} + \begin{longtable}{|p{0.3\textwidth}|c|c|c|c|c|c|c|} + \hline + & top1 & top3 & top5 & top10 & top30 & top50 & top100 \\ + \hline \endfirsthead + String & 20\% & 25\% & 27\% & 32\% & 36\% & 39\% & 45\% \\ + \hline + String lemmas & 29\% & 33\% & 36\% & 40\% & 43\% & 47\% & 51\% \\ + \hline + Cut start & 20\% & 23\% & 26\% & 31\% & 37\% & 40\% & 44\% \\ + \hline + Cut all & 20\% & 21\% & 24\% & 26\% & 35\% & 37\% & 42\% \\ + \hline + Cut start by lemmas & 23\% & 25\% & 27\% & 34\% & 40\% & 42\% & 46\% \\ + \hline + Cut all by lemmas & 17\% & 20\% & 22\% & 24\% & 29\% & 31\% & 45\% \\ + \hline + String lemmas processed & 14\% & 17\% & 19\% & 23\% & 27\% & 29\% & 33\% \\ + \hline + Cut start processed & 15\% & 20\% & 22\% & 26\% & 29\% & 32\% & 38\% \\ + \hline + Cut all processed & 12\% & 14\% & 16\% & 19\% & 22\% & 24\% & 28\% \\ + \hline + Cut start by lemmas ru processed & 10\% & 13\% & 15\% & 19\% & 22\% & 24\% & 26\% \\ + \hline + Cut all by lemmas ru processed & 9\% & 11\% & 13\% & 16\% & 19\% & 20\% & 24\% \\ + \hline + + \caption{Результаты работы алгоритма поиска сущностей Wikidata в запросах на естественном языке} + \label{tab:wikidata_table} + \end{longtable} +\end{center} + +\subsection{Анализ эмоционального состояния в зависимости от контекста пользователя} + +Сервис будет реализован при помощи API Microsoft Azure для распознавания лиц на фотографиях с указанием эмоций. +На вход подается кадр с камеры. +При помощи API на кадре определяется человек, его пол и возраст, а также вероятности наблюдения той или иной эмоции: +злости, сомнения, отвращения, страха, счастья, грусти и удивления. + +На основе информации о поле и возрасте зрителя определяется демографическая группа, к которой принадлежит пользователь. +Информация о демографической группе пользователя и его текущем эмоциональном состоянии позволяет подобрать рекомендуемые значения эмоционального состояния. +Для определения этих значений необходимо проведение соответствующих экспериментов с участием квалифицированных экспертов. +Предполагается, что нахождения зрителя в подобном состоянии позволит более эффективно демонстрировать рекламу. + +На основе текущего и желаемого эмоциональных состояний пользователя производится подбор рекламных роликов. +Ролики должны быть подобраны таким образом, чтобы приблизить текущее эмоциональное состояние пользователя к желаемому. +Оценка изменения эмоционального состояния для пользователей, принадлежащих к определенной демографической группе, +производится на основе статистических данных о результатах демонстрации данного ролика представителям данной демографической группы. +При холодном старте предполагается, что результат от демонстрации ролика совпадает с желаемым эмоциональным состоянием пользователя. + +\subsection{Подбор персонала в организацию} + +Сервис реализован в рамках системы управления компетенциями, так как в ней имеются возможности профилирования организаций и работников, +а также формализованы компетенции работников. +Backend реализован с использованием Java и фреймворка Spring\footnote{https://spring.io/}. Интерфейс сервиса представлен на рисунке~\ref{fig:cmpt_1}. + +% cmpt_1 + +\begin{figure}[htb] + \centering + \includegraphics[width=\textwidth, keepaspectratio]{inc/img/cmpt_1} + \caption{Интерфейс настройки предпочтений организации} + \label{fig:cmpt_1} +\end{figure} + +Организация представлена в системе в виде профиля, содержащего информацию о ней, а также компетенции, которыми организация владеет. +Компетенция представляет собой совокупность навыка и уровня владения. +Профили работников также содержат информацию о работнике и его профессиональные компетенции. +Помимо этого, профиль работника содержит информацию о профессиональном опыте, которая используется при подборе персонала. + +Подбор персонала происходит на основе обязательных и дополнительных требований к компетенциям работников, а также дополнительных критериев, таких как образование и опыт работы. +Данные предпочтения можно задавать перед поиском, при этом для удобства пользования они заполняются автоматически с возможностью изменения +на основе данных о компетенциях организации и истории пользования сервисом. +Так, в обязательные требования заносятся компетенции, в которых у организации наивысший профессиональный уровень владения. +Остальные компетенции заносятся в дополнительные требования. Для быстрого добавления требований предоставляется список компетенций, смежных тем, +которыми владеет организация. Дополнительные критерии отбора показываются в том порядке, в каком они чаще всего указываются при подборе персонала. +Порядок критериев учитывается в дальнейшем при ранжировании найденных работников. +При повторном использовании сервиса есть возможность скопировать предпочтения, которые были заданы в предыдущий раз. + +При подборе персонала происходит отсев профилей работников, содержащихся в системе, и ранжировка оставшихся работников. +Отсев выполняется на основе обязательных требованиев и критериев, указанных организацией. +Если работник не владеет на необходимом уровне хотя бы одной компетенцией, указанных в качестве обязательных, или не обладает обязательным критерием, +то он не будет показан в результатах. Работники, подходящие обязательным требованиям, ранжируются в соответствии с дополнительными требованиями и критериями в том порядке, +в каком они указаны в предпочтениях организации. +Таким образом среди работников, прошедших отсев, первыми будут показаны те из них, которые обладают критерием, указанным организацией в качестве приоритетного. +За ними будут следовать работники, которые прошли отсев, но не обладают этим критерием, ранжированные между собой аналогичным способом. +Пример вывода результата подбора персонала показан на рисунке~\ref{fig:cmpt_2}. + +\begin{figure}[htb] + \centering + \includegraphics[width=0.7\textwidth, keepaspectratio]{inc/img/cmpt_2} + \caption{Результат работы сервиса подбора персонала} + \label{fig:cmpt_2} +\end{figure} + +Страница результатов подбора персонала содержит требования и критерии, на основе которых проводился отбор, а также ранжированный список работников. +Для каждого работника указывается ссылка на его профиль, те его компетенции и критерии, которые учитывались при отборе и ранжировании, и стоимость его работы. +Таким образом, есть возможность оценить подобранных работников и сравнить их между собой. + +Для оценки быстродействия сервиса было подсчитано среднее время, затрачиваемое на подбор персонала. +При наличии в системе 50 профилей работников, среди которых производится отбор, сервису необходимо менее секунды для обработки данных и формирования результатов. +При добавлении в систему 50 000 сгенерированных профилей, каждый из которых обладал 10-15 случайными компетенциями, среднее время работы сервиса составило чуть более 5 секунд. +Таким образом, данный сервис можно применять в крупных системах с большим количеством пользователей без серьёзных временных затрат. + +\section{Примеры работы прототипа и оценка точности используемых методов машинного обучения} + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: "rpz" +%%% End: