BackEnd
Основной модуль - Java Sptring-boot
База данных - Postgresql
Модуль оценки семантического сходства - Python/Flask
Общая структура
- Иерархическая структура компании по людям
- Иерарихическая структура компании по департаментам
- Статусы обращения и сроки выполнения
- Список задач. Можно получить как отдельно по пользователю, так и по департаменту/отделу
- Модель NodeEntity динамического дерева-решений для классификаци обращения
- Модель кластеризации обращений для отправки похожий обращений одному испольнителю
- Стастистика и KPI-скоринг для человека и отдела
Концепция модели бота-классификатора
В основе приложения лежит расширяемое дерево решений для классификации заявки по таргетируемому сервису. Для автоматического дополнения дерева решений новыми вершинами применяется алгоритм взвешенной оценки значимости вершин для отображения.
Алгоритм добавления новых вершин:
Если пользователь не нашел в предложенном списке вариантов свой, он вводит информацию в свободном виде Получаем список кастомизированных веток дерева для текущего узла Отправляем в модуль семантического анализа текста введенный пользователем текст и список текстов из кастомизированных вершин Если она из вершин получает хороший 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'}
ML
CLINC150.json датасет CLINC150, по нашему мнению максимально приближен к нашей задаче по размеру и количеству классов.
deeppavlov.ipynb обучали на Google Colab для скорости. Соответственно данной моделью предсказываем отдел и исполнителя. Также прогнозируем время на работу по данной проблеме.
deeppavlov.ipynb из датасета при помощи Sentence Transformer формируем ембендинги, из в дальнейшем кластеризуем с помошью UMAP и сохраняем модель класстеризации. Те кластера которые появились при новом датасте считаем новыми.
bot.ipynb телеграмм бот визуализующий работу системы.