Readme.md

Взаимодействие 2.0

Общее описание

Система реализована на основе микросервисной архитектуры.

FrontEnd

SPA на reactJS

BackEnd

Основной модуль - Java Sptring-boot

База данных - Postgresql

Модуль оценки семантического сходства - Python/Flask

Концепция

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

Алгоритм добавления новых вершин:

Если пользователь не нашел в предложенном списке вариантов свой, он вводит информацию в свободном виде Получаем список кастомизированных веток дерева для текущего узла Отправляем в модуль семантического анализа текста введенный пользователем текст и список текстов из кастомизированных вершин Если она из вершин получает хороший scoring семантического сходства, то данной вершине добавляется verifyCount Если совпадений не найдено, то вершина добавлется как новая кастомизированная вершина к узлу с verifyCount = 1 При повторном отображении в тесте вершины дерева решений все кастомизированные вершины с verifyCount > threshold (например 3) будут отображены наравне с обычными

Алгоритм сравнения семантического сходства:

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

https://github.com/akutuzov/webvectors/blob/master/preprocessing/rusvectores_tutorial.ipynb 

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

Для оценки сходства двух предложений предлагается две модели оценки сходства:

SimpleModel:

Поочередное сравнение всех слов предложений, каждое превышение порога семантического сходства слов повышает scoring балл(как среднее арифметическое), а каждое отсутствие слова в словаре понижает на небольшое константное значение

Damerau–Levenshtein sentence semantic distance:

Расстояние Дамерау — Левенштейна

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

Пример работы приложения

Запрос на REST сервис на python

GET http://localhost:5555/similarity

Request

  {
       "test": "Маркировка на шубе нечитаемая",
       "store": [
           "Маркировка нечитаемая",
           "Приобретен контрафактный товар",
           "Неполный перечень реквизитов продавца",
           "Механическое повреждение"
           ]
   }

Result

   {'rate': 0.375, 'optimal': 'маркировка_NOUN нечитаемый_ADJ', 'test': 'маркировка_NOUN на_ADP шуба_NOUN нечитаемый_ADJ'}
Конвейеры
0 успешных
0 с ошибкой