Использование машинного обучения для решения инцидентов. Практическое применение

25.02.20

Разработка - Тестирование QA

Продолжаю (и заканчиваю) тему с автоматическим решением инцидентов. Перейдем от теории к практике.

В данной статье я продолжу (ну и закончу) тему использования машинного обучения для автоматического (без участия сотрудника техподдержки) решения инцидентов.

Первая часть тут:

 

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

 

%%time

def predict(vectorizer, classifier, data):

    data_features = vectorizer.transform(data['Description'])

    predictions = classifier.predict(data_features)

    target = data['ShortDescription']

    evaluate_prediction(predictions, target)

 

def plot_confusion_matrix(cm, title='Confusion matrix', cmap=plt.cm.Blues):

    plt.imshow(cm, interpolation='nearest', cmap=cmap)

    plt.title(title)

    plt.colorbar()

    tick_marks = np.arange(len(my_tags))

    target_names = my_tags

    plt.xticks(tick_marks, target_names, rotation=90)

    plt.yticks(tick_marks, target_names)

    plt.ylabel('True label')

    plt.xlabel('Predicted label')

    fig = plt.gcf()

    fig.set_size_inches(18.5, 10.5)

    fig.savefig('test2png.png', dpi=100)

 

def evaluate_prediction(predictions, target, title="Confusion matrix"):

    print('accuracy %s' % accuracy_score(target, predictions))

    print('recall %s' % recall_score(target,predictions, average='micro'))

    cm = confusion_matrix(target, predictions)   

    cm_normalized = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]

    plot_confusion_matrix(cm_normalized, title + ' Normalized')

 

 

 

from sklearn import linear_model

from sklearn.externals import joblib

#Разбиваем наш df на две части, тренировочную и тестовую.

train_data, test_data = train_test_split(df_result_filter, test_size=0.1, random_state=42)

len(test_data)

len(train_data)

 

#Разделяем все инциденты на слова

test_tokenized = test_data.apply(lambda r: w2v_tokenize_text(r['Description']), axis=1).values

train_tokenized = train_data.apply(lambda r: w2v_tokenize_text(r['Description']), axis=1).values

 

#Преобразуем все наши слова в векторы

X_train_word_average = word_averaging_list(wv,train_tokenized)

X_test_word_average = word_averaging_list(wv,test_tokenized)

 

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

logreg = linear_model.LogisticRegression(n_jobs=1, C=1e5)

 

#Обучим нашу модель на тестовых данных. Данная процедура самая длительная, в зависимости от размера модели может занимать несколько часов. В моем случае ушло более 6 часов.

logreg_w2v = logreg.fit(X_train_word_average, train_data['ShortDescription'])

 

#Сохраним полученный результат, он нам потребуется в дальнейшем

joblib.dump(logreg_w2v, 'Data/logreg_w2v.sav')

 

#Выполним предсказание для нашей тестовой выборки

predicted_w2v = logreg_w2v.predict(X_test_word_average)

 

#Посмотрим на результат

evaluate_prediction(predicted_w2v, test_data.ShortDescription)

 

Доля правильных ответов

accuracy 0.7425814736403706

 

Полнота

recall 0.7425814736403706

 

Можно считать полученные результаты весьма неплохими.

А вот как выглядит так называемая матрица ошибок. Видим, что есть проблемы с классификатором «Проблемы с MyBeeStore/Проблемы с авторизацией», в остальном предсказания в основном укладываются в диагональ, то есть предсказанное и действительное значения классификаторов совпали.

 

 

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

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

Я не буду копировать сюда весь код, вот ссылка на github, если кто-то соберется запустить подобный функционал все равно код придется немного переделать.

 

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

  1. Поиск готового решения.

Изначально был проведен опрос сотрудников техподдержки, были выделены инциденты, которые сотрудник может решить самостоятельно. Затем по примерному тексту инцидента были выделены все похожие с помощью перекрестного сравнения выбран инцидент, максимально похожий на остальные по выбранной тематике. Затем мы создали базу данных, в которой в одной из таблиц был указан номер инцидента и описанное для него «саморешение», то есть решение, которое может проделать сотрудник самостоятельно. В случае, если на текст инцидента существует похожий инцидент с описанным решением – оно предлагается пользователю и задается вопрос «Решение помогло?» При положительном инциденте мы отмечаем для статистики эту информацию, инцидент не создаем, в противном случае информацию сохраняем и заводим инцидент.

 

 

 

 

  1. Подбор классификатора.

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

Машинное обучение Python HelpDesk

См. также

Автотесты для типовых конфигураций ERP Управление предприятием 2 и Комплексная автоматизация 2 (для vanessa automation)

Тестирование QA DevOps и автоматизация разработки Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Налоговый учет Платные (руб)

Готовые тестовые сценарии, предназначенные для регресс-тестирования функционала конфигурации после обновления типовым релизом. Сценарии проверяют интерактивное заполнение форм документов, справочников и результат проведения документов. Сценарии возможно использовать как для vanessa-automation, так и для СППР. Поддерживаемые версии конфигураций ERP2 и КА2: 2.5.15.111.

2220 руб.

04.07.2022    6732    26    0    

23

SALE! 50%

Потоковая предметная фотосъемка c удалением фона (Canon & Nikon)

Нейросети 8.3.6 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Обработка подключения фотокамер Canon и Nikon к Управление торговлей 11.4 для потоковой загрузки фотографий в карточки товаров с автоматическим удалением фона

22800 11400 руб.

24.06.2021    9196    2    3    

11

Заполнение описания номенклатуры с помощью ChatGPT

Мастера заполнения Нейросети Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Платные (руб)

Расширение для заполнения описания номенклатуры с помощью модели ИИ ChatGPT. Расширение формирует продающее описание товара по его наименованию с помощью модели искусственного интеллекта. Будет полезно для владельцев интернет магазинов, каталогов товаров и продающих через маркетплейсы. Адаптировано для основных конфигураций: УТ, ЕРП, КА, УНФ. Прошло аудит на 1cfresh.com. Версия для автоматического заполнения

5000 руб.

13.03.2023    15950    42    49    

74

Автотесты для типовых конфигураций Бухгалтерия предприятия КОРП 3.0 и Бухгалтерия предприятия 3.0 (vanessa automation)

Тестирование QA DevOps и автоматизация разработки Платформа 1С v8.3 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Налоговый учет Платные (руб)

Готовые тестовые сценарии, предназначенные для регресс-тестирования функционала конфигурации после обновления типовым релизом. Сценарии проверяют интерактивное заполнение форм документов, справочников и результат проведения документов. Сценарий – feature-файл, разработанный с помощью vanessa-automation. Запуск сценария выполняется интерактивно с помощью vanessa-automation или с помощью vanessa-runner в CI-системах. Доступно тестирование тонкого клиента. Поддерживаемые версии конфигураций 1С:Бухгалтерия предприятие 3.0 и версии КОРП: 3.0.144.49.

1728 руб.

20.01.2022    6592    10    0    

9

Заполнение описания номенклатуры с помощью GigaChat

Нейросети Мастера заполнения Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Расширение для заполнения описания номенклатуры с помощью модели ИИ GigaChat от Сбера. Расширение формирует продающее описание товара по его наименованию с помощью модели искусственного интеллекта. Будет полезно для владельцев интернет магазинов, каталогов товаров и продающих через маркетплейсы. Адаптировано для основных конфигураций: УТ, ЕРП, КА, УНФ.

5000 руб.

08.11.2023    1419    5    0    

13

Принципы использования искусственного интеллекта для повышения личной эффективности

Нейросети Россия Бесплатно (free)

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

18.03.2024    478    Timelist    3    

5

Генерация описания номенклатуры с помощью GigaChat (искусственный интеллект)

Нейросети Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

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

10 стартмани

18.03.2024    282    0    NikDizell    2    

6

8 советов, которые помогут вывести запросы ChatGPT на новый уровень

Нейросети Россия Бесплатно (free)

CHATGPT и подобные ему инструменты сделали искусственный интеллект доступным для большого количества людей. Теперь мы можем получить самые разные ответы практически на любую интересующую нас тему. Боты могут придумывать стихи, писать коды, выдавать научные статьи и многое другое. Все мы знаем: можно ввести в ChatGPT абсолютно любой запрос - он вас поймет. Однако есть несколько способов получить от бота более интересные и полезные результаты. Это «проектирование запросов» само по себе становится специализированным навыком. Иногда все, что требуется, — это добавить еще несколько слов или дополнительную строку инструкций, и вы можете получить ответы ChatGPT, которые находятся на уровень выше того, что видят все остальные.

15.03.2024    575    Timelist    0    

4
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. pm74 199 26.02.20 09:25 Сейчас в теме
(0) норм. вы молодец
тоже потихоньку экспериментирую с scikit-learn
с iris: ( Setosa, Virginica .. ) ковыряться конечно не очень интересно
сделал себе "песочницу" (транслятор 1с запрос-> Dataframe) для экспериментов , посмотрим получится ли что нибудь интересное
Алексей_mir2mb; +1 Ответить
2. Repich 562 26.02.20 09:36 Сейчас в теме
(1) Самое сложное в моем случае оказалось придумать сложную, но решаемую задачу.
утюгчеловек; Алексей_mir2mb; +2 Ответить
3. pm74 199 26.02.20 09:41 Сейчас в теме
(2) и у вас это получилось
у меня тоже есть пара подобных задач к которым пока не могу подступиться , просто из за нехватки опыта и времени
4. pm74 199 26.02.20 09:48 Сейчас в теме
(2) да еще вопрос , на каком "железе" это все делалось

...В моем случае ушло более 6 часов.
5. Repich 562 26.02.20 11:07 Сейчас в теме
(4) Сервер с 16 ядрами и 256 Гб ОЗУ. Но тут есть масса вариантов оптимизации, потому что обучение я делал в один поток. По идее этот процесс должен иметь неплохие возможности паралеллизации, просто у меня был дедлайн по сдаче проекта.
Алексей_mir2mb; portwein; pm74; +3 Ответить
6. ivanov660 4332 26.02.20 11:11 Сейчас в теме
Интересная тема. Есть пару вопросов.
1. Как обновляется/переучивается модель (относительно новых ошибок)?
2. Пробовали doc2vec подход?
7. Repich 562 26.02.20 11:31 Сейчас в теме
(6) 1. Вручную, просто где то раз в месяц прогоняю обучение заново. Новых классификаторов практически не появляется, так что пользы от ежедневного переобучения нет. Конечно хорошо бы еще и результаты использования (там где пользователи отвечают, что классификатор выбран неверно) тоже брать для обучения, но до этого я уже не нашел, появились другие задачи, увеличить качество с 74 до 74,5% не стоит :)
2. Нет, узнал о его существовании уже после того, как реализовал подход, описанный в статье.
8. user623969_dusa 26.02.20 14:10 Сейчас в теме
что лежит в основе алгоритма - комплексная нейронная сеть на основе ряда фурье или просто набор вероятностей?)
9. Repich 562 26.02.20 14:36 Сейчас в теме
(8) Не понял вопрос, в основе какого алгоритма? В основе алгоритма логистической регрессии?
Оставьте свое сообщение