Генеративный анализ с помощью BigQuery SQL и Vertex AI

1. Введение

В этой кодовой лаборатории мы создадим приложение для прогнозирования и назначения рейтинга успеха фильмов с помощью SQL-запросов BigQuery и API-интерфейса Vertex AI PaLM. Для генерации текста используется модель text-bison , которая размещается как удаленная функция в BigQuery.

Список используемых услуг:

  1. BigQuery ML
  2. Vertex AI PaLM API
  3. Облачная оболочка

Что ты построишь

Вы создадите

  • Набор данных BigQuery, содержащий модель.
  • Модель BigQuery ML, которая прогнозирует рейтинг успеха фильма на основе атрибутов ЖАНР и ВРЕМЯ ПРОКАТА фильма.
  • Модель BigQuery, в которой размещен API Vertex AI PaLM в качестве удаленной функции.
  • Внешнее соединение для установления связи между BigQuery и Vertex AI.

2. Требования

  • Браузер, например Chrome или Firefox.
  • Проект Google Cloud с включенной оплатой

Прежде чем вы начнете

  1. В Google Cloud Console на странице выбора проекта выберите или создайте проект Google Cloud.
  2. Убедитесь, что для вашего облачного проекта включена оплата. Узнайте, как проверить, включена ли оплата в проекте.
  3. Убедитесь, что все необходимые API (BigQuery API, Vertex AI API, BigQuery Connection API) включены.
  4. Вы будете использовать Cloud Shell , среду командной строки, работающую в Google Cloud, в которую предварительно загружен bq . Обратитесь к документации по командам и использованию gcloud.

В Cloud Console нажмите «Активировать Cloud Shell» в правом верхнем углу:

51622c00acec2fa.png

Если ваш проект не установлен, используйте следующую команду, чтобы установить его:

gcloud config set project <YOUR_PROJECT_ID>
  1. Перейдите в консоль BigQuery напрямую, введя следующий URL-адрес в браузере: https://console.cloud.google.com/bigquery.

3. Подготовка данных

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

  1. Создайте набор данных:

Набор данных BigQuery – это набор таблиц. Все таблицы в наборе данных хранятся в одном и том же месте данных. Вы также можете прикрепить настраиваемые элементы управления доступом, чтобы ограничить доступ к набору данных и его таблицам.

В Cloud Shell используйте команду bq mk, чтобы создать набор данных под названием «movie_insights».

bq mk --location=us-central1 movie_insights
  1. Клонируйте исходный файл на свой Cloud Shell Machine:
git clone https://github.com/AbiramiSukumaran/movie_score_genai_insights
  1. Перейдите в новый каталог проекта, созданный на вашем Cloud Shell Machine:
cd movie_score_genai_insights
  1. Используйте команду bq load, чтобы загрузить файл CSV в таблицу BigQuery (обратите внимание, что вы также можете загрузить его напрямую из пользовательского интерфейса BigQuery):
bq load --source_format=CSV --skip_leading_rows=1 movie_insights.movie_score \
./movies_data.csv \ Id:numeric,name:string,rating:string,genre:string,year:numeric,released:string,score:string,director:string,writer:string,star:string,country:string,budget:numeric,company:string,runtime:numeric,data_cat:string
  1. Вы можете запросить образец, чтобы проверить, созданы ли таблица movie_score и данные в наборе данных:
bq query --use_legacy_sql=false \
SELECT name, rating, genre, runtime FROM movie_insights.movie_score limit 3;

4. Данные для машинного обучения

Давайте создадим модель классификации, чтобы предсказать рейтинг успеха фильма на основе атрибутов «ЖАНР» и «ВРЕМЯ ПРОКАТА». Мы будем использовать оператор CREATE MODEL с опцией «LOGISTIC_REG» для создания и обучения модели логистической регрессии.

Запустите приведенный ниже запрос в разделе РЕДАКТОРА ЗАПРОСОВ SQL Workspace консоли BigQuery:

CREATE OR REPLACE MODEL
  `movie_insights.model_rating_by_runtime_genre`
OPTIONS
  ( model_type='LOGISTIC_REG',
    auto_class_weights=TRUE,
    data_split_method='NO_SPLIT',
    model_registry='vertex_ai',   
    vertex_ai_model_version_aliases=['logistic_reg', 'experimental'],
    input_label_cols=['score']
  ) AS
SELECT name, genre,runtime, score
FROM
  movie_insights.movie_score
WHERE
  data_cat = 'TRAIN';

Детали запроса:

  1. Инструкция CREATE MODEL обучает модель, используя данные обучения из инструкции SELECT.
  2. Предложение OPTIONS указывает тип модели и параметры обучения. Здесь опция LOGISTIC_REG указывает тип модели логистической регрессии. Нет необходимости указывать модель бинарной логистической регрессии в сравнении с моделью многоклассовой логистической регрессии: BigQuery ML может определить, что следует обучать, на основе количества уникальных значений в столбце метки.
  3. data_split_method='NO_SPLIT' заставляет BQML обучаться на данных в соответствии с условиями запроса (data_cat = 'TRAIN'), также обратите внимание, что лучше использовать 'AUTO_SPLIT' в этом параметре, чтобы позволить платформе (или службе в данном случае) рандомизировать разделение поездов/тестов.
  4. Параметр input_label_cols указывает, какой столбец в инструкции SELECT будет использоваться в качестве столбца метки. Здесь столбец метки представляет собой оценку, поэтому модель узнает, какое из 10 значений оценки наиболее вероятно основано на других значениях, присутствующих в каждой строке.
  5. Опция auto_class_weights=TRUE балансирует метки классов в обучающих данных. По умолчанию данные обучения не взвешены. Если метки в обучающих данных несбалансированы, модель может научиться более точно прогнозировать наиболее популярный класс меток.
  6. Инструкция SELECT запрашивает таблицу, которую мы загрузили с данными CSV. Предложение WHERE фильтрует строки во входной таблице так, что на этом этапе выбирается только набор данных TRAIN.
  7. Следующие конструкции являются НЕОБЯЗАТЕЛЬНЫМИ, поэтому BigQuery ML может явно зарегистрировать их в реестре моделей Vertex AI. Подробнее об этом можно прочитать в этом блоге . model_registry='vertex_ai', vertex_ai_model_version_aliases=['logistic_reg', 'experimental']

После создания в разделе СХЕМА рабочей области BigQuery SQL появится следующее:

2e43087f914aa466.png

После создания модели оцените ее производительность с помощью функции ML.EVALUATE . Функция ML.EVALUATE сравнивает прогнозируемые значения с фактическими данными.

Вы также можете просмотреть оценочные показатели вашей модели на странице МОДЕЛЬ:

7f2dc168bac0ac1a.png

Краткий обзор основных показателей:

Точность. Какая доля положительных идентификаций была действительно верной? Точность = истинно положительный результат / (истинный положительный результат + ложный положительный результат). Напомним: какая доля фактических положительных результатов была определена правильно? Отзыв = Истинно положительный / (Истинно положительный + Ложно отрицательный). Точность. Показатель для оценки моделей классификации. Это доля прогнозов, которые наша модель фактически выполнила правильно. Точность = Количество правильных прогнозов / Общее количество прогнозов.

5. Прогнозирование оценки фильма с помощью модели

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

Запустите приведенный ниже запрос в разделе РЕДАКТОРА ЗАПРОСОВ SQL Workspace консоли BigQuery:

SELECT
  *
FROM
  ML.PREDICT (MODEL movie_insights.model_rating_by_runtime_genre,
    (
    SELECT
      *
    FROM
      movie_insights.movie_score
    WHERE
      data_cat= 'TEST'
     )
  );

Результат выглядит следующим образом:

c719844860ce7c27.png

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

Проанализируйте прогнозируемые результаты и модель:

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

  1. Чтобы понять, почему ваша модель генерирует такие результаты прогнозирования, вы можете использовать функцию ML.EXPLAIN_PREDICT .
  2. Чтобы узнать, какие функции наиболее важны для определения уровня дохода в целом, вы можете использовать функцию ML.GLOBAL_EXPLAIN .

Подробно об этих шагах можно прочитать в документации .

6. Данные для генеративного ИИ

Давайте предоставим информацию о наборе данных фильмов, запросив у LLM (большую языковую модель) сводку факторов, влияющих на оценку фильма, которая превышает 5, с помощью генеративного ИИ, использующего модель Text-Bison (последняя версия) Vertex AI, использующую только SQL-запросы.

  1. Созданная нами таблица movie_score также будет входными данными для этого шага.
  2. Внешнее соединение будет создано для установления доступа между BigQuery ML и сервисами Vertex.
  3. Конструкция BigQuery GENERATE_TEXT будет использоваться для удаленного вызова API PaLM из Vertex AI.

7. Создайте внешнее соединение

Включите API подключения BQ, если это еще не сделано, и запишите идентификатор учетной записи службы в деталях конфигурации соединения:

  1. Нажмите кнопку «+ДОБАВИТЬ» на панели BigQuery Explorer (слева от консоли BigQuery) и выберите «Подключение к внешним источникам данных» в списке популярных источников.
  2. Выберите тип соединения «BigLake и удаленные функции», укажите тип местоположения «Регион» и значение «us-central1 (Айова)» и «bq_llm_connection» в качестве идентификатора соединения.

8a87802ab0846a6.png

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

Предоставить разрешения

На этом этапе мы предоставим разрешения учетной записи службы на доступ к службе Vertex AI:

Откройте IAM и добавьте учетную запись службы, которую вы скопировали после создания внешнего соединения, в качестве основного и выберите роль «Пользователь Vertex AI».

ff8e1d730879f972.png

8. Создайте удаленную модель машинного обучения

Создайте удаленную модель, которая представляет размещенную модель большого языка Vertex AI:

CREATE OR REPLACE MODEL
  movie_insights.llm_model REMOTE
WITH CONNECTION `us-central1.bq_llm_connection` OPTIONS (remote_service_type = 'CLOUD_AI_LARGE_LANGUAGE_MODEL_V1');

Он создает модель с именем llm_model в наборе данных movie_insights , которая использует API CLOUD_AI_LARGE_LANGUAGE_MODEL_V1 Vertex AI в качестве удаленной функции. Это займет несколько секунд.

9. Сгенерируйте текст с помощью модели ML

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

SELECT
  ml_generate_text_result['predictions'][0]['content'] AS generated_text,
  ml_generate_text_result['predictions'][0]['safetyAttributes']
    AS safety_attributes,
  * EXCEPT (ml_generate_text_result)
FROM
  ML.GENERATE_TEXT(
    MODEL `movie_insights.llm_model`,
    (
 SELECT
      CONCAT('FROM THE FOLLOWING TEXT ABOUT MOVIES, WHAT DO YOU THINK ARE THE FACTORS INFLUENCING A MOVIE SCORE TO BE GREATER THAN 5?: ', movie_data) AS prompt
    FROM (
      SELECT
        REPLACE(STRING_AGG( CONCAT('A movie named ',name, ' from the country ', country, ' with a censor rating of ',rating, ' and a budget of ', budget, ' produced by ', company, ' with a runtime of about ', runtime, ' and in the genre ', genre, ' starring ', star, ' has had a success score of ', score, '') ), ',','. ') AS movie_data
      FROM (
        SELECT
          *
        FROM
          `movie_insights.movie_score`
        WHERE
          CAST(SCORE AS INT64) > 5
        LIMIT
          50) ) AS MOVIES
    ),
    STRUCT(
      0.2 AS temperature,
      100 AS max_output_tokens));

**Объяснение:

ml_generate_text_result** — это ответ модели генерации текста в формате JSON, который содержит как содержимое, так и атрибуты безопасности: a. Содержимое представляет собой сгенерированный текстовый результат b. Атрибуты безопасности представляют собой встроенный фильтр контента с настраиваемым пороговым значением, который включен в Vertex AI Palm API, чтобы избежать любых непреднамеренных или непредвиденных ответов от большой языковой модели — ответ блокируется, если он нарушает порог безопасности.

ML.GENERATE_TEXT — это конструкция, которую вы используете в BigQuery для доступа к Vertex AI LLM для выполнения задач по генерации текста.

CONCAT добавляет оператор PROMPT и запись базы данных.

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

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

Max_output_tokens — количество слов, которые вы хотите получить в ответ.

Ответ на запрос выглядит следующим образом:

a3691afc0a97e724.png

Как видите, ответ вложен и неформатирован.

10. Сгладьте результат запроса

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

SELECT
  *
FROM
  ML.GENERATE_TEXT( MODEL movie_insights.llm_model,
    (
    SELECT
      CONCAT('FROM THE FOLLOWING TEXT ABOUT MOVIES, WHAT DO YOU THINK ARE THE FACTORS INFLUENCING A MOVIE SCORE TO BE GREATER THAN 5?: ', movie_data) AS prompt
    FROM (
      SELECT
        REPLACE(STRING_AGG( CONCAT('A movie named ',name, ' from the country ', country, ' with a censor rating of ',rating, ' and a budget of ', budget, ' produced by ', company, ' with a runtime of about ', runtime, ' and in the genre ', genre, ' starring ', star, ' has had a success score of ', score, '') ), ',','. ') AS movie_data
      FROM (
        SELECT
          *
        FROM
          `movie_insights.movie_score`
        WHERE
          CAST(SCORE AS INT64) > 5
        LIMIT
          50) ) AS MOVIES),
    STRUCT( 0.2 AS temperature,
      100 AS max_output_tokens,
      TRUE AS flatten_json_output));

**Объяснение:

Flatten_json_output** представляет собой логическое значение, которое, если установлено значение true, возвращает простой понятный текст, извлеченный из ответа JSON.

Ответ на запрос выглядит следующим образом:

1aaa0c514fccab59.png

11. Очистка

Чтобы избежать взимания платы с вашей учетной записи Google Cloud за ресурсы, используемые в этом посте, вы можете удалить конечную точку Vertex AI, созданную на этапе ML, перейдя на страницу Vertex AI Endpoint.

12. Поздравления

Поздравляем! Вы успешно создали модель BQML и выполнили аналитику на основе LLM с использованием API Vertex AI для набора данных ваших фильмов только с помощью SQL-запросов. Ознакомьтесь с документацией по продукту Vertex AI LLM , чтобы узнать больше о доступных моделях.