Создание приложений машинного обучения: от идеи к продукту - Эммануэль Амейзен - E-Book

Создание приложений машинного обучения: от идеи к продукту E-Book

Эммануэль Амейзен

0,0

Beschreibung

Освойте ключевые навыки проектирования, разработки и развертывания приложений на базе машинного обучения (МО)! Пошаговое руководство по созданию МО-приложений с упором на практику: для специалистов по обработке данных, разработчиков программного обеспечения и продакт-менеджеров. Читая эту книгу, вы шаг за шагом создадите реальное практическое приложение — от идеи до внедрения. В вашем распоряжении примеры кодов, иллюстрации, скриншоты и интервью с ведущими специалистами отрасли. Вы научитесь планировать и измерять успех МО-проектов, разберетесь, как построить рабочую модель, освоите способы ее итеративной доработки. И, наконец, познакомитесь со стратегиями развертывания и мониторинга. Книга поможет: •Определить цель вашего МО-проекта •Быстро построить первый сквозной пайплайн и найти исходный датасет •Обучить модель и устранить узкие места в ее производительности •Развернуть модель и осуществить ее мониторинг

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern
Kindle™-E-Readern
(für ausgewählte Pakete)

Seitenzahl: 325

Veröffentlichungsjahr: 2023

Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:

Android
iOS
Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Эммануэль Амейзен
Создание приложений машинного обучения: от идеи к продукту

Переводчик С. Черников

Эммануэль Амейзен

Создание приложений машинного обучения: от идеи к продукту. — СПб.: Питер, 2022.

ISBN 978-5-4461-1773-4

© ООО Издательство "Питер", 2022

Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав.

Предисловие

Зачем нужны приложения на базе машинного обучения

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

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

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

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

Используйте МО для создания практических приложений

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

Эта книга написана с учетом опыта, который я получил за время, пока возглавлял программу ИИ в компании Insight Data Science. Я работал с командами по обработке данных во многих компаниях, помогая специалистам по Data Science, разработчикам ПО и продакт-менеджерам создавать практические полезные приложения на базе МО.

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

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

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

Дополнительные ресурсы

• Если вы хотите изучить МО так, чтобы уметь писать с нуля собственные алгоритмы, я рекомендую вам книгу Джоэла Грасса (Joel Grus) «Data Science from Scratch»2. Если же вас интересуют теоретические основы глубокого обу­чения, то исчерпывающим руководством по этой теме является учебное пособие «Deep Learning» (MIT Press), авторы Ян Гудфеллоу (Ian Goodfellow), Йошуа Бенджио (Yoshua Bengio) и Аарон Курвиль (Aaron Courville)3.

• Если вы задаетесь вопросом эффективного и точного обучения моделей на конкретных датасетах, то вам будет полезно посетить сайты сообщества Kaggle4 и компании fast.ai5.

• Если вы хотите создавать масштабируемые приложения, способные обрабатывать большие объемы данных, я рекомендую обратиться к книге Мартина Клеппмана (Martin Kleppmann) «Designing Data-Intensive Applications» (O’Reilly)6.

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

Давайте для начала разберемся, что такое МО на практике.

МО на практике

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

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

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

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

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

Что вы найдете в книге

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

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

Полное описание процесса МО

Чтобы успешно поставить пользователям продукт на базе МО, недостаточно просто обучить модель. Вы должны надлежащим образом транслировать потребности продукта в задачу МО, собрать достаточный объем данных, эффективно выполнить итеративную доработку модели, валидировать результаты, а затем развернуть модель, обеспечив ее устойчивость к ошибкам.

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

Технически и практически ориентированный пример

Хотя книга не научит вас реализации алгоритмов МО с нуля на языке Cи, она носит достаточно практический и технический характер, демонстрируя применение библиотек и инструментов для более высокого уровня абстракции. По ходу книги мы с вами разберем пример создания МО-приложения, начиная с исходной идеи и заканчивая развертыванием продукта.

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

Реальные проекты

По ходу книги я буду приводить содержание бесед и рекомендации от ведущих специалистов в области МО, которым довелось поработать в командах по обработке данных таких IT-компаний, как StitchFix, Jawbone и FigureEight. В материалах содержатся практические выводы, полученные из опыта создания МО-приложений с миллионами пользователей. Это избавит вас от некоторых типичных заблуждений относительно того, что приносит успех специалистам и командам в области обработки данных.

Необходимая подготовка

Книга написана с расчетом на то, что читатель имеет некоторое представление о программировании. В большинстве технических примеров я буду использовать язык Python, предполагая, что читатель знаком с его синтаксисом. Если вы хотите освежить свои знания языка Python, я могу порекомендовать вам книгу Кеннета Рейтца (Kenneth Reitz) и Тани Шлюссер (Tanya Schlusser) «The Hitchhiker’s Guide to Python» (O’Reilly)7.

Также хочу заметить, что, хотя я буду всегда давать определение концепций МО, я не буду касаться внутреннего устройства алгоритмов МО. В большинстве случаев эти алгоритмы представляют собой стандартные методы МО, описание которых можно найти в пособиях из раздела «Дополнительные ресурсы» на с. 11.

Наш учебный пример: написание текстов с использованием МО

Для иллюстрации идей на конкретном примере по ходу книги мы вместе с вами будем разрабатывать МО-приложение.

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

Задача — разработать систему, которая помогает пользователям писать более качественные тексты или вопросы. Может показаться, что эта цель носит достаточно расплывчатый характер, но позже я дам ей более четкое определение. Учебный проект обладает рядом важных достоинств:

Текстовые данные используются повсеместно

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

Помощники по написанию текстов приносят реальную пользу

Как показывает практика, МО-редакторы, начиная с функции умного ввода текста в почтовом сервисе Gmail и заканчивая продвинутой проверкой орфографии сервиса Grammarly, могут предоставлять пользователям множество разнообразных возможностей. Вам будет интересно узнать, как создать такое приложение с нуля.

Помощник на базе МО — самостоятельное приложение

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

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

Процесс МО как он есть

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

1. Определение правильного подхода к МО. Машинное обучение — достаточно широкая сфера и часто предлагает много способов достижения цели, поставленной при создании продукта. Выбор наилучшего подхода в каждом конкретном случае будет зависеть от многих факторов, таких как критерии успешности, доступность данных и степень сложности задачи. На данном этапе необходимо правильно определить критерии успешности, достаточный размер исходного датасета и подходящий тип модели.

2. Создание исходного прототипа. Перед тем как начать работу над моделью, необходимо создать «сквозной» прототип, учитывающий все факторы. Такой прототип должен достигать целей, для которых создавался продукт, без МО. Создание прототипа обычно позволяет понять, уместно ли использование МО, и дает возможность начать сбор данных для обучения модели.

3. Итеративная доработка моделей. Собрав датасет, вы можете приступить к обучению модели и оценке ее недостатков. Этот этап сводится к циклу анализа ошибок и корректировки реализации. Ускорение этого цикла является самым эффективным способом ускорения процесса МО-разработки.

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

Как видите, нам предстоит поистине длинный путь, давайте сейчас же начнем его с главы 1.

Условные обозначения

В этой книге используются следующие условные обозначения.

Курсив

Курсивом выделены новые термины или важные понятия.

Моноширинный шрифт

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

Моноширинный полужирный шрифт

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

Моноширинный курсив

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

Шрифт без засечек

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

Этот рисунок указывает на совет или предложение.

Этот рисунок указывает на общее примечание.

Этот рисунок указывает на предупреждение.

Использование исходного кода примеров

Вспомогательные материалы (примеры кода, упражнения и т.д.) доступны для загрузки по адресу:https://github.com/hundredblocks/ml-powered-applications. Если у вас возникнут вопросы технического характера по использованию примеров кода, направляйте их по электронной почте на адрес [email protected].

В общем случае все примеры кода из книги вы можете использовать в своих программах и в документации. Вам не нужно обращаться в издательство за разрешением, если вы не собираетесь воспроизводить существенные части программного кода. Если вы разрабатываете программу и используете в ней несколько фрагментов кода из книги, вам не нужно обращаться за разрешением. Но для продажи или распространения примеров из книги вам потребуется разрешение от издательства O’Reilly. Вы можете отвечать на вопросы, цитируя данную книгу или примеры из нее, но для включения существенных объемов программного кода из книги в документацию вашего продукта потребуется разрешение.

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

За получением разрешения на использование значительных объемов программного кода из книги обращайтесь по адресу [email protected].

Благодарности

Проект этой книги зародился как результат моего менторства и курирования МО-проектов в компании Insight Data Science. Я хотел бы поблагодарить Джейка Кламку (Jake Klamka) за то, что дал мне возможность возглавить эту программу, и Джереми Карновски (Jeremy Karnowski) за то, что подтолкнул меня к тому, чтобы изложить на бумаге опыт, полученный в ходе этой работы. Я также хотел бы поблагодарить сотни участников менторской программы, с которыми мне довелось поработать в компании Insight Data Science, за то, что помогли расширить границы представления об МО-проектах.

Написание книги — пугающе сложная задача, в решении которой мне очень помогла постоянная поддержка сотрудников компании O'Reilly. В частности, хочу сказать спасибо своему редактору Мелиссе Поттер (Melissa Potter) за ее полезные советы и моральную поддержку на протяжении всего процесса. Спасибо Майку Лоукидесу (Mike Loukides) за то, что каким-то образом убедил меня в том, что написание книги — вполне разумное желание.

Спасибо научным редакторам, которые тщательно проверяли первые черновики этой книги, находили ошибки и давали советы по улучшению ее содержания. Спасибо вам, Алекс Гуде (Alex Gude), Джон Крон (Jon Krohn), Кристен Макинтайр (Kristen McIntyre) и Дуве Осинга (Douwe Osinga), за то, что нашли время в своем плотном графике и помогли сделать эту книгу лучше. Я также очень признателен практикующим специалистам по обработке данных, рассказавших о сложностях МО, с которыми они столкнулись на практике и посчитали достойными внимания. Спасибо вам за то, что уделили мне время и предложили свои идеи, надеюсь, что я достаточно подробно изложил их в этой книге.

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

От издательства

Ваши замечания, предложения, вопросы отправляйте по адресу [email protected] (издательство «Питер», компьютерная редакция).

Мы будем рады узнать ваше мнение!

На веб-сайте издательства www.piter.com вы найдете подробную информацию о наших книгах.

1https://github.com/hundredblocks/ml-powered-applications

2Грасс Дж. Data Science. Наука о данных с нуля.

3Бенджио И., Гудфеллоу Я., Курвиль А. Глубокое обучение.

4 https://www.kaggle.com/

5 https://fast.ai

6Клеппман М. Высоконагруженные приложения. Программирование, масштабирование, поддержка. — СПб.: Питер.

7Рейтц К., Шлюссер Т. Автостопом по Python. — СПб.: Питер.

Часть I. Выбор правильного подхода к машинному обучению

Большинство разработчиков и компаний хорошо понимают, как решать свои задачи: например, как спрогнозировать уход клиентов с онлайн-платформы или как создать дрон, который будет следить за лыжником, спускающимся с горы. И точно так же большинство людей может быстро разобраться, как обучать модель, которая будет с приемлемой точностью классифицировать потребителей или искать объекты на основе датасета.

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

Для каждого проекта есть несколько способов реализации с помощью МО. Слева на рисунке (рис.. I.1) представлен макет помощника по написанию текстов. Помощник дает рекомендации и получает от пользователя обратную связь. Справа на рисунке — схема метода МО для выдачи этих рекомендаций.

В начале этого раздела мы рассмотрим подходы к МО и определим наиболее предпочтительные. Затем разберем, как согласовать метрики производительности модели с требованиями к продукту.

Рис. I.1. От продукта к МО

Раздел состоит из двух глав.

Глава 1

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

Глава 2

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

Глава 1. От цели продукта к разработке модели МО

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

На рис. 1.1 показаны два способа создания системы распознавания кошек. Слева — традиционная программа, для которой процедуры написаны вручную. Справа — модель, обученная на размеченных фотографиях кошек и собак. Такой метод МО позволяет относить изображения к правильной категории, при этом не нужно указывать, как получить необходимый результат, достаточно лишь примеров входных и выходных данных.

Рис. 1.1. От ручного написания процедур к прямой подаче данных

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

Так, например, едва ли человек способен написать пошаговые инструкции для автоматического распознавания животных по значению отдельных пикселей изображения (а если и способен, то потратит на это немало времени). Однако, «скормив» тысячи изображений различных животных сверточной нейронной сети (СНС), можно создать модель, которая будет справляться с этой задачей даже лучше человека. Для решения такой задачи будет уместно использовать МО.

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

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

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

В этой главе мы расскажем, как определить, требуется ли МО для решения задачи, а также рассмотрим методы МО и требования при работе с данными в зависимости от цели продукта. Я продемонстрирую эти приемы на учебном примере — редакторе на базе МО, о котором мы уже говорили в разделе «Наш учебный пример: написание текстов с использованием МО» на с. 14. В конце главы вас ждет интервью с Моникой Рогати (Monica Rogati).

Оценка осуществимости модели

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

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

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

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

Лучше всего уложиться в два последовательных этапа: (1) сформулируйте цель вашего продукта в парадигме МО; (2) оцените осуществимость этой задачи для МО. В зависимости от полученной оценки можно корректировать процесс разработки до тех пор, пока вас не устроит результат. Давайте посмотрим, что в действительности включают в себя эти два этапа.

1. Сформулировать цель продукта в парадигме МО. При создании продукта в первую очередь следует подумать о том, какой сервис мы хотим предоставить пользователям. Как уже упоминалось в предисловии, в этой книге концепции будут иллюстрироваться на учебном примере — редакторе, который помогает пользователям грамотнее писать сообщения с вопросами. Цель такого продукта понятна: давать пользователям практические и полезные рекомендации по написанию текста. Однако задачи МО формулируются иначе: обучение модели и приобретение функционала на основе данных. Наглядный пример такого обучения —преобразование текста на одном языке в текст на другом. Для одной цели продукта обычно можно по-разному сформулировать задачу, сложность которой тоже может варьироваться.

2. Оценить осуществимость МО. Задачи МО могут сильно различаться. По мере развития МО задачи вроде классификации фотографий кошек и собак решаются буквально за пару часов, в то время как, например, создание системы, способной вести полноценный разговор, пока остается нерешенной научной проблемой. Для эффективной разработки МО-приложений важно рассмотреть несколько формулировок задачи и взять за основу самую простую. Лучший способ оценить сложность МО — обдумать, какие данные ей нужны и какие из ныне существующих моделей способны работать с такими данными.

Прежде чем рассмотреть несколько формулировок и оценить их осуществимость, нам следует изучить две базовые составляющие задач МО — данные и модели.

Начнем с моделей.

Модели

Существует много широко используемых моделей МО, мы не станем рассматривать здесь каждую из них. Их подробное описание вы можете найти в книгах из раздела «Дополнительные ресурсы» на с. 11. Кроме известных моделей, еженедельно появляются новые вариации существующих, новые архитектуры и техники оптимизации. Только за май 2019 года ArXiv8, популярный электронный архив научных статей, где часто появляются статьи о новых моделях, пополнился 13 тысячами новых публикаций.

В то же время полезно иметь обзор различных категорий моделей и разобраться, к каким задачам они применимы. Поэтому я составлю простейшую таксономию моделей, основываясь на их подходе к задаче. Вы можете руководствоваться этой таксономией при выборе подхода к решению конкретной задачи МО. Поскольку при машинном обучении модели и данные тесно связаны друг с другом, содержание этого раздела во многом пересекается с содержанием раздела «Типы данных» (с. 32).

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

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

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

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

• классификация и регрессия;

• извлечение знаний;

• каталогизация;

• генеративные модели.

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

Классификация и регрессия

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

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

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

На рис. 1.2 представлен пример классификации предложения на основе его эмоциональной окраски и темы.

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

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

Рис. 1.2. Классификация предложения в рамках нескольких категорий

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

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

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

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

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

Извлечение знаний из неструктурированных данных

Структурированные данные — это данные, хранимые в табличном формате, например таблицы баз данных и электронные таблицы Excel. Неструктурированные данные — это датасеты, не представленные в табличном формате, например тексты (статьи, обзоры, содержимое Википедии и т.д.), музыкальные записи, видеозаписи или песни.

На рис. 1.3 показаны примеры структурированных и неструктурированных данных. Модели извлечения знаний берут источник неструктурированных данных и извлекают из него структуру, используя МО.

Рис. 1.3. Примеры структурированных и неструктурированных данных

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

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

Рис. 1.4. Извлечение из предложения названия и типа медиа

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

Рис. 1.5. Ограничительные рамки и маски сегментации

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

Рис. 1.6. Распознавание поз йоги

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

Каталогизация

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

На рис. 1.7 показан пример системы, которая рекомендует пользователю фильмы, основываясь на том, какой фильм он только что просмотрел, — пользователю не нужно ничего искать.

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

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

Рис. 1.7. Рекомендации фильмов к просмотру

признаки объектов, их называют контент-ориентированными рекомендательными системами. Некоторые системы одновременно используют и коллаборативный, и контент-ориентированный подход.

Наконец, МО также может использоваться для творчества. Вы можете научить модели генерировать эстетически приятные изображения или аудиозаписи или даже смешные анекдоты. Такие модели называют генеративными.

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

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

С другой стороны, из-за того, что генеративные модели часто выдают данные с широким разбросом, увеличиваются риски их применения на производстве. Поэтому, если такая модель не является обязательной для достижения вашей цели, я рекомендую вам сначала попробовать применить модели других типов. Тем читателям, которые хотели бы поглубже ознакомиться с темой генеративных моделей, я могу порекомендовать книгу Дэвида Фостера (David Foster) «Генеративное глубокое обучение» («Generative Deep Learning»9).

Примерами практического применения таких моделей могут служить системы перевода, которые конвертируют предложение на одном языке в предложение на другом; системы автоматического реферирования; системы генерирования субтитров, которые переводят аудио- и видеозаписи в текстовые расшифровки; системы нейронного переноса стиля (см. статью Гатиса (Gatys) и др. «Нейронный алгоритм для художественных стилей» («A Neural Algorith of Artistic Style»10)), которые преобразуют изображения в их стилизованные интерпретации.

На рис. 1.8 представлен пример генеративной модели, которая переносит на фотографию (слева) стиль живописи с миниатюры (справа, в нижнем левом углу).

Рис. 1.8. Пример переноса стиля из статьи Гатиса (Gatys) и др. «Нейронный алгоритм для художественных стилей»

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

Теперь давайте рассмотрим несколько распространенных сценариев получения данных и соответствующие им модели.

Данные

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

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

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

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

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

Типы данных

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

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

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

Доступность данных

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

Доступность размеченных данных

Этот случай показан слева на рис. 1.9. Любой разработчик, реализующий обу­чение с учителем, мечтает о получении размеченного датасета. Под словом «размеченный» здесь понимается то, что многие элементы данных такого набора содержат целевое значение, которое должна предсказывать модель. Это существенно облегчает обучение и оценку качества модели, поскольку вы можете использовать метки в качестве эталонных ответов. На практике вероятность того, что вы найдете отвечающий вашим потребностям размеченный набор данных и он будет свободно доступен в интернете, обычно стремится к нулю. Нередко разработчики ошибочно принимают датасет, который они нашли, за нужный.

Доступность слабо размеченных данных

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

Доступность неразмеченных данных

Этот случай показан справа на рис. 1.9. Иногда мы имеем набор входных данных без соответствующих меток, зато этот датасет содержит релевантные образцы. Например, в случае перевода текстов с одного языка на другой вы можете получить большие коллекции текста на обоих языках, между которыми не будет четко выраженного соответствия. Это означает, что нам потребуется либо добавить метки к набору данных, либо найти модель, способную обучаться на неразмеченных данных, либо даже объединить эти подходы.

Данные еще требуется собрать

Бывает так, что у нас нет даже неразмеченных данных и их еще только предстоит собрать. Хотя это нередко кажется непосильной задачей, к настоящему времени уже придумано много способов быстрого сбора данных и добавления к ним меток. Подробнее мы обсудим это в главе 4.

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

Рис. 1.9. Поиск баланса между доступностью и полезностью данных

Обычно в сфере МО под слабо размеченным датасетом понимаются данные, которые обеспечивают обучение модели, но не дают ей эталонных ответов. На практике большинство данных, которые мы можем собрать, являются слабо размеченными.

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

Итеративный подход к наборам данных

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

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

Формулировка задачи по созданию редактора на основе МО

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

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

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

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

Делаем все с помощью МО: подход «от начала до конца»

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

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

На рис. 1.10 показано, как это будет выглядеть на практике. Слева на этой простой схеме представлен пользовательский ввод, справа — необходимый результат, а модель располагается в середине.

Рис. 1.10. Подход «от начала до конца»

Выбор этого подхода создает значительные проблемы:

Данные

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

Модель

В последние годы наблюдается стремительный прогресс в разработке моделей, позволяющих преобразовать одну текстовую последовательность в другую, — генеративных моделей, о которых говорилось ранее. Sequence-to-sequence модели (из последовательности в последовательность), описанные в статье Суцкевера (Sutskever) и др. «Обучение sequence-to-sequence моделей с использованием нейронных сетей»(«Sequence to Sequence Learning with Neural Networks»13