Предварительная обработка данных для ML: варианты и рекомендации

Этот документ является первым в серии, состоящей из двух частей, в которой исследуются темы проектирования данных и разработки функций для машинного обучения (ML) с упором на задачи обучения с учителем. В первой части обсуждаются лучшие практики предварительной обработки данных в конвейере машинного обучения в Google Cloud. В документе основное внимание уделяется использованию TensorFlow и библиотеки TensorFlow Transform ( tf.Transform ) с открытым исходным кодом для подготовки данных, обучения модели и использования модели для прогнозирования. В этом документе освещаются проблемы предварительной обработки данных для машинного обучения, а также описываются варианты и сценарии эффективного преобразования данных в Google Cloud.

В этом документе предполагается, что вы знакомы с BigQuery , Dataflow , Vertex AI и API TensorFlow Keras .

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

Введение

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

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

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

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

В этом документе также представлен обзор TensorFlow Transform ( tf.Transform ), библиотеки для TensorFlow, которая позволяет определять преобразование данных как на уровне экземпляра, так и полнопроходное с помощью конвейеров предварительной обработки данных. Эти конвейеры выполняются с помощью Apache Beam и создают артефакты, которые позволяют применять те же преобразования во время прогнозирования, что и при обслуживании модели.

Предварительная обработка данных для машинного обучения

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

Инженерия данных по сравнению с разработкой функций

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

Необработанные данные (или просто данные )
Данные в исходном виде, без предварительной подготовки к ОД. В этом контексте данные могут находиться в необработанной форме (в озере данных) или в преобразованной форме (в хранилище данных). Преобразованные данные, находящиеся в хранилище данных, могли быть преобразованы из исходной необработанной формы для использования в аналитике. Однако в этом контексте необработанные данные означают, что данные не были подготовлены специально для вашей задачи ML. Данные также считаются необработанными, если они отправляются из потоковых систем, которые в конечном итоге вызывают модели машинного обучения для прогнозирования.
Подготовленные данные
Набор данных в форме, готовой для вашей задачи ML: источники данных проанализированы, объединены и представлены в табличной форме. Подготовленные данные агрегируются и суммируются с необходимой степенью детализации — например, каждая строка в наборе данных представляет уникального клиента, а каждый столбец представляет сводную информацию о клиенте, например общую сумму расходов за последние шесть недель. В подготовленной таблице данных ненужные столбцы были удалены, а недействительные записи отфильтрованы. Для задач обучения с учителем присутствует целевая функция.
Инженерные функции
Набор данных с настроенными функциями, ожидаемыми моделью, то есть функциями, созданными путем выполнения определенных операций машинного обучения над столбцами в подготовленном наборе данных и создания новых функций для вашей модели во время обучения и прогнозирования, как описано ниже. в операциях предварительной обработки . Примеры этих операций включают масштабирование числовых столбцов до значений от 0 до 1, обрезку значений и категориальные функции с горячим кодированием .

На следующей диаграмме (рис. 1) показаны этапы подготовки предварительно обработанных данных:

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

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

Операции предварительной обработки

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

Для структурированных данных операции предварительной обработки данных включают следующее:

  • Очистка данных: удаление или исправление записей с поврежденными или недопустимыми значениями из необработанных данных, а также удаление записей, в которых отсутствует большое количество столбцов.
  • Выбор и секционирование экземпляров: выбор точек данных из входного набора данных для создания обучающих, оценочных (проверочных) и тестовых наборов . Этот процесс включает в себя методы повторяемой случайной выборки, избыточной выборки классов меньшинства и стратифицированного разделения.
  • Настройка функции: улучшение качества функции для машинного обучения, включая масштабирование и нормализацию числовых значений, вменение пропущенных значений, обрезку выбросов и корректировку значений, которые имеют искаженное распределение.
  • Преобразование признаков: преобразование числового признака в категориальный признак (посредством сегментирования ) и преобразование категориальных признаков в числовое представление (посредством быстрого кодирования, обучения с помощью подсчетов , встраивания разреженных признаков и т. д.). Некоторые модели работают только с числовыми или категориальными функциями, тогда как другие могут обрабатывать функции смешанного типа. Даже если модели обрабатывают оба типа, они могут извлечь выгоду из разных представлений (числовых и категориальных) одной и той же функции.
  • Извлечение функций: сокращение количества функций за счет создания более мощных представлений данных меньшей размерности с использованием таких методов, как PCA , извлечение встроенных данных и хеширование .
  • Выбор функций: выбор подмножества входных функций для обучения модели и игнорирование нерелевантных или избыточных с использованием методов фильтра или оболочки . Выбор объектов также может включать простое удаление объектов, если в объектах отсутствует большое количество значений.
  • Построение функций: создание новых функций с использованием типичных методов, таких как полиномиальное разложение (с использованием одномерных математических функций) или пересечение функций (для регистрации взаимодействия функций). Функции также могут быть созданы с использованием бизнес-логики из области использования машинного обучения.

Когда вы работаете с неструктурированными данными (например, изображениями, аудио или текстовыми документами), глубокое обучение заменяет разработку функций на основе предметных знаний, встраивая ее в архитектуру модели. Сверточный слой — это автоматический препроцессор функций. Построение правильной архитектуры модели требует некоторых эмпирических знаний о данных. Кроме того, необходим некоторый объем предварительной обработки, например:

  • Для текстовых документов: стемминг и лемматизация , расчет TF-IDF и извлечение n-грамм , поиск по внедрению.
  • Для изображений: обрезка, изменение размера, обрезка, размытие по Гауссу и канареечные фильтры.
  • Для всех типов данных (включая текст и изображения): трансферное обучение , при котором все слои полностью обученной модели, кроме последних, рассматриваются как этап разработки функций.

Детализация предварительной обработки

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

Операции предварительной обработки и преобразования можно разделить на следующие категории в зависимости от степени детализации операций:

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

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

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

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

    $$ value_{scaled} = (value_{raw} - \mu) \div \sigma $$

    Полнопроходные преобразования включают в себя следующее:

    • Числовые характеристики масштабирования MinMax с использованием минимального и максимального значений , вычисленных из набора обучающих данных.
    • Числовые характеристики стандартного масштабирования (нормализация z-показателя) с использованием μ и σ, вычисленные на наборе обучающих данных.
    • Группирование числовых характеристик с использованием квантилей.
    • Вменение пропущенных значений с использованием медианы (числовые признаки) или моды (категориальные признаки).
    • Преобразование строк (номинальных значений) в целые числа (индексы) путем извлечения всех различных значений (словаря) входного категориального признака.
    • Подсчет появления термина (значения признака) во всех документах (экземплярах) для расчета TF-IDF.
    • Вычисление PCA входных объектов для проецирования данных в пространство меньшей размерности (с линейно зависимыми объектами).

    Вам следует использовать только обучающие данные для вычисления таких статистических данных, как μ, σ, min и max . Если вы добавите данные тестирования и оценки для этих операций, вы потеряете информацию из данных оценки и тестирования для обучения модели. Это повлияет на надежность результатов испытаний и оценок. Чтобы гарантировать, что вы применяете согласованное преобразование ко всем наборам данных, вы используете одну и ту же статистику, рассчитанную на основе обучающих данных, для преобразования данных тестирования и оценки.

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

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

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

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

Конвейер машинного обучения в Google Cloud

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

Архитектура высокого уровня

На следующей диаграмме (рис. 2) показана высокоуровневая архитектура типичного конвейера машинного обучения для обучения и обслуживания моделей TensorFlow. Метки A, B и C на схеме относятся к различным местам конвейера, где может выполняться предварительная обработка данных. Подробная информация об этих шагах представлена ​​в следующем разделе.

Схема архитектуры, показывающая этапы обработки данных.
Рисунок 2. Высокоуровневая архитектура для обучения и обслуживания машинного обучения в Google Cloud.

Трубопровод состоит из следующих этапов:

  1. После импорта необработанных данных табличные данные сохраняются в BigQuery, а другие данные, такие как изображения, аудио и видео, сохраняются в Cloud Storage. Во второй части этой серии в качестве примера используются табличные данные, хранящиеся в BigQuery.
  2. Разработка данных (подготовка) и разработка функций выполняются в масштабе с использованием Dataflow. В результате этого выполнения создаются готовые к машинному обучению наборы для обучения, оценки и тестирования, которые хранятся в облачном хранилище. В идеале эти наборы данных хранятся в виде файлов TFRecord , оптимизированного формата для вычислений TensorFlow.
  3. Пакет обучения модели TensorFlow передается в программу Vertex AI Training, которая использует предварительно обработанные данные из предыдущих шагов для обучения модели. Результатом этого шага является обученная сохраненная модель TensorFlow, которая экспортируется в Cloud Storage.
  4. Обученная модель TensorFlow развертывается в Vertex AI Prediction как сервис, имеющий REST API, чтобы его можно было использовать для онлайн-прогнозирования. Эту же модель можно использовать и для пакетных заданий прогнозирования.
  5. После развертывания модели как REST API клиентские приложения и внутренние системы могут вызывать API, отправляя запросы с некоторыми точками данных и получая ответы от модели с прогнозами.
  6. Для организации и автоматизации этого конвейера вы можете использовать Vertex AI Pipelines в качестве планировщика для запуска этапов подготовки данных, обучения модели и развертывания модели.

Вы также можете использовать хранилище функций Vertex AI для хранения входных функций для прогнозирования. Например, вы можете периодически создавать инженерные функции на основе последних необработанных данных и сохранять их в хранилище функций Vertex AI Feature Store. Клиентские приложения извлекают необходимые входные функции из хранилища функций Vertex AI и отправляют их в модель для получения прогнозов.

Где сделать предварительную обработку

На рисунке 2 метки A, B и C показывают, что операции предварительной обработки данных могут выполняться в BigQuery, Dataflow или TensorFlow. В следующих разделах описывается, как работает каждый из этих вариантов.

Вариант А: BigQuery

Обычно в BigQuery реализуется логика для следующих операций:

  • Выборка: случайный выбор подмножества данных.
  • Фильтрация: удаление нерелевантных или недействительных экземпляров.
  • Разделение: разделение данных для создания обучающих, оценочных и тестовых наборов.

Сценарии BigQuery SQL можно использовать в качестве исходного запроса для конвейера предварительной обработки Dataflow, который является этапом обработки данных на рисунке 2. Например, если система используется в Канаде, а в хранилище данных есть транзакции со всего мира, фильтрация по Получить данные обучения только для Канады лучше всего в BigQuery. Разработка функций в BigQuery проста и масштабируема и поддерживает реализацию преобразований функций на уровне экземпляра и исторических агрегаций.

Однако мы рекомендуем использовать BigQuery для разработки функций только в том случае, если вы используете свою модель для пакетного прогнозирования (оценки) или если функции предварительно вычисляются в BigQuery, но сохраняются в хранилище функций Vertex AI для использования во время онлайн-прогнозирования. Если вы планируете развернуть модель для онлайн-прогнозирования и у вас нет разработанной функции в онлайн-хранилище функций, вам придется реплицировать операции предварительной обработки SQL для преобразования необработанных точек данных, генерируемых другими системами. Другими словами, вам необходимо реализовать логику дважды: один раз в SQL для предварительной обработки данных обучения в BigQuery, а второй раз в логике приложения, которое использует модель для предварительной обработки точек онлайн-данных для прогнозирования.

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

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

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

Вариант Б: поток данных

Как показано на рисунке 2, вы можете реализовать дорогостоящие операции предварительной обработки в Apache Beam и запускать их в масштабе с помощью Dataflow. Dataflow — это полностью управляемый сервис автоматического масштабирования для пакетной и потоковой обработки данных. При использовании Dataflow вы также можете использовать внешние специализированные библиотеки для обработки данных, в отличие от BigQuery.

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

На следующей диаграмме (рис. 3) показана роль потока данных в обработке потоковых данных для прогнозов, близких к реальному времени.

Архитектура использования потоковых данных для прогнозирования.
Рисунок 3. Архитектура высокого уровня, использующая потоковые данные для прогнозирования в Dataflow.

Как показано на рисунке 3, во время обработки события, называемые точками данных , передаются в Pub/Sub . Поток данных использует эти точки данных, вычисляет функции на основе агрегатов с течением времени, а затем вызывает развернутый API модели машинного обучения для прогнозирования. Затем прогнозы отправляются в исходящую очередь Pub/Sub. Прогнозы из Pub/Sub могут использоваться последующими системами, такими как мониторинг или управление, или они могут быть отправлены обратно (например, в виде уведомлений) исходному запрашивающему клиенту. Прогнозы также можно хранить в хранилище данных с низкой задержкой, например Cloud Bigtable, для извлечения в реальном времени. Cloud Bigtable также можно использовать для накопления и хранения этих агрегатов в реальном времени, чтобы при необходимости их можно было просматривать для прогнозирования.

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

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

Поток данных можно использовать для выполнения полнопроходного преобразования путем вычисления необходимой статистики в масштабе. Однако эту статистику необходимо где-то хранить, чтобы ее можно было использовать во время прогнозирования для преобразования точек данных прогнозирования. Используя библиотеку TensorFlow Transform ( tf.Transform ), вы можете напрямую встроить эту статистику в модель, а не хранить ее где-то еще. Этот подход объясняется позже в разделе «Как работает tf.Transform» .

Вариант C: TensorFlow

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

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

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

Проблемы предварительной обработки

Ниже приведены основные проблемы реализации предварительной обработки данных:

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

    Если преобразования станут частью самой модели, можно будет легко обрабатывать преобразования на уровне экземпляра, как описано ранее в Варианте C: TensorFlow . В этом случае интерфейс обслуживания модели ( serving_fn ) ожидает необработанные данные, в то время как модель внутренне преобразует эти данные перед вычислением выходных данных. Преобразования такие же, как и те, которые применялись к необработанным точкам данных обучения и прогнозирования.

  • Полнопроходные преобразования . Вы не можете реализовать полнопроходные преобразования, такие как преобразования масштабирования и нормализации, в вашей модели TensorFlow. При полнопроходных преобразованиях некоторые статистические данные (например, max и min значения для масштабирования числовых признаков) необходимо заранее вычислить на обучающих данных, как описано в Варианте B: Поток данных . Затем значения необходимо где-то сохранить, чтобы использовать их во время обслуживания модели для прогнозирования, чтобы преобразовать новые точки необработанных данных в виде преобразований на уровне экземпляра, что позволяет избежать перекоса при обслуживании обучения. Вы можете использовать библиотеку TensorFlow Transform ( tf.Transform ), чтобы напрямую встраивать статистику в вашу модель TensorFlow. Этот подход объясняется позже в разделе «Как работает tf.Transform» .

  • Предварительная подготовка данных для повышения эффективности обучения . Реализация преобразований на уровне экземпляра как части модели может снизить эффективность процесса обучения. Это ухудшение происходит потому, что одни и те же преобразования неоднократно применяются к одним и тем же обучающим данным в каждую эпоху. Представьте, что у вас есть необработанные данные обучения с 1000 функциями, и вы применяете сочетание преобразований на уровне экземпляра для создания 10 000 функций. Если вы реализуете эти преобразования как часть своей модели и затем передаете модели необработанные данные обучения, эти 10 000 операций применяются N раз в каждом экземпляре, где N — количество эпох. Кроме того, если вы используете ускорители (GPU или TPU), они простаивают, пока ЦП выполняет эти преобразования, что не является эффективным использованием ваших дорогостоящих ускорителей.

    В идеале данные обучения преобразуются перед обучением с использованием метода, описанного в разделе «Вариант Б: поток данных» , где 10 000 операций преобразования применяются только один раз для каждого экземпляра обучения. Преобразованные данные обучения затем представляются модели. Никакие дальнейшие преобразования не применяются, и ускорители все время заняты. Кроме того, использование Dataflow помогает предварительно обрабатывать большие объемы данных в любом масштабе, используя полностью управляемый сервис.

    Предварительная подготовка данных обучения может повысить эффективность обучения. Однако реализация логики преобразования вне модели (подходы, описанные в Варианте A: BigQuery или Варианте B: Dataflow ) не решает проблему перекоса между обучением и обслуживанием. Если вы не сохраните спроектированную функцию в хранилище функций, которая будет использоваться как для обучения, так и для прогнозирования, логика преобразования должна быть где-то реализована для применения к новым точкам данных, поступающим для прогнозирования, поскольку интерфейс модели ожидает преобразованные данные. Библиотека TensorFlow Transform ( tf.Transform ) может помочь вам решить эту проблему, как описано в следующем разделе.

Как работает tf.Transform

Библиотека tf.Transform полезна для преобразований, требующих полного прохода. Выходные данные библиотеки tf.Transform экспортируются в виде графа TensorFlow, который представляет логику преобразования уровня экземпляра и статистику, рассчитанную в результате полнопроходных преобразований, которые будут использоваться для обучения и обслуживания. Использование одного и того же графика для обучения и обслуживания может предотвратить перекос, поскольку на обоих этапах применяются одни и те же преобразования. Кроме того, библиотека tf.Transform может работать в масштабе конвейера пакетной обработки в Dataflow для предварительной подготовки данных обучения и повышения эффективности обучения.

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

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

Преобразование данных обучения и оценки

Вы предварительно обрабатываете необработанные данные обучения с помощью преобразования, реализованного в API-интерфейсах tf.Transform Apache Beam, и запускаете их в масштабе Dataflow. Предварительная обработка происходит в следующие этапы:

  • Фаза анализа. На этапе анализа необходимая статистика (например, средние значения, дисперсии и квантили) для преобразований с отслеживанием состояния вычисляется на обучающих данных с помощью полнопроходных операций. На этом этапе создается набор артефактов преобразования, включая граф transform_fn . Граф transform_fn — это граф TensorFlow, логика преобразования которого представлена ​​в виде операций уровня экземпляра. Он включает в себя статистику, вычисленную на этапе анализа, в виде констант.
  • Фаза преобразования. На этапе преобразования график transform_fn применяется к необработанным обучающим данным, где вычисленная статистика используется для обработки записей данных (например, для масштабирования числовых столбцов) на уровне экземпляра.

Подобный двухэтапный подход решает проблему предварительной обработки при выполнении полнопроходных преобразований.

Когда данные оценки подвергаются предварительной обработке, применяются только операции уровня экземпляра, используя логику графа transform_fn и статистику, вычисленную на этапе анализа в обучающих данных. Другими словами, вы не анализируете данные оценки полнопроходным способом для вычисления новых статистических данных, таких как μ и σ, для нормализации числовых функций в данных оценки. Вместо этого вы используете вычисленную статистику из данных обучения для преобразования данных оценки на уровне экземпляра.

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

Прикрепите преобразования к экспортированной модели.

Как уже отмечалось, граф transform_fn , созданный конвейером tf.Transform , сохраняется как экспортированный граф TensorFlow. Экспортированный граф состоит из логики преобразования в виде операций уровня экземпляра и всей статистики, вычисленной в ходе полнопроходных преобразований в виде констант графа. Когда обученная модель экспортируется для обслуживания, график transform_fn прикрепляется к SavedModel как часть ее serving_fn .

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

Граф transform_fn , который теперь является частью модели, применяет всю логику предварительной обработки к входной точке данных. Он использует сохраненные константы (например, μ и σ для нормализации числовых функций) в операции уровня экземпляра во время прогнозирования. Таким образом, график transform_fn преобразует точку необработанных данных в преобразованный формат. Преобразованный формат — это то, что ожидается внутренним интерфейсом модели для создания прогноза, как показано на рисунке 4.

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

Обзор параметров предварительной обработки

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

Возможность предварительной обработки данных Уровень экземпляра
(преобразования без гражданства)

Полный проход во время обучения и уровень экземпляра во время обслуживания (преобразования с сохранением состояния)

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

Большой запрос (SQL)

Пакетная оценка: ОК — одна и та же реализация преобразования применяется к данным во время обучения и пакетной оценки.

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

Пакетная оценка: Не рекомендуется .

Онлайн-прогноз: Не рекомендуется .

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

Пакетная оценка: Н/Д — подобные агрегаты рассчитываются на основе событий в реальном времени.

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

Поток данных (Apache Beam)

Пакетная оценка: ОК — одна и та же реализация преобразования применяется к данным во время обучения и пакетной оценки.

Онлайн-прогноз: ОК — если данные во время обслуживания поступают из Pub/Sub для использования потоком данных. В противном случае это приведет к перекосу между обучением и обслуживанием.

Пакетная оценка: Не рекомендуется .

Онлайн-прогнозы: Не рекомендуется .

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

Пакетная оценка: Н/Д — подобные агрегаты рассчитываются на основе событий в реальном времени.

Онлайн-прогноз: ОК — одно и то же преобразование Apache Beam применяется к данным во время обучения (пакетного) и обслуживания (потокового).

Поток данных (Apache Beam + TFT)

Пакетная оценка: ОК — к данным во время обучения и пакетной оценки применяется одна и та же реализация преобразования.

Онлайн-прогноз: рекомендуется — он позволяет избежать перекоса в обслуживании обучения и заранее подготавливает данные для обучения.

Пакетная оценка: рекомендуется .

Онлайн-прогноз: Рекомендуется .

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

Пакетная оценка: Н/Д — подобные агрегаты рассчитываются на основе событий в реальном времени.

Онлайн-прогноз: ОК — одно и то же преобразование Apache Beam применяется к данным во время обучения (пакетного) и обслуживания (потокового).

ТензорФлоу *
( input_fn и serving_fn )

Пакетная оценка: Не рекомендуется .

Онлайн-прогноз: Не рекомендуется .

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

Пакетный подсчет: невозможно .

Онлайн-прогноз: Невозможно .

Пакетная оценка: Н/Д — подобные агрегаты рассчитываются на основе событий в реальном времени.

Онлайн-прогноз: Невозможно .

* В TensorFlow такие преобразования, как пересечение, внедрение и горячее кодирование, должны выполняться декларативно как столбцы feature_columns .

Что дальше