НЛП в продакшне: разрыв между демо и работающей системой
Языковые модели в 2019 году дают впечатляющие демонстрации. Почему путь от демо до реально работающего продукта намного длиннее, чем кажется.
Осенью 2019 года Google опубликовал исследование о применении BERT для улучшения поискового ранжирования. Это одно из знаковых событий: крупнейший поисковик начинает применять языковую модель нового поколения в боевой системе. Параллельно выходят исследования, которые показывают state-of-the-art результаты на задачах понимания текста, классификации, вопросно-ответных системах.
Я вижу, что на этом фоне у многих руководителей появляется вопрос: "А мы можем сделать что-то похожее?". Обычно вопрос конкретизируется в что-то вроде "давайте сделаем умный поиск по документам" или "давайте автоматизируем обработку входящих писем".
Идеи правильные. Но между тем, что показывает исследовательская статья, и тем, что работает в реальной системе - большой разрыв, о котором редко говорят вслух.
Откуда берётся разрыв
Исследовательские результаты измеряются на стандартных бенчмарках: наборах данных, специально созданных для оценки задач НЛП. Эти данные чистые, размеченные, на английском языке, и они репрезентируют конкретный тип задачи.
Реальная система работает с вашими данными. А ваши данные - это письма, написанные в десяти разных стилях, с ошибками, аббревиатурами, смешением русского и английского. Документы, которые сканировались с бумаги через плохой OCR. Запросы, которые задают так, как думают люди в вашей компании, а не так, как их формулируют в академических наборах.
Модель, которая показывает 95% точности на бенчмарке, может показать 60% на ваших данных - и это не значит, что модель плохая. Это значит, что бенчмарк и ваша задача - разные задачи.
Что нужно для реальной системы
Первое: данные для дообучения или оценки. Академическая модель нужно адаптировать под вашу специфику. Для этого нужны размеченные примеры из вашей предметной области. Их нужно собрать, разметить, проверить. Это ручная работа, которая стоит времени.
Второе: чёткое определение задачи. Что именно система должна делать? "Умный поиск" - не задача. "Система, которая берёт входящий запрос клиента на естественном языке и возвращает три наиболее релевантных параграфа из базы знаний" - это задача, для которой можно сделать метрику и проверить результат.
Третье: threshold и логика обработки ошибок. При какой уверенности модели результат показывается пользователю? Что происходит, когда модель не знает ответа? Как система себя ведёт на необычных входах? Это инженерные вопросы, которые требуют не меньше работы, чем сама модель.
Четвёртое: мониторинг в боевых условиях. Модель, которая работала хорошо при запуске, может деградировать, если входные данные меняются. Нужно понимать, как это обнаруживать.
Реалистичный взгляд на горизонт
Это не значит, что НЛП-задачи в компании недостижимы. Это значит, что дорогу к ним нужно прокладывать трезво.
Хороший пилот НЛП-системы, который реально работает и даёт измеримый результат - это три-шесть месяцев при наличии нужных компетенций в команде. Не неделя после "поиграть с моделью".
Хорошие вопросы перед началом:
- Можем ли мы чётко описать задачу так, чтобы можно было измерить качество результата?
- Есть ли у нас хотя бы несколько сотен размеченных примеров - или мы готовы их создать?
- Есть ли в команде кто-то, кто понимает разницу между accuracy на бенчмарке и работой системы на реальных данных?
- Что будет, когда система ошибётся - каков процесс обработки?
Ответы на эти вопросы определяют, получится ли из пилота рабочая система или демонстрация, которую потом тихо закрывают.