По данным Федерального реестра инвалидов на июль 2021 года численность лиц с ограниченными возможностями здоровья в России составляла 12,5 млн. Это составляет 8.5% от всего населения России. Доля детей-инвалидов в общей численности инвалидов составляла 5,9% (722 тыс.). Таким образом, почти каждый 12-й человек имеет инвалидность.

В конце 2020 года ООН заявила, что число людей с инвалидностью резко возрастает. По их данным более 1 миллиарда людей (около 15% населения мира) имеют какую-либо форму инвалидности.

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

Развитие информационных технологий может помочь людям с ограниченными возможностями здоровья в некоторых сферах их жизни. Думаю, особенно это касается тех, у кого имеются физические и сенсорные нарушения. Поэтому я расскажу о своём проекте, который планирую в будущем реализовать. И моя будущая кандидатская диссертация будет посвящена, скорее всего, реализации этого проекта. Раннее он был представлен в III Всероссийском сетевом конкурсе студенческих проектов «Профессиональное завтра» с участием студентов с инвалидностью в номинации «Моё полезное изобретение». Этот проект поделил 1 место с проектом Кузнецова Арсения Дмитриевича «Единое приложение для граждан с инвалидностью «Волот». Спустя некоторое время я немного доработал свой проект. Далее описывается сам проект и некоторые фрагменты программного кода на Python и JavaScript (Node.js). В дальнейшем код будет дополняться и модифицироваться, чтобы соответствовать требованиям по организации и оформлению программного исходного кода.

Проект: программный комплекс «Чат-бот для людей с ограниченными возможностями здоровья на основе технологий искусственного интеллекта с дополнительными возможностями роботизированной автоматизации процессов и low-code подхода к проектированию» (или сокращённо «Интеллектуальный онлайн-помощник»)

Интерфейс интеллектуального онлайн-помощника будет реализован в форме чат-бота. Обоснование выбора технологии «чат-бот» (технологии виртуального общения) является то, что самый популярным способом взаимодействия является текстовое сообщение. Это следствие того, что самая востребованная функция смартфонов уже третий год подряд – это мессенджеры. К тому же, в исследовании «Медиапотребление в России – 2020» от компании «Deloitte» 42% респондентов указали, что стали пользоваться мессенджерами чаще, чем в предыдущем году. «К 2022 году 70% белых воротничков будут ежедневно взаимодействовать с диалоговыми платформами» – спрогнозировала Gartner в своём исследовании 2019 года.

Конечный продукт

Общаться с чат-ботом можно будет через веб-браузер и через смартфон. Конечный продукт будет реализован в виде веб-приложения, мобильного приложения для Android и iOS.

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

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

Потенциальные потребители

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

Аналогичные продукты

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

В Facebook Message и Amazon Alexa чат-боты с помощью голосового управления могут оплатить заказ с предварительной проверкой баланса на счету. В Египте был создан чат-бот WASEL, с которым можно общаться через веб-браузер и Android-смартфоны. Он предназначен для людей с нарушением слуха, которые теперь могут одним кликом мыши вызвать экстренную помощь. Ещё WASEL способен интерпретировать языки жестов.

В отличие от аналогов, «Интеллектуальный онлайн-помощник» будет более универсальным, нацелено охватывать многие аспекты жизни собеседника. Однако, будут использованы информационные технологии, на которых основаны аналоги.

Общая информация

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

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

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

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

Извлечение общей информации о собеседнике

После создания пустого профиля собеседника чат-бот начнёт сбор информации о собеседнике, которые будет извлекаться из сообщений. Профиль будет пополняться всё время. Абсолютно все сообщения будут обрабатываться системами обработки естественного языка NLP (Natural Language Processing), распознавания речи, распознавания жестов и анализироваться семантическими моделям. Также опускается явная загрузка данных о себе в виде сообщений или документов, а также синхронизация со сторонними платформами, например, ГосУслуги, ВКонтакте.

Фрагмент кода на Pyhon класса NLP-конвейера с функцией приведения слов к нормальной форме:

import pymorphy2
import re
from itertools import chain
from functools import partial
from nltk.stem.snowball import EnglishStemmer

morph = pymorphy2.MorphAnalyzer(lang='ru')
Stemmer_eng = EnglishStemmer()

class MyPipelineNLP:
    TEXT = 0
    LIST_OF_TEXTS = 1
    LIST_OF_SENTENCES = 2
    LIST_OF_LIST_OF_WORDS = 3
    LIST_OF_LIST_OF_NORMAL_FORM_WORDS = 4

    def __init__(self, text, separator_regexp='\n|\\.',
                 replace_regexps_to_space=[
                     r'[\\]', r'[^а-яА-Яa-zA-Z\d]', r' {2,}'
                 ],
                 replace_specifics=[
                     (['ё'], 'е'),
                     (['«', '»', '—', '–', '-', '‑', '/', '\xa0', '_', '$', '%'], ' '),
                     ("[]\"", ''),
                     ("!?", '.')
                 ],
                 stop_words=[], show_info=True):
        self.text_original = text
        self.text = text
        self.stop_words = stop_words

        self.separator_regexp = separator_regexp
        self.replace_regexps_to_space = replace_regexps_to_space
        self.replace_specifics = replace_specifics

        self.show_info = show_info
        self.state = None
        if isinstance(self.text, str):
            self.state = MyPipelineNLP.TEXT
        elif isinstance(self.text, list):
            self.state = MyPipelineNLP.LIST_OF_TEXTS

        self.print_info(function_name='init')
    def get_normal_form_of_word(self, word):
        if re.match(r'^[а-яёА-ЯЁ]+$', word):
            return morph.parse(word)[0].normal_form
        elif re.match(r'^[a-zA-Z]+$', word):
            return Stemmer_eng.stem(word)
        else:
            return word
…
    def to_normal_form(self, progress_bar=lambda iterable: iterable):
        if self.state == MyPipelineNLP.LIST_OF_LIST_OF_WORDS:
            self.text = list(map(
                lambda sentence: list(map(
                    self.get_normal_form_of_word,
                    sentence
                )),
                progress_bar(self.text)
            ))
            self.state = MyPipelineNLP.LIST_OF_LIST_OF_NORMAL_FORM_WORDS
            self.print_info(function_name=self.to_normal_form.__name__)
        else:
            print('For to normal form state must be a LIST_OF_LIST_OF_WORDS')
…

Код на Python функции получения обученной семантической модели на корпусе текста с заданными гиперпараметрами:

def get_model(corpus, param):
    if param:
        model_ = gensim.models.Word2Vec(size=param['size'], min_count=param['min_count'], window=param['window'], negative=param['negative'], workers=param['workers'], sg=param['sg'], hs=param['hs'])
    else:
        return None
    model_.build_vocab(corpus, progress_per=1000)
    model_.train(corpus, total_examples=model_.corpus_count, epochs=30)
    model_.init_sims(replace=True)
    return model_    

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

Примеры характеристик профиля: ФИО, пол, дата рождения, место жительства,  адрес электронной почты, номер телефона, семейное положение, образование, работа, хобби, страхи, увлечения, образ жизни, домашнее животное, мечты, группа инвалидности, вид нозологии, некоторые данные из ИПРА (Индивидуальной Программы Реабилитации), принимаемые лекарства, рекомендации врачей и т. д.

Извлечение временной информации о собеседнике

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

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

Формирование модели поведения (паттернов поведения) собеседника и прогнозирование дальнейших сообщений

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

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

Определение тональности сообщений

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

Формирование намерений для собеседника

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

Код на JavaScript функции промежуточной обработки схожих тематик (запросов) относительно сообщения пользователя:

function get_answer_on_similarity_queries(client, similarity_queries, message_data, TextMessage){   
  if (similarity_queries == null || similarity_queries.length == 0) {
      setTimeout(send_message_with_unlock, delay_message, client, JSON.stringify({
      text: "Я не могу ответить на этот запрос. Спросите о чём-нибудь другом",
      isUser: false, 
      visible: true
    })); 
  } 
  else { 
    if (similarity_queries !=null && similarity_queries.length > 0 && similarity_queries[0].probability_ > 0.3){
      processing_queries_and_show_answer_from_db(client, similarity_queries, TextMessage);
    }
    else { 
      setTimeout(send_message_with_unlock, delay_message, client, JSON.stringify({
        text: "Я не могу ответить на этот запрос. Спросите о чём-нибудь другом",
        isUser: false,
        visible: true 
      }));                      
    }
  }
}

Использование RPA-системы

Для автоматизации рутинных процессов (заполнение формы на определённых сайтах, поиск, проверка и отправка информации во внешних информационных системах и т.д.) будут разработаны роботы RPA (Robotic Process Automation – роботизированная автоматизация процессов). Например, пользователю будет достаточно передать чат-боту необходимые документы, в которых содержатся данные, а роботы сами заполнят информацией форму на сайте. Также программные роботы будут работать с офисными документами: создания, заполнение, редактирование, анализ и др. В качестве RPA-системы будет использована платформа Lexema-RPA, разработанная компанией Lexema. Для специфических задач можно самостоятельно разработать роботов с помощью графического интерфейса в LexemaRPA-Studio.

Код на JavaScript функции ожидания выполнения задачи RPA-роботами:

wait_execute_task_from_vcode (this_, client, vcode_task, data_features, millisec_wait_cum=0) {
    if (millisec_wait_cum < client.max_delay_wait_answer){
      this_.db.one("select complete, success, attempts from execute_task where vcode = $1", vcode_task)
      .then(task => {
        if (task.complete) {
          console.log('TASK Complete!');
          if (task.success){
            console.log('Task completed successfully'); 
            this_.after_success(client, data_features);  
          }
          else if (task.attempts < 2) {
            millisec_wait_cum = 0; 
            console.log('Task completed unsuccessfully:', task, 'Waiting again');  
            this_.again_wait(client);
            this_.db.none("update execute_task set complete = $1 where vcode = $2", [false, vcode_task])
            .catch(function (error) {  
              this_.save_error_in_db_and_write_in_console(client, "wait_execute_task_from_vcode task.attempts < 2", error); 
            });  
            setTimeout(wait_execute_task_from_vcode, this_.delay_wait_answer, this_, 
                      client, vcode_task, millisec_wait_cum + this_.delay_wait_answer); 
          }
          else {
            console.log('Task completed unsuccessfully:', task, 'Waiting ended'); 
            this_.after_failure(client);
          }
        } else {
          console.log('TASK has NOT completed yet!', millisec_wait_cum / 1000, "sec."); 
          setTimeout(this_.wait_execute_task_from_vcode, this_.delay_wait_answer,
                    this_, client, vcode_task, millisec_wait_cum + this_.delay_wait_answer); 
        }
      }).catch(function (error) { 
        this_.save_error_in_db_and_write_in_console(client, "wait_execute_task_from_vcode select", error);
      });  
    }
    else {
      console.log('Task', vcode_task, 'takes too long. Waiting ended');  
      this.after_failure(client);       
    }
  }

Проектирование с помощью low-code подхода

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

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

Сопровождение, поддержка и развитие проекта

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

Локация

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

Автор проекта

Круглик Андрей Сергеевич, аспирант Уфимского государственного авиационного технического университета, сотрудник ООО «Лексема» (должность: инженер-программист), участник множества конкурсов и хакатонов. Особенность: ДЦП.

Если у вас есть какие-нибудь пожелания, комментарии, идеи, замечания, вопросы, советы по проекту и полезные материалы по аналогичным проектам, то оставляйте комментарии к посту или пишите мне на почту: kruglik.a.s@mail.ru.

Комментарии (1)


  1. YNK
    30.09.2021 12:50

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

    Буду следить за вашими успехами.