В предыдущем посте мы рассмотрели простую демонстрацию переобучения в классическом сценарии регрессии. В этом посте я продемонстрирую переоснащение в контексте виртуальных помощников, или, как некоторые называют их, чат-ботов.

Что означает точность для помощников?

Прежде чем я углублюсь в переоснащение, я хочу вкратце обсудить, как мы говорим о точности помощников. Помощник поддерживается классификатором, который преобразует высказывания в намерения. Например, высказывание «где открывается ваш новый магазин?» Может соответствовать намерению #Store_Location. Если вместо этого помощник предсказал намерение #Store_Hours, мы могли бы сказать, что помощник (или его классификатор) допустил ошибку.

Watson Assistant проверяет высказывание на предмет всех возможных намерений, выдает оценку достоверности для каждого и по умолчанию выбирает прогноз с максимальной достоверностью. В этом примере мы можем представить, что #Store_Hours имеет достоверность 0,7, а #Store_Location - 0,6.

Самый простой метод точности - просто измерить «правильно» и «неправильно». «Где открывается ваш магазин?» == #Store_Hours неверно. Однако более полезно рассматривать это как комбинацию двух ошибок. Первая ошибка заключается в том, что неправильный ответ, #Store_Hours, вызывает наибольшую уверенность. Вторая ошибка заключается в том, что правильный ответ, #Store_Location, не имел наивысшего доверия. Это тонкое различие между правильным и неправильным двоичным кодом дает нам дополнительное понимание ошибки и способов ее устранения.

В более общем смысле мы можем описать первое условие (неправильный ответ имеет наивысшую степень достоверности) как ошибку точности. Второе условие (правильный ответ не имеет наивысшей степени достоверности) - это ошибка отзыва. Каждая ошибка классификации помощником имеет как ошибку точности, так и ошибку отзыва. В этом посте я покажу, как большинство разработчиков виртуальных помощников сосредотачиваются на ошибках «отзыва», не принимая во внимание ошибки «точности».

Как выглядит переобучение помощников?

В своем предыдущем посте я использовал простой пример, чтобы нарисовать его в двух измерениях. Классификаторы виртуальных помощников используют сотни или тысячи измерений, которые я не могу нарисовать, а люди не могут визуализировать. Я буду использовать иллюстративный метод, чтобы сократить данные обучения классификатора до двух измерений. (Математически можно использовать анализ главных компонентов, однако это выходит далеко за рамки этого поста и не требуется для понимания общих принципов.) Я назначу зеленый знак плюсу #Store_Location, фиолетовую звездочку - #Store_Hours и синий X - #Contact_Us.

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

Как и наша простая модель линейной регрессии в первом примере, эта модель, кажется, быстро улавливает суть наших обучающих данных. Есть чистые области по центру в нижнем левом, верхнем среднем и нижнем правом углу этой диаграммы. Мы видим, что большинство примеров правильно предсказываются этой моделью (т. Е. Зеленый плюс почти полностью содержится в зеленом многоточии), но мы также видим некоторые ошибки. Ошибки в основном расположены по краям эллипсов, что говорит о том, что модель не очень уверена в этих прогнозах.

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

Подобно примеру регрессии первого сообщения, можно достичь идеальной точности на обучающем наборе, допустив более сложную модель. Мы еще раз отмечаем некоторые подозрительные стороны этой модели, в первую очередь появляющиеся пальцы и локти. Граница между зеленой и фиолетовой областями (верхний средний и нижний правый) особенно подозрительна - отсутствие четкой формы границы говорит о том, что модель не выводит какие-либо обобщаемые закономерности из данных.

Большинство платформ виртуальных помощников не будут открывать вам внутреннее устройство классификатора и, таким образом, снизят сложность создаваемых вами моделей. Однако у их классификаторов есть интересное свойство - они отлично запоминают свои обучающие данные (это свойство есть у Watson Assistant). Таким образом, они создают модель с максимально возможной степенью обобщения, при этом всегда идеально предсказывая обучающие данные. Полученную модель можно визуализировать ниже.

Все это очень абстрактно - для чего это нужно?

Способность точно предсказать намерение, стоящее за высказыванием, создает сильное искушение просто добавить любое пропущенное предсказание в будущую обучающую выборку. Без какого-либо высказывания в обучающем наборе оно может быть предсказано неверно, а после того, как это высказывание окажется в обучающем наборе, оно никогда не будет предсказано неправильно. Что не любить? Почему бы нам просто не добавлять без разбора сотни, тысячи или больше обучающих примеров в нашего виртуального помощника - разве больше обучающих данных не лучше? Почему этот пост в блоге начался с обсуждения точности и отзывчивости?

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

Нашим мотивирующим примером было то, что «где открывается ваш новый магазин?» Классифицируется как #Store_Hours вместо #Store_Location. Предположим, вы заметили несколько вариантов этого, таких как «Привет, где открывается ваш новый магазин», «Где открывается новый магазин» и «Где открывается ваш новый магазин в Северной Каролине», каждый из которых не классифицируется как #Store_Location (ошибка отзыва для этого намерения). Как обсуждалось выше, мы могли бы исправить предсказание каждого высказывания, добавив его к обучающим данным - улучшив запоминание, чтобы мы никогда больше не ошиблись в этих утверждениях.

Переоснащение классификатора чата может вызвать проблемы с точностью

Сначала давайте визуализируем, что произошло, добавив много тесно связанных примеров. Целью добавления конкретных примеров было исправить эти примеры. Изменение в системе может быть неочевидным.

В отличие от предыдущего поста мы добились переобучения за счет добавления примеров, а не добавления функций. Классификатор попытался сделать обобщение на новых примерах. Это значительно увеличило размер пространства #Store_Location и уменьшило размер пространства #Store_Hours. (См. Статью по теме: Каждая часть обучающих данных имеет гравитационное воздействие на систему ИИ.)

Классификатор также узнал, что «новый магазин», «открытие магазина» и «открытие нового магазина» сильно коррелируют с #Store_Location. Это означает, что доверие к #Store_Location повысится по каждому из этих вопросов:

· Когда откроется новый магазин?

· Новый магазин открывается на Рождество?

· Купоны на открытие нового магазина?

· Где я могу узнать, когда откроется новый магазин?

По некоторым из этих вопросов увеличения достоверности #Store_Location будет достаточно, чтобы сделать это предполагаемое намерение. Другими словами, исправление ошибок отзыва привело к появлению новых ошибок точности! #Store_Location теперь является источником ошибок точности, а некоторые намерения, включая #Store_Hours, теперь страдают от ошибок отзыва.

Еще более гнусно доверие будет снижено для других вопросов, которые раньше задавались в #Store_Location, особенно если в них отсутствуют фразы "новый", "магазин" или "открытие". «Мне нужна помощь в поиске вас» теперь может перейти в # Назначения. Это может привести к новым ошибкам отзыва для #Store_Location, и в зависимости от количества обучающих данных, которые вы добавили для начальной проблемы, вы можете фактически уменьшить общий отзыв намерения, которое вы пытались улучшить!

Надеюсь, вы больше не испытываете соблазна рефлексивно исправить все пропущенные прогнозы, добавляя новые данные для обучения.

Улучшение классификатора чата без переобучения

Есть и другие инструменты, которые вы должны иметь в своем наборе инструментов при улучшении классификатора.

Поддерживайте сбалансированную и репрезентативную тренировочную выборку. В предыдущем примере добавления одного примера могло быть достаточно, чтобы правильно предсказать другие примеры. Когда мы добавили много похожих примеров, это исказило обучающую выборку и затронуло множество несвязанных вопросов. Если 10% вопросов о местоположении касаются новых магазинов, то 10% примеров местоположения должны включать новые магазины. Используйте шаблоны, а не разовые при улучшении тренировочных данных.

Проверяйте намерения на предмет путаницы и улучшайте их с помощью объектов. Если в ваших магазинах есть банки, у вас может возникнуть соблазн создать намерения #Store_Hours и #Bank_Hours. Эти намерения могут быть сбиты с толку, поскольку большинство примеров будут отличаться только одним словом. Рассмотрим одно намерение (# Часы) с использованием объекта (магазина или банка), чтобы определить, о каком из них спрашивает пользователь. Запутанные намерения можно улучшить, добавляя, объединяя или удаляя другие намерения, а также добавляя обучающие примеры.

Если вы не уверены, используйте подтверждение или устранение неоднозначности. Если верхнее намерение имеет низкую степень достоверности, вы можете попросить пользователя подтвердить (Вы спрашивали о часах работы магазина?. Если верхние намерения имеют аналогичную уверенность, вы можете попросить пользователя устранить неоднозначность (Вы имели в виду часы работы магазина или расположение магазина ? ) Watson Assistant имеет встроенную возможность устранения неоднозначности .

Сосредоточьтесь на точности времени выполнения, а не на точности обучения. Существует несколько методов, включая перекрестную проверку k-кратных значений, чтобы сделать вывод о будущей точности, работая только с обучающим набором. Эти методы являются прогностическими только в том случае, если ваши обучающие данные полностью репрезентативны для данных, которые вы получите во время выполнения. Вместо этого ограничьте использование этих методов выявлением явных паттернов ошибок в вашей модели. После развертывания модели создайте тестовый набор данных, на которых модель не обучалась, и регулярно проверяйте ее производительность на этом наборе.

Смотрите эти дополнительные сообщения об улучшении классификаторов чата:

· Стратегии тестирования чат-ботов (часть 1) - тестирование их классификаторов

· Тестирование чат-бота с перекрестной проверкой k-folds

· Анализировать работу классификатора чат-бота из логов

· Улучшить классификатор чат-ботов с помощью производственных данных

За помощью во внедрении передовых методов и во избежание переобучения обращайтесь в IBM Data and AI Expert Labs and Learning.