О практической работе
1. Введение
В этой лабораторной работе вы узнаете, как использовать машинное обучение BigQuery для получения выводов с помощью удаленных моделей ( моделей Gemini ) для анализа изображений постеров фильмов и создания сводок фильмов на основе постеров непосредственно в вашем хранилище данных BigQuery.
На фото выше: образец постера фильма, который вы будете анализировать.
BigQuery — это полностью управляемая платформа анализа данных с поддержкой искусственного интеллекта, которая помогает вам максимально эффективно использовать ваши данные и разработана с учетом нескольких механизмов, нескольких форматов и нескольких облаков. Одной из его ключевых функций является машинное обучение BigQuery для вывода, которое позволяет создавать и запускать модели машинного обучения (ML) с помощью запросов GoogleSQL.
Gemini — это семейство генеративных моделей искусственного интеллекта, разработанное Google и предназначенное для мультимодальных случаев использования.
Запуск моделей ML с использованием запросов GoogleSQL
Обычно выполнение машинного обучения или искусственного интеллекта (ИИ) на больших наборах данных требует обширного программирования и знаний платформ машинного обучения. Это ограничивает разработку решения небольшой группой специалистов внутри каждой компании. Благодаря машинному обучению BigQuery для вывода специалисты по SQL могут использовать существующие инструменты и навыки SQL для построения моделей и получения результатов с помощью LLM и Cloud AI API.
Предварительные условия
- Базовое понимание Google Cloud Console.
- Опыт работы с BigQuery будет плюсом
Что вы узнаете
- Как настроить свою среду и учетную запись для использования API
- Как создать подключение к облачному ресурсу в BigQuery
- Как создать набор данных и таблицу объектов в BigQuery для изображений постеров фильмов
- Как создать удаленные модели Gemini в BigQuery
- Как заставить модель Gemini предоставить краткое описание фильма для каждого постера
- Как создать встраивание текста для фильма, представленного на каждом постере
- Как использовать BigQuery
VECTOR_SEARCH
для сопоставления изображений постеров фильмов с тесно связанными фильмами в наборе данных
Что вам понадобится
- Учетная запись Google Cloud и проект Google Cloud с включенной оплатой.
- Веб-браузер, например Chrome
2. Настройка и требования
Самостоятельная настройка среды
- Войдите в Google Cloud Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .
- Имя проекта — это отображаемое имя для участников этого проекта. Это строка символов, не используемая API Google. Вы всегда можете обновить его.
- Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (невозможно изменить после его установки). Cloud Console автоматически генерирует уникальную строку; обычно тебя не волнует, что это такое. В большинстве лабораторий кода вам потребуется указать идентификатор проекта (обычно идентифицируемый как
PROJECT_ID
). Если вам не нравится сгенерированный идентификатор, вы можете создать другой случайный идентификатор. Альтернативно, вы можете попробовать свой собственный и посмотреть, доступен ли он. Его нельзя изменить после этого шага и он сохраняется на протяжении всего проекта. - К вашему сведению, есть третье значение — номер проекта , которое используют некоторые API. Подробнее обо всех трех этих значениях читайте в документации .
- Затем вам необходимо включить выставление счетов в Cloud Console, чтобы использовать облачные ресурсы/API. Прохождение этой кодовой лаборатории не будет стоить много, если вообще что-то стоить. Чтобы отключить ресурсы и избежать выставления счетов за пределами этого руководства, вы можете удалить созданные вами ресурсы или удалить проект. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .
Запустить Cloud Shell
Хотя Google Cloud можно управлять удаленно с вашего ноутбука, в этой лаборатории вы будете использовать Google Cloud Shell , среду командной строки, работающую в облаке.
В Google Cloud Console щелкните значок Cloud Shell на верхней правой панели инструментов:
Подготовка и подключение к среде займет всего несколько минут. Когда все будет готово, вы должны увидеть что-то вроде этого:
Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Всю работу в этой лаборатории кода можно выполнять в браузере. Вам не нужно ничего устанавливать.
3. Прежде чем начать
Для работы с моделями Gemini в BigQuery необходимо выполнить несколько шагов по настройке, включая включение API, создание подключения к облачному ресурсу и предоставление учетной записи службы для подключения к облачному ресурсу определенных разрешений. Эти шаги выполняются один раз для каждого проекта и будут рассмотрены в следующих нескольких разделах.
Включить API
В Cloud Shell убедитесь, что идентификатор вашего проекта настроен:
gcloud config set project [YOUR-PROJECT-ID]
Установите переменную среды PROJECT_ID
:
PROJECT_ID=$(gcloud config get-value project)
Настройте регион по умолчанию для использования в моделях Vertex AI. Узнайте больше о доступных локациях для Vertex AI . В примере мы используем регион us-central1
.
gcloud config set compute/region us-central1
Установите переменную среды REGION
:
REGION=$(gcloud config get-value compute/region)
Включите все необходимые службы:
gcloud services enable bigqueryconnection.googleapis.com \
aiplatform.googleapis.com
Ожидаемый результат после выполнения всех вышеперечисленных команд:
student@cloudshell:~ (test-project-001-402417)$ gcloud config set project test-project-001-402417 Updated property [core/project]. student@cloudshell:~ (test-project-001-402417)$ PROJECT_ID=$(gcloud config get-value project) Your active configuration is: [cloudshell-14650] student@cloudshell:~ (test-project-001-402417)$ student@cloudshell:~ (test-project-001-402417)$ gcloud services enable bigqueryconnection.googleapis.com \ aiplatform.googleapis.com Operation "operations/acat.p2-4470404856-1f44ebd8-894e-4356-bea7-b84165a57442" finished successfully.
4. Создайте подключение к облачному ресурсу
В этой задаче вы создадите подключение к облачному ресурсу, которое позволит BigQuery получать доступ к файлам изображений в облачном хранилище и совершать вызовы к Vertex AI.
- В Google Cloud Console в меню навигации (
), нажмите BigQuery .
- Чтобы создать подключение, нажмите + ДОБАВИТЬ , а затем — Подключения к внешним источникам данных .
- В списке Тип подключения выберите Удаленные модели Vertex AI, Удаленные функции и BigLake (Cloud Resource) .
- В поле «Идентификатор подключения» введите «gemini_conn» для вашего подключения.
- В качестве типа местоположения выберите «Мультирегион» , а затем в раскрывающемся списке выберите «Мультирегион США ».
- Для остальных настроек используйте значения по умолчанию.
- Нажмите Создать соединение .
- Нажмите ПЕРЕЙТИ К ПОДКЛЮЧЕНИЮ .
- В области сведений о подключении скопируйте идентификатор учетной записи службы в текстовый файл для использования в следующей задаче. Вы также увидите, что соединение добавлено в раздел «Внешние подключения» вашего проекта в BigQuery Explorer.
5. Предоставьте разрешения IAM для учетной записи службы подключения.
В этой задаче вы предоставляете IAM-разрешения сервисной учетной записи подключения Cloud Resource через роль, чтобы предоставить ей доступ к службам Vertex AI.
- В консоли Google Cloud в меню навигации выберите IAM & Admin .
- Нажмите Предоставить доступ .
- В поле Новые участники введите идентификатор учетной записи службы, который вы скопировали ранее.
- В поле «Выберите роль» введите Vertex AI и выберите роль пользователя Vertex AI .
- Нажмите Сохранить . В результате идентификатор учетной записи службы теперь включает роль пользователя Vertex AI.
6. Создайте набор данных и таблицу объектов в BigQuery для изображений постеров фильмов.
В этой задаче вы создадите набор данных для проекта и таблицу объектов внутри него для хранения изображений плакатов.
Набор данных изображений постеров фильмов, используемый в этом руководстве, хранится в общедоступной корзине Google Cloud Storage: gs://cloud-samples-data/vertex-ai/dataset-management/datasets/classic-movie-posters
Создать набор данных
Вы создадите набор данных для хранения объектов базы данных, включая таблицы и модели, используемые в этом руководстве.
- В консоли Google Cloud выберите меню навигации (
), а затем выберите BigQuery .
- На панели «Проводник» рядом с именем проекта выберите «Просмотреть действия» (
), а затем выберите Создать набор данных .
- На панели «Создать набор данных» введите следующую информацию:
- Идентификатор набора данных: Gemini_demo
- Тип местоположения: выберите Мультирегион.
- Мультирегион: выберите США.
- Остальные поля оставьте по умолчанию.
- Нажмите Создать набор данных .
В результате создается набор данных gemini_demo
, который отображается под вашим проектом в BigQuery Explorer.
Создайте таблицу объектов
BigQuery хранит не только структурированные данные, но также может получать доступ к неструктурированным данным (например, к изображениям плакатов) через таблицы объектов.
Вы создаете таблицу объектов, указывая на сегмент Cloud Storage, и в результирующей таблице объектов есть строка для каждого объекта из сегмента с указанием его пути к хранилищу и метаданных.
Для создания таблицы объектов вы будете использовать SQL-запрос.
- Нажмите + , чтобы создать новый SQL-запрос .
- В редакторе запросов вставьте запрос ниже.
CREATE OR REPLACE EXTERNAL TABLE
`gemini_demo.movie_posters`
WITH CONNECTION `us.gemini_conn`
OPTIONS (
object_metadata = 'SIMPLE',
uris = ['gs://cloud-samples-data/vertex-ai/dataset-management/datasets/classic-movie-posters/*']
);
- Запустите запрос. Результатом является таблица объектов
movie_posters
, добавленная в набор данныхgemini_demo
и загруженная сURI
(местоположением облачного хранилища) каждого изображения постера фильма. - В Проводнике нажмите
movie_posters
и просмотрите схему и детали. Не стесняйтесь запрашивать таблицу для просмотра конкретных записей.
7. Создайте удаленную модель Gemini в BigQuery.
Теперь, когда таблица объектов создана, можно приступить к работе с ней. В этом задании вы создадите удаленную модель для Gemini 1.5 Flash, чтобы сделать ее доступной в BigQuery.
Создайте удаленную модель Gemini 1.5 Flash.
- Нажмите + , чтобы создать новый SQL-запрос .
- В редакторе запросов вставьте приведенный ниже запрос и запустите его.
CREATE OR REPLACE MODEL `gemini_demo.gemini_1_5_flash`
REMOTE WITH CONNECTION `us.gemini_conn`
OPTIONS (endpoint = 'gemini-1.5-flash')
В результате создается модель gemini_1_5_flash
, и вы видите, что она добавлена в набор данных gemini_demo
в разделе моделей.
- В Проводнике щелкните модель
gemini_1_5_flash
и просмотрите детали.
8. Попросите модель Gemini предоставить краткое описание фильмов для каждого постера.
В этой задаче вы будете использовать только что созданную удаленную модель Gemini для анализа изображений постеров фильма и создания сводок для каждого фильма.
Отправлять запросы к модели можно с помощью функции ML.GENERATE_TEXT
, ссылаясь на модель в параметрах.
Анализируйте изображения с помощью модели Gemini 1.5 Flash.
- Создайте и запустите новый запрос с помощью следующего оператора SQL:
CREATE OR REPLACE TABLE
`gemini_demo.movie_posters_results` AS (
SELECT
uri,
ml_generate_text_llm_result
FROM
ML.GENERATE_TEXT( MODEL `gemini_demo.gemini_1_5_flash`,
TABLE `gemini_demo.movie_posters`,
STRUCT( 0.2 AS temperature,
'For the movie represented by this poster, what is the movie title and year of release? Answer in JSON format with two keys: title, year. title should be string, year should be integer. Do not use JSON decorators.' AS PROMPT,
TRUE AS FLATTEN_JSON_OUTPUT)));
При выполнении запроса BigQuery запрашивает модель Gemini для каждой строки таблицы объектов, объединяя изображение с указанным статическим запросом. В результате создается таблица movie_posters_results
.
- Теперь посмотрим результаты. Создайте и запустите новый запрос с помощью следующего оператора SQL:
SELECT * FROM `gemini_demo.movie_posters_results`
Результатом являются строки для каждого постера фильма с URI
(местом облачного хранилища изображения постера фильма) и результатом JSON, включая название фильма и год выпуска фильма из модели Gemini 1.5 Flash.
Вы можете получить эти результаты более удобным для чтения человеком способом, используя следующий запрос. Этот запрос использует SQL для извлечения названия фильма и года выпуска из этих ответов в новые столбцы.
- Создайте и запустите новый запрос с помощью следующего оператора SQL:
CREATE OR REPLACE TABLE
`gemini_demo.movie_posters_results_formatted` AS (
SELECT
uri,
JSON_VALUE(ml_generate_text_llm_result, "$.title") AS title,
JSON_VALUE(ml_generate_text_llm_result, "$.year") AS year
FROM
`gemini_demo.movie_posters_results` results )
В результате создается таблица movie_posters_result_formatted
.
- Вы можете запросить таблицу с помощью запроса ниже, чтобы увидеть созданные строки.
SELECT * FROM `gemini_demo.movie_posters_results_formatted`
Обратите внимание, что результаты столбца URI
остаются прежними, но JSON теперь преобразуется в столбцы title
и year
для каждой строки.
Попросить модель Gemini 1.5 Flash предоставить краткое описание фильмов
Что, если вам нужно немного больше информации о каждом из этих фильмов, скажем, текстовое описание каждого из фильмов? Этот вариант использования создания контента идеально подходит для модели LLM, такой как модель Gemini 1.5 Flash.
- Вы можете использовать Gemini 1.5 Flash для предоставления краткого описания фильмов для каждого постера, выполнив следующий запрос:
SELECT
uri,
title,
year,
prompt,
ml_generate_text_llm_result
FROM
ML.GENERATE_TEXT( MODEL `gemini_demo.gemini_1_5_flash`,
(
SELECT
CONCAT('Provide a short summary of movie titled ',title, ' from the year ',year,'.') AS prompt,
uri,
title,
year
FROM
`gemini_demo.movie_posters_results_formatted`
LIMIT
20 ),
STRUCT(0.2 AS temperature,
TRUE AS FLATTEN_JSON_OUTPUT));
Обратите внимание на поле результатов ml_generate_text_llm_result
; сюда входит краткое содержание фильма.
9. Создание вложений текста с использованием удаленной модели
Теперь вы можете объединить созданные вами структурированные данные с другими структурированными данными в вашем хранилище. Общедоступный набор данных IMDB, доступный в BigQuery, содержит большой объем информации о фильмах, включая оценки зрителей, а также некоторые примеры отзывов пользователей в произвольной форме. Эти данные помогут вам глубже проанализировать афиши фильмов и понять, как эти фильмы были восприняты.
Для объединения данных вам понадобится ключ. В этом случае названия фильмов, созданные с помощью модели Gemini, могут не полностью совпадать с названиями в наборе данных IMDB.
В этой задаче вы создадите текстовые вставки названий фильмов и годов из обоих наборов данных, а затем используете расстояние между этими вложениями, чтобы соединить ближайший заголовок IMDB с названиями постеров фильмов из вашего вновь созданного набора данных.
Создайте удаленную модель
Чтобы сгенерировать встраивание текста, вам нужно будет создать новую удаленную модель, указывающую на конечную точку text-multilingual-embedding-002 .
- Создайте и запустите новый запрос с помощью следующего оператора SQL:
CREATE OR REPLACE MODEL `gemini_demo.text_embedding`
REMOTE WITH CONNECTION `us.gemini_conn`
OPTIONS (endpoint = 'text-multilingual-embedding-002')
В результате создается модель text_embedding
, которая отображается в проводнике под набором данных gemini_demo
.
Создание текстовых вложений для названия и года, связанных с плакатами.
Теперь вы будете использовать эту удаленную модель с функцией ML.GENERATE_EMBEDDING
для создания внедрения для каждого названия и года постера фильма.
- Создайте и запустите новый запрос с помощью следующего оператора SQL:
CREATE OR REPLACE TABLE
`gemini_demo.movie_posters_results_embeddings` AS (
SELECT
*
FROM
ML.GENERATE_EMBEDDING(
MODEL `gemini_demo.text_embedding`,
(
SELECT
CONCAT('The movie titled ', title, ' from the year ', year,'.') AS content,
title,
year,
uri
FROM
`gemini_demo.movie_posters_results_formatted` ),
STRUCT(TRUE AS flatten_json_output)));
В результате создается таблица movie_poster_results_embeddings
, содержащая встраивания для текстового содержимого, объединенного для каждой строки таблицы gemini_demo.movie_posters_results_formatted
.
- Вы можете просмотреть результаты запроса, используя новый запрос ниже:
SELECT * FROM `gemini_demo.movie_posters_results_embeddings`
Здесь вы видите вложения (векторы, представленные числами) для каждого фильма, созданного моделью.
Создайте встраивание текста для подмножества набора данных IMDB.
Вы создадите новое представление данных из общедоступного набора данных IMDB, который будет содержать только фильмы, выпущенные до 1935 года (известный период времени, когда фильмы были показаны на плакатах).
- Создайте и запустите новый запрос с помощью следующего оператора SQL:
CREATE OR REPLACE VIEW
`gemini_demo.imdb_movies` AS (
WITH
reviews AS (
SELECT
reviews.movie_id AS movie_id,
title.primary_title AS title,
title.start_year AS year,
reviews.review AS review
FROM
`bigquery-public-data.imdb.reviews` reviews
LEFT JOIN
`bigquery-public-data.imdb.title_basics` title
ON
reviews.movie_id = title.tconst)
SELECT
DISTINCT(movie_id),
title,
year
FROM
reviews
WHERE
year < 1935)
Результатом является новое представление, содержащее список различных идентификаторов фильмов, названий и года выпуска из таблицы bigquery-public-data.imdb.reviews
для всех фильмов в наборе данных, выпущенных до 1935 года.
- Теперь вы создадите встраивания для подмножества фильмов из IMDB, используя процесс, аналогичный предыдущему разделу. Создайте и запустите новый запрос с помощью следующего оператора SQL:
CREATE OR REPLACE TABLE
`gemini_demo.imdb_movies_embeddings` AS (
SELECT
*
FROM
ML.GENERATE_EMBEDDING( MODEL `gemini_demo.text_embedding`,
(
SELECT
CONCAT('The movie titled ', title, ' from the year ', year,'.') AS content,
title,
year,
movie_id
FROM
`gemini_demo.imdb_movies` ),
STRUCT(TRUE AS flatten_json_output) )
WHERE
ml_generate_embedding_status = '' );
Результатом запроса является таблица, содержащая встраивания текстового содержимого таблицы gemini_demo.imdb_movies
.
Сопоставьте изображения постеров фильма с IMDB movie_id
, используя BigQuery VECTOR_SEARCH
Теперь вы можете объединить две таблицы с помощью функции VECTOR_SEARCH
.
- Создайте и запустите новый запрос с помощью следующего оператора SQL:
SELECT
query.uri AS poster_uri,
query.title AS poster_title,
query.year AS poster_year,
base.title AS imdb_title,
base.year AS imdb_year,
base.movie_id AS imdb_movie_id,
distance
FROM
VECTOR_SEARCH( TABLE `gemini_demo.imdb_movies_embeddings`,
'ml_generate_embedding_result',
TABLE `gemini_demo.movie_posters_results_embeddings`,
'ml_generate_embedding_result',
top_k => 1,
distance_type => 'COSINE');
Запрос использует функцию VECTOR_SEARCH
для поиска ближайшего соседа в таблице gemini_demo.imdb_movies_embeddings
для каждой строки в таблице gemini_demo.movie_posters_results_embeddings
. Ближайший сосед находится с использованием метрики косинусного расстояния, которая определяет, насколько похожи два вложения.
Этот запрос можно использовать для поиска наиболее похожего фильма в наборе данных IMDB для каждого из фильмов, идентифицированных Gemini 1.5 Flash на афишах фильмов. Например, вы можете использовать этот запрос, чтобы найти наиболее близкое совпадение с фильмом «Скоро!» в общедоступном наборе данных IMDB, где этот фильм упоминается по англоязычному названию «Help!».
- Создайте и запустите новый запрос, чтобы объединить дополнительную информацию о рейтингах фильмов, представленную в общедоступном наборе данных IMDB:
SELECT
query.uri AS poster_uri,
query.title AS poster_title,
query.year AS poster_year,
base.title AS imdb_title,
base.year AS imdb_year,
base.movie_id AS imdb_movie_id,
distance,
imdb.average_rating,
imdb.num_votes
FROM
VECTOR_SEARCH( TABLE `gemini_demo.imdb_movies_embeddings`,
'ml_generate_embedding_result',
TABLE `gemini_demo.movie_posters_results_embeddings`,
'ml_generate_embedding_result',
top_k => 1,
distance_type => 'COSINE') DATA
LEFT JOIN
`bigquery-public-data.imdb.title_ratings` imdb
ON
base.movie_id = imdb.tconst
ORDER BY
imdb.average_rating DESC
Этот запрос аналогичен предыдущему запросу. Он по-прежнему использует специальные числовые представления, называемые векторными векторными представлениями, для поиска фильмов, похожих на заданный постер фильма. Однако он также объединяет средний рейтинг и количество голосов за каждый ближайший соседний фильм из отдельной таблицы из общедоступного набора данных IMDB.
10. Поздравления
Поздравляем с завершением работы над кодом. Вы успешно создали таблицу объектов для изображений постеров в BigQuery, создали удаленную модель Gemini, использовали эту модель, чтобы предложить модели Gemini проанализировать изображения и предоставить краткие описания фильмов, сгенерировали встраивания текста для названий фильмов и использовали эти встраивания для сопоставления изображений постеров фильмов с соответствующим названием фильма в наборе данных IMDB.
Что мы рассмотрели
- Как настроить свою среду и учетную запись для использования API
- Как создать подключение к облачному ресурсу в BigQuery
- Как создать набор данных и таблицу объектов в BigQuery для изображений постеров фильмов
- Как создать удаленные модели Gemini в BigQuery
- Как заставить модель Gemini предоставить краткое описание фильма для каждого постера
- Как создать встраивание текста для фильма, представленного на каждом постере
- Как использовать BigQuery
VECTOR_SEARCH
для сопоставления изображений постеров фильмов с тесно связанными фильмами в наборе данных
Следующие шаги / узнать больше