Google быстро расширяет возможности BigQuery ML, добавляя все больше и больше типов моделей машинного обучения, которые можно использовать в BigQuery с очень небольшим количеством строк кода SQL и не более чем базовым пониманием лежащих в основе моделей. Совсем недавно стало возможным импортировать модели, которые были обучены с помощью TensorFlow, в BigQuery и использовать их для прогнозирования невидимых данных, не выходя из пользовательского интерфейса BigQuery. Таким образом, эта новая функция позволяет специалистам по данным создавать и обучать современные модели, которые затем можно сделать более доступными для более широкой группы людей с помощью BigQuery и интегрированных инструментов визуализации, таких как Google Data Studio или Looker.

Построение модели

Вы можете задаться вопросом, зачем вам когда-либо импортировать пользовательские модели TensorFlow, когда в наши дни доступны даже архитектуры глубокой нейронной сети (DNN) в виде встроенных моделей BigQuery ML? Один очень хороший вариант использования - это неструктурированные текстовые данные, которые хранятся в BigQuery (или в другом источнике интегрированных данных, доступ к которому можно получить с помощью BigQuery). В этом посте мы проиллюстрируем это на простом примере, который во многом основан на следующем уроке:

Https://www.tensorflow.org/tutorials/keras/text_classification_with_hub

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

Это довольно легкое вложение, которое использует словарь всего из 20 000 токенов и выводит 20-мерное плотное представление. Более крупные вложения также доступны в TensorFlow Hub, но они приведут только к серьезному переобучению нашего относительно небольшого обучающего набора из 15 000 примеров, поэтому мы будем придерживаться этого в этой демонстрации.

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

Вы можете легко запустить Блокнот Colab, на который есть ссылка в руководстве, чтобы получить обученную модель. Единственный недостающий шаг для использования этой модели внутри BigQuery - это сохранить модель в формате SavedModel TensorFlow. Это унифицированный способ сохранения и повторного использования (частично) обученных моделей TensorFlow, который также понимается BigQuery. К счастью, сохранить модель очень просто:

model.save('model_v1')

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

BUCKET = 'your-bucket-name' # use your own bucket name here
!gsutil cp -r model_v1 gs://{BUCKET}/

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

Затем эти CSV-файлы можно загрузить в BigQuery, что даст нам таблицу, которую мы назвали «тест» в наборе данных, который мы назвали «imbd». Как видите, в нем 2 столбца: столбец STRING с именем «text» и столбец INTEGER с именем «label».

Использование модели в BigQuery

Теперь мы готовы импортировать сохраненную модель в BigQuery. Это делается с помощью простого запроса:

CREATE OR REPLACE MODEL imdb.tf_model
OPTIONS (MODEL_TYPE='TENSORFLOW',  MODEL_PATH='gs://your-bucket-name/model_v1/*')

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

Обратите внимание, что поле ввода (функция), которое ожидает модель, называется «keras_layer_input», а прогноз (метка), который будет сгенерирован, будет называться «плотный_1». Эти имена полей были автоматически сгенерированы моделью TensorFlow / Keras, но могут быть настроены путем экспорта настраиваемой функции ввода для обслуживания вместе с экспортированной сохраненной моделью.

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

Мы разбили это на несколько операторов SELECT, потому что исходный прогноз модели TensorFlow еще не дает нам вероятностей, которые можно легко сравнить с тестовыми метками. Как правило, более эффективно обучать модель классификации без последнего шага, который превращает необработанные выходные данные (часто называемые логитом в этом контексте) в фактическую вероятность. Во втором SELECT мы превращаем логит в вероятность (от 0 до 1), передавая его в сигмовидную функцию. Эта вероятность затем превращается в прогноз, сравнивая его с 0,5. Обратите внимание, что здесь можно выбрать другой порог, но этот выбор в конечном итоге является бизнес-решением, которое на практике сводится к компромиссу между ложными срабатываниями и ложными отрицаниями. Но это история для другого раза.

В последнем SELECT мы вычисляем точность путем подсчета всех тестовых случаев, для которых и прогноз, и метка равны 0 или 1. Как и было обещано, если вы запустите это самостоятельно, вы обнаружите, что точность немного превышает 86%!

Инфраструктура машинного обучения в Google Cloud

В g-company мы помогаем бизнесу сделать следующий шаг на пути к облаку. Если вы хотите узнать больше об инструментах машинного обучения, доступных в Google Cloud, вот краткое изложение нашего последнего вебинара по машинному обучению или свяжитесь с нами напрямую [email protected].

Полную запись также можно посмотреть здесь.

СОПИСАНО
Александр Вейнс