#3 global ai meetup (nlp) - Никита Никитинский, dialtech
TRANSCRIPT
Через грабли - к чат-ботам: технологии, эвристики и жестокая
реальность
О чем расскажу
Технологии – это круто (но про них и без меня расскажут)
Эвристики – это не так круто, но без них не обойтись
Данные – это больно
Дисклеймер: презентацию делал ночью и уставший
Технологии NLPЧаще: Базовая подготовка (токенизация, удаление знаков препинания и стоп-
слов, приведение к одному регистру)
Морфологический анализ (чаще всего – лемматизация, частеречноетегирование)
Исправление опечаток (а вот тут косяк)
Выделение ключевых слов/(именованных) сущностей (для goal-oriented-ботов)
Реже: Синтаксический анализ (SyntaxNet же!)
Тематическое моделирование
Анализ тональности
Реферирование и аннотирование
Выделение значимых частей текста
Технологии ML
Правила-шаблоны-ключевики
Классические алгоритмы (статистические)
Дистрибутивная семантика (все-что-угодно2vec)
Глубинное/глубокое обучение
Скоринговые модели (извлекающие)
Генеративные модели (порождающие)
Всякие гибриды
ИнструментыNLP Apache OpenNLP, NLTK, АОТ
api.ai, wit.ai
AlchemyAPI
Машинное обучение + глубинное обучение Gensim, scikit-learn
TensorFlow, Keras, Theano, Torch, Caffe, Deeplearning4j
Тысячи их!
Фреймворки для создания чат-ботов Microsoft Bot Framework,
Pandorabots, Synthetic Intelligence Network,
Chatfuel, Botkit, Errbot, Hubot, DialTech
Десятки их!
Факторы успеха
Алгоритмы всем известны
Сделать модельку могут многие (даже я!)
Грабли
Как заменять у бота ответы без переобучения модели?
Как сделать боту стабильную личность?
Знание доменных областей (банки, биржи, телеком)
Особенности процессов
Особенности принятия решений
Функциональное продакшн-решение
Возможности кастомизации
Интеграция, оптимизация, большая нагрузка
Универсальное решение для всех из коробки - маловероятно
ЭвристикиВыделение значимых для ответа частей из запроса
• Знаки препинания?
• Части речи?
• Ключевые слова?
• Обучаем модель?
Обработка сложного запроса из нескольких вопросов
• Знаки препинания?
• Графические признаки?
• Обучаем модель?
Правильная обработка отрицаний
• Склеиваем отрицание со значимым словом?
• Игнорируем отрицания?
• Учитываем отрицания как значимое слово?
Работа с неизвестными для модели значимыми словами
Определение и фильтрация бреда
Разрешение анафоры в диалоге
Данные в мире розовых
пони
Реальные данныеМаксимально дурацкий формат
• Фотографии сканов экселевских таблиц
Люди неграмотные и не знают, чего хотят
• Скожит мой автамабел утелезерованн нет что
Данных мало
• Или еще хуже, очень много
Данные грязные до ужаса
• Ошибки форматирования
• Неправильные ответы
• Неправильная разметка
Данные нерепрезентативные
• Плохо представлены редкие категории
Что делать?• Снимать штаны и бегать (опционально)
• Смириться с жестокостью жизни (рекомендуется)
• Иметь вспомогательные скрипты для работы с самыми частотными
форматами
• Иметь вспомогательные скрипты для очистки данных
• Иметь вспомогательные скрипты для быстрого анализа данных или
уметь быстро глазами определять их пригодность
• Иметь domain-specific наработки на случай отсутствия данных
• Иметь автотестер для получившейся модели
• Дообучаться в процессе работы
Кейс автоматизацииКто:
• Компания, которая выдает займы
Проблема:
• На почту приходят письма с вопросами в больших количествах, операторы не
справляются (да и не спешат особо), некоторые письма висят по несколько дней,
клиенты недовольны
Изначальный процесс:
• Читать письмо
• Пытаться понять, о чем оно (это непросто!)
• Поставить категорию письма из выпадающего списка (это тоже непросто)
• Найти в скриптах для операторов подходящий ответ (это лениво)
Кейс автоматизацииСамостоятельная попытка автоматизации:
• Ключевые слова, конечно же. Стало проще, но не сильно.
Решение:
• Рекомендательная система для операторов с возможностью автоответа
пользователям
На входе:
• Вопрос клиента
На выходе:
• Категория вопроса
• Наиболее вероятный ответ
• Степень уверенности в ответе
Кейс автоматизацииКак делали:
• Анализ и обработка вопросов
• Обучение модели
• Тестирование модели
• Доработка модели
Какие были данные:
• Неправильно категоризированные вопросы (операторы халтурщики)
• Неинтерпретируемые вопросы
• Нерелевантные ответы на вопросы (прям как-то много!)
• Маньяцкий формат данных (архив с архивами с битыми JSON)
• Неравномерное распределение категорий вопросов
по набору данных (классика!)
Немного о DialTech• Платформа для разработки чат-ботов и управления ими (админка,
переключение на оператора, WoZ, вот это вот всё)
• Свой NLP-движок (куда ж без этого!)
• Есть API
• Базовая интеграция со всеми основными мессенджерами и HelpDesk
(Usedesk, Zendesk, вот это вот всё)
• Возможность быстро интегрироваться почти с чем угодно
Немножко обо мне
https://www.facebook.com/nnikitinsky
nlpx.net
В LinkedIn меня тоже можно найти:
Nikita Nikitinsky