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

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

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

В этом посте мы рассмотрим, как замкнуть цикл, добавив в процесс человека-рецензента, чтобы он мог давать отзывы (аннотировать реальные примеры), которые можно было бы немедленно использовать для дальнейшей настройки и беспрепятственного улучшения производительности модели. Использование Amazon SageMaker Augmented AI — это возможность SageMaker, которая позволит нам достичь этой цели.
Решение будет следовать шаблону, как показано на диаграмме ниже.

Весь код, отображаемый в этом блоге, можно найти в репозитории GitHub.

Вариант использования:

Для этого примера мы рассматриваем относительно простой пример классификации произвольных предложений по настроению. Мы будем использовать модель distilbert-base-uncased из библиотеки HuggingFace в качестве нашей базовой модели, которую мы позже настроим с помощью дополнительных примеров, которые придут от наших рецензентов.

Модель будет создана с помощью конвейера SageMaker Pipelines, а обученная модель будет развернута из реестра моделей в конечную точку в реальном времени.

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

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

Учебный пайплайн

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

Код этого шага вы можете найти в блокноте 1_create_model_pipeline.ipynb

После выполнения ваш конвейер будет выглядеть так, как показано ниже:

Настройка проверки человеком

Для проверки человеком мы используем SageMaker Augmented AI, который расширяет возможности SageMaker Ground Truth.

В первый раз, когда вы используете это, вам нужно определить Labeling Workforce. Для этого примера мы создадим частную рабочую силу (другие варианты — использовать стороннего поставщика или Mturk). В этой частной рабочей группе назначьте себя рецензентом или добавьте своих коллег, которые будут помогать вам в процессе маркировки/рецензирования. После того, как вы настроите это, у вас будет доступ к порталу, где можно получить доступ к любой доступной работе, назначенной вам, и выполнить ее.

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

Вышеуказанные шаги подробно описаны с пошаговыми скриншотами и кодом в блокноте 2A_a2i_setup.ipynb

Развертывание модели

Для развертывания модели мы развернем модель за конечной точкой в ​​реальном времени. Поскольку модель была обучена в SageMaker и зарегистрирована в реестре моделей, ее развертывание будет быстрым и потребует всего несколько строк кода. Блокнот 2B_deploy_model.ipynb показывает, как именно это сделать.
Обратите внимание, что конечные точки в режиме реального времени взимают плату за их доступность, поэтому, когда вы закончите, не забудьте отключить их (также код для этого в блокноте выше).

В этом примере мы развертываем экземпляр ml.m5.xlarge, который с ценой по требованию обойдется вам в 0,257 доллара США в час в регионе Ирландии (eu-west-1), который я использую. для моего тестирования.

Генерировать трафик

Чтобы мы могли протестировать наше решение, нам нужно сгенерировать некоторый трафик к нашей конечной точке. Для этого следуйте инструкциям блокнота 3_generate_some_traffic.ipynb. Но сначала пару вещей, на которые стоит обратить внимание.

До сих пор мы никак не связывали нашу конечную точку с процессом проверки человеком. Это именно то, что мы должны сделать на данном этапе.

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

В нашем примере функция e2e_prediction() сначала запускает функцию make_prediction(), а затем check_for_human_review(), которая запускает процесс проверки вручную, если модель не очень уверена в обнаруженном настроении.

Давайте проверим это на предложении, с которым модель будет не очень уверена: «Держу пари, теперь я понимаю, как работает SageMaker!», которое с человеческой точки зрения можно классифицировать как Положительное. Прогон его через модель запускает процесс проверки предложения человеком.

>>> e2e_prediction("I bet I now understand how SageMaker works!")
Model is thinking that sentence is: Positive but will ask a human to verify
Score is 0.5773128271102905 which is less than the threshold of 0.7
Starting human loop with name: f0a33b75-6734-4229-aa44-ce577d525d07  

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

Модель переподготовки

Чтобы переобучить свою модель, вы можете запустить код в записной книжке 4_retrain_model.ipynb или просто из консоли SageMaker Studio запустить новое выполнение конвейера, как показано на изображении ниже.

В этом сценарии мы вручную запускаем повторный запуск конвейера. В операционном сценарии вам нужно подумать, какая стратегия переобучения является правильной для вашего варианта использования, всегда пытаясь найти баланс между повышением производительности за счет тонкой настройки и стоимостью тонкой настройки. Самый простой способ автоматизировать это — выполнить по расписанию или на основе данных, используя встроенную интеграцию SageMaker Pipelines и EventBridge.

Обратите внимание, что модель автоматически подберет новые аннотированные данные для точной настройки. Это связано с тем, что при первоначальном создании конвейера мы установили вход задания обработки в то же местоположение S3, которое мы установили в качестве вывода для задачи проверки человеком.

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

Вернемся к предыдущему примеру: если теперь вы снова пропустите через модель то же предложение, что и раньше, вы увидите, что модель более уверенно предсказывает, что это положительное предложение.

>>> make_prediction("I bet I now understand how SageMaker works!")
('Positive', 0.7190687847137451)

Тонкая настройка сработала!

Заключение

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

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

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

Если вам понравился этот пост, дайте мне знать в комментариях ниже, подпишитесь на меня и не стесняйтесь предлагать дополнительные темы, о которых вам было бы интересно прочитать