Software Journal:
Theory and Applications

Подать статью

Вход Регистрация

Подходы к созданию калькулятора с рукописным вводом

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

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

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

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

Существующие решения

В настоящее время существуют решения, предлагающие рукописный ввод формул, в некоторых случаях с последующим их вычислением:

– MyScript Calculator [1];

– Touch-Calculator [2];

– Mathematical Expression Recognition [3].

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

Реализация Touch-Calculator с рукописным вводом осуществляется для системы MacOS. Калькулятор имеет как интерфейс с «кнопочными» цифрами и математическими знаками, так и поле для рукописного ввода. Распознавание символа проходит за доли секунды, а ошибка классификации очень близка к нулю. Единственный недостаток данной реализации – распознавание происходит только по одному символу.

Классификация символов математического выражения в Mathematical Expression Recognition происходит некачественно (из 100 введенных символов 21 был распознан некорректно, то есть ошибка классификации достигает 21 %). Приложение осуществляет распознавание математического выражения без определения результата вычислений. Классификация выражения длиной в 10 символов происходит за 5–7 секунд. Существующая реализация обладает нестилизованным интерфейсом.

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

 

Существуют реализации для мобильных устройств, а также реализация для платформы MacOS. Самым востребованным решением является web-версия приложения: ее можно использовать для любой
из существующих операционных систем, как настольных, так и мобильных. У существующего web-приложения рукописного калькулятора можно выделить несколько недостатков: низкое качество классификации (≈79 %) долгое распознавание выражения (10 символов за 5 секунд) и он не производит вычисление введенного выражения. В результате исследования существующих решений предлагается рассмотреть альтернативную реализацию web-версии калькулятора с рукописным вводом, обеспечивающую распознавание математического выражение с минимальной ошибкой классификации и его вычисление.

Математическая модель решения

Решение задачи рукописного ввода для калькулятора осуществляется в несколько этапов:

– определение границ каждого из символов (сегментация изображения);

– определение класса каждого символа;

– посимвольный разбор получившейся строки и вычисление результата;

– обучение классификатора.

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

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

Для выполнения классификации рассмотрим следующие методы:

– мультиномиальная логистическая регрессия;

– наивный Байесовский классификатор;

– метод k ближайших соседей;

– метод Парзеновского окна;

– метод опорных векторов.

Мультиномиальная логистическая регрессия

Модель мультиномиальной логистической регрессии [4] предлагает гипотезу, которая оценивает вероятность P = ( y = k|x), где k = 1, …, K, то есть вероятность, с которой каждый объект исходного множества принадлежит каждому из K классов.

Далее определяются параметры модели. Подбор параметров в данной модели осуществляется
при помощи минимизации функции стоимости, которая описывается следующим образом:

.

При использовании мультиномиальной регрессии вероятность попадания объекта в класс определяется по формуле

Минимизация функции стоимости осуществляется с использованием градиента.

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

Наивный Байесовский классификатор

В основе модели Байесовского классификатора [5, 6] лежит теорема Байеса:

где P(k|x) – вероятность того, что объект х принадлежит классу k; P(x|k) – вероятность того, что объект х встречается среди объектов класса k; P(k) – безусловная вероятность встретить объект классаk, P(x) – безусловная вероятность объекта x.

Байесовский классификатор осуществляет классификацию с использованием оценки априорного максимума:

Вероятность P(x) для всех объектов одинакова, формула может быть записана в следующем виде:

Для вычисления класса объекта рассчитывается вероятность, с которой объект принадлежит классу k.

Объект представляется в виде набора признаков, вероятности которых условно не зависят друг
от друга:

.

Наивный Байесовский классификатор приобретает вид:

.

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

Безусловная вероятность того, что объект принадлежит классу k, оценивается по тренировочной выборке:

P (k) = Nk/N,

где Nk – количество объектов в тренировочной выборке, принадлежащих классу k; N – количество всех объектов в тренировочной выборке.

Оценка параметров Байесовской модели:

где wik – общее количество элементов с заданным значением признака i в классе k; a – параметр сглаживания, значение которого всегда больше 0, вводится, чтобы значение вероятности не принимало нулевое значение.

Окончательный вариант наивного Байесовского классификатора принимает следующий вид:

Используя данную формулу, определяется класс объекта. Параметр a подбирается экспериментальным путем.

Метод k ближайших соседей

В модели метода k ближайших соседей [7] выбирается количество ближайших соседей k, по которым будет происходить оценка классифицируемого объекта.

Значение k определяется по критерию скользящего контроля [8].

Все объекты тренировочной выборки располагаются в следующей последовательности:

где ρ(x, xin ) – функция расстояния.

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

Функция для классификации объекта выглядит следующим образом:

где wix– вес i-го объекта из упорядоченной по расстоянию тренировочной выборки для объекта x.

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

Метод Парзеновского окна

В основе модели метода Парзеновского окна [9] лежит модель метода k ближайших соседей. В методе ближайших соседей выбирается количество ближайших соседей k, по которым будет происходить оценка классифицируемого объекта. В данном алгоритме по подобной логике выбирается ширина Парзеновского окна.

Как и для параметра k из метода ближайших соседей, значение h определяется по критерию скользящего контроля [8].

Все объекты тренировочной выборки располагаются в последовательности, располагающейся по возрастанию расстояний до объектов:

ρ(x, xi1 ) ≤ ρ(x,xi2) ≤ ... ≤ ρ(x, xiN),

где ρ(x, xin ) – функция расстояния.

Функция для классификации объекта выглядит следующим образом:

где K – ядро.

Ядро может быть выбрано из следующего набора:

– ядро Епанечникова;

– квартическое;

– треугольное;

– гауссовское;

– прямоугольное.

Функция ядра подбирается экспериментальным путем. Используя полученную функцию и выбранную ширину окна, определяется класс объекта.

Метод опорных векторов

Модель метода опорных векторов [8] была разработана для бинарной классификации, однако существует и модификация для многоклассовой. Все объекты тренировочной выборки представлены в
k -мерном пространстве в виде вектора размерности k. Для разделения имеющихся объектов в пространстве используется так называемая плоскость классификатора, которая представляет собой гиперплоскость размерностью k1. Таких плоскостей можно провести бесконечно большое количество. В алгоритме опорных векторов лучшей разделяющей плоскостью считается плоскость, расстояние от которой до каждого из классов максимально. Пространство оказывается разделенным на участки, каждый из которых соответствует какому-либо классу.

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

Пусть X – пространство объектов тренировочной выборки, Y – пространство ответов. В случае, когда необходимо разделить линейно неразделимую выборку, все элементы этой выборки помещаются в пространство, размерность которого выше размерности заданной выборки, используется отображение φ:R(n)X. Это отображение выбирается таким образом, чтобы в новом пространстве выборка была линейно-разделимой. X является пространством со скалярным произведением. Разделяющая функция
в данном случае имеет следующий вид:

где коэффициенты i зависят от yi и от значения ядра. Ядром является любая функция вида K(x, y), являющаяся симметричной и неотрицательно определенной.

В данной статье рассматривается ядро вида:

Такое ядро называется радиальной базисной функцией (RBF).

Архитектура

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

Уровень представления

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

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

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

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

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

Уровень бизнес-логики

На уровне бизнес-логики происходят принятие запроса от пользователя на распознавание изображения или на редактирование выражения, сегментация полученного изображения, классификация символов, вычисление результата выражения, обучение классификатора, формирование ответа пользователю
с распознанным математическим выражением и результатом его вычисления. Также на данном уровне формируются запросы на получение данных из БД.

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

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

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

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

Модуль обучения алгоритма используется только в тех случаях, когда БД символов для обучения была изменена или дополнена. Модуль принимает запрос на обучение; формирует запрос в БД символов; получает данные из БД; используя полученные данные, обеспечивает обучение алгоритма; записывает результат в файл; отправляет уведомление контроллеру о том, что обучение окончено.

Уровень доступа к данным

На данном уровне обеспечивается работа шины работы с данными, которая является контроллером запросов к БД и ответов на них.

Уровень хранения данных

Содержит БД для обучения классификатора и сериализованный объект обученного классификатора.

Сценарии использования

Рассмотрим возможные сценарии использования приложения.

1. Распознавание пользователем выражения:

– заходит в приложение;

– видит поле для ввода выражения, кнопку «Вычислить значение выражения», кнопку «Очистить поле для ввода»;

– вводит математическое выражение в поле для ввода рукописного текста;

– нажимает кнопку «Вычислить значение выражения»;

– видит под кнопками текстовое поле с полученным после распознавания выражением и его результат.

2. Редактирование пользователем результата распознавания:

– заходит в приложение;

– видит поле для ввода выражения, кнопку «Вычислить значение выражения», кнопку «Очистить поле для ввода»;

– вводит математическое выражение в поле для ввода рукописного текста;

– нажимает кнопку «Вычислить значение выражения»;

– видит под кнопками текстовое поле с полученным после распознавания выражением и его результат;

– получает некорректное значение;

– наводит курсор на распознанное выражение и ставит его на место, где необходимо произвести редактирование;

– редактирует выражение и автоматически видит новый ответ.

3. Повторное распознавание выражения:

– пользователь находится в приложении;

– видит поле для ввода выражения с введенным на нем выражением, кнопку «Вычислить значение выражения», кнопку «Очистить поле для ввода», распознанное предыдущее выражение и его результат;

– нажимает кнопку «Очистить поле для ввода» и видит чистое поле для ввода;

– вводит математическое выражение в поле для ввода рукописного текста;

– нажимает кнопку «Вычислить значение выражения»;

– видит под кнопками текстовое поле с полученным после распознавания выражением и его результат.

Схема работы приложения, построенного на основании предложенной архитектуры и описанных сценариев использования, приведена на рисунке 2.

Полученные результаты

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

Мультиномиальная логистическая регрессия.

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

Результаты исследования зависимости точности классификации от выбора параметра представлены на рисунке 3.

Достигнута точность 92,54 % при значении параметра  = 0.01.

Наивный Байесовский классификатор.

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

Результаты исследования зависимости точности классификации от параметра сглаживания представлены на рисунке 4.

Достигнута точность 80,15 % при значении параметра сглаживания, равном 1 000.

Метод k ближайших соседей.

Данный классификатор зависит от количества соседей, по которым происходит классификация объекта.

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

Достигнута точность 97,17 % при количестве ближайших соседей равном 6.

Метод Парзеновского окна.

Данный классификатор зависит от ширины выбранного окна и от выбранного ядра.

Результаты исследования зависимости точности классификации от ширины окна и от вида ядра представлены на рисунке 6.

Достигнута точность 94,14 % при ширине окна h = 45, в качестве ядра было выбрано квадртическое ядро.

Метод опорных векторов с радиальным ядром функции (RBF)

Данный классификатор зависит от двух параметров – C и γ.

Результаты исследования зависимости точности классификации от параметров C и γ представлены на рисунке 7.

Достигнута точность 98,52 % при значении параметров C = 5 и γ= 0.05.

Подведем итоги исследования методов классификации. Результаты, полученные после подбора наилучших параметров для выборки MNIST, приведены в таблице 3.

Таким образом, наилучшее качество классификации на выборке MNIST показали методы k ближайших соседей и опорных векторов.

Метод k ближайших соседей требует хранения всей выборки, размер которой приблизительно равен 80 Мб, а также для каждого нового классифицируемого объекта требуется переобучение классификатора, что сказывается на скорости работы приложения. Для одного символа классификация занимает примерно 1 секунду, то есть время классификации выражения в 5 символов составит примерно 5 секунд.

Метод опорных векторов осуществляет классификацию символа приблизительно за 0,026 секунды и не требует хранения данных, только значение полученных параметров при обучении. Данный подход обладает одним недостатком: обучение длится около полутора часов. Однако обучение требуется только один раз, поэтому после выполнения обучения на сервере пользователи смогут получить результат распознавания выражения в 10 символов приблизительно за 0,2 секунды.

Заключение

Для решения задачи создания калькулятора с рукописным вводом в качестве классификатора выбран метод опорных векторов, так как при сравнительном анализе с другими методами он классифицировал объекты БД MNIST с максимальной среди исследованных методов точностью (98,52 %) и высокой скоростью классификации (приблизительно 10 символов за 0,2 секунды).

Решение задачи интерпретации полученного математического выражения решается достаточно просто – использование встроенной функции eval() в языке Python в случае вычислений на сервере или аналогичной функции в языке JavaScript в случае выполнения в браузере.

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

Литература

1. MyScript Calculator. 2015. URL: https://play.google.com/store/apps/details?id=com.visionobjects.
calculator&hl=ru (дата обращения: 10.12.2017).

2. Touch Calculator. 2015. URL: https://github.com/zhaorz/Touch-Calculator (дата обращения: 10.12.2017).

3. Mathematical Expression Recognition. 2018. URL: http://cat.prhlt.upv.es/mer/ (дата обращения: 25.12.2017).

4. Hosmer D.W., Lemeshow S. Applied Logistic Regression. Wiley-InterScience Publ., 2000, 375 p.

5. Флах П. Машинное обучение. Наука и искусство построения алгоритмов, которые извлекают знания из данных; [пер. с англ. А.А. Слинкина]. М.: ДМК Пресс, 2015. 402 с.

6. Мерков А. Распознавание образов. Введение в методы статистического обучения. М.: Едиториал УРСС, 2011. 256 с.

7. Коэльо Л.П., Ричарт В. Построение систем машинного обучения на языке Python; [пер. с англ. А.А. Слинкина]. М.: ДМК Пресс, 2016. 302 с.

8. The MNIST database. URL: http://yann.lecun.com/exdb/mnist/ (дата обращения: 28.12.2017)

9. Вьюгин В.В. Математические основы теории машинного обучения и прогнозирования. М.: Изд-во МЦНМО, 2013. 390 с.

Комментарии

Комментарии отсутствуют