1. Обзор
В различных отраслях патентные исследования являются важнейшим инструментом для понимания конкурентной среды, выявления потенциальных возможностей лицензирования или приобретения, а также предотвращения нарушения существующих патентов.
Патентные исследования обширны и сложны. Проанализировать бесчисленные технические рефераты в поисках соответствующих инноваций — непростая задача. Традиционный поиск по ключевым словам часто бывает неточным и отнимает много времени. Тезисы длинные и технические, что затрудняет быстрое понимание основной идеи. Это может привести к тому, что исследователи упустят ключевые патенты или потратят время на получение нерелевантных результатов.
Цель
В этой лаборатории мы будем работать над тем, чтобы сделать процесс поиска патентов более быстрым, интуитивно понятным и невероятно точным за счет использования Spanner и встроенных Gemini 1.0 Pro, Embeddings и Vector Search.
Что ты построишь
В рамках этой лабораторной работы вы:
- Создайте экземпляр Spanner
- Загрузите общедоступные наборы данных Google Patents
- Создайте удаленную модель для внедрения текста с помощью модели Gemini 1.0 Pro.
- Создавайте генеративную информацию из загруженного набора данных
- Создание вложений на основе идей
- Выполнение поисковых запросов по сходству к набору данных
На следующей диаграмме представлен поток данных и шаги, необходимые для реализации.
Требования
2. Прежде чем начать
Создать проект
- В Google Cloud Console на странице выбора проекта выберите или создайте проект Google Cloud.
- Убедитесь, что для вашего облачного проекта включена оплата. Узнайте, как проверить, включена ли оплата в проекте .
- Вы будете использовать Cloud Shell , среду командной строки, работающую в Google Cloud, в которую предварительно загружен bq. Нажмите «Активировать Cloud Shell» в верхней части консоли Google Cloud.
- После подключения к Cloud Shell вы проверяете, что вы уже прошли аутентификацию и что для проекта установлен идентификатор вашего проекта, с помощью следующей команды:
gcloud auth list
- Выполните следующую команду в Cloud Shell, чтобы убедиться, что команда gcloud знает о вашем проекте.
gcloud config list project
- Если ваш проект не установлен, используйте следующую команду, чтобы установить его:
gcloud config set project <YOUR_PROJECT_ID>
- Убедитесь, что API-интерфейсы Vertex AI и Spanner включены, выполнив поиск в консоли. Альтернативно вы также можете использовать следующую команду в терминале Cloud Shell:
gcloud services enable spanner.googleapis.com --project <<YOUR_PROJECT_ID>>
gcloud services enable aiplatform.googleapis.com --project <<YOUR_PROJECT_ID>>
Другой вариант — использовать эту ссылку .
Обратитесь к документации по командам и использованию gcloud.
3. Подготовьте базу данных гаечных ключей.
Давайте создадим экземпляр Spanner, базу данных и таблицу, в которую будет загружен набор патентных данных.
Создайте экземпляр Spanner
- Создайте экземпляр Spanner с именем
spanner-vertex
.
gcloud spanner instances create spanner-vertex \
--config=regional-us-central1 \
--description=spanner-vertex \
--nodes=1
Создать базу данных
- В консоли Google Cloud откройте страницу Spanner .
- Выберите экземпляр
spanner-vertex
из списка. - В разделе «Базы данных» нажмите «Создать базу данных» .
- Установите имя базы данных «патенты».
- Нажмите «Создать» , чтобы создать базу данных.
Создать таблицу
- В консоли Google Cloud откройте страницу Spanner .
- Выберите экземпляр
spanner-vertex
из списка. - Выберите базу данных
patents
. - На вкладке «Таблицы» нажмите «Создать таблицу» . Откроется страница Spanner Studio.
- Откройте новую вкладку, щелкнув вкладку «Новый редактор SQL» .
- Запустите следующий запрос:
CREATE TABLE patents_data (
id string(25), type string(25), number string(20), country string(2), date string(20), abstract string(300000), title string(100000),kind string(5), num_claims numeric, filename string(100), withdrawn numeric,
) PRIMARY KEY (id);
4. Загрузите патентные данные в базу данных.
В качестве нашего набора данных будут использоваться общедоступные наборы данных Google Patents на BigQuery. Мы будем использовать Spanner Studio для выполнения наших запросов. Репозиторий spanner-gemini-search включает скрипт insert_into_patents_data.sql
, который мы запустим для загрузки патентных данных.
- В консоли Google Cloud откройте страницу Spanner .
- Выберите экземпляр
spanner-vertex
из списка. - Выберите базу данных
patents
. - В меню навигации нажмите Spanner Studio . На панели Проводника отображается список объектов в вашей базе данных.
- Откройте новую вкладку, щелкнув вкладку «Новый редактор SQL» .
- Скопируйте оператор запроса
insert
из сценарияinsert_into_patents_data.sql
в редакторе. Вы можете скопировать 50–100 операторов вставки для быстрой демонстрации этого варианта использования. - Нажмите «Выполнить» . Результаты вашего запроса появятся в таблице «Результаты» .
5. Создайте удаленную модель для Gemini 1.0 Pro.
После загрузки данных о патенте в базу данных мы создадим удаленную модель, которая использует модель Gemini 1.0 Pro Vertex AI для генерации сводного набора названий и ключевых слов.
Запустите следующую команду DDL в редакторе Spanner Studio:
- В меню навигации нажмите Spanner Studio . На панели Проводника отображается список объектов в вашей базе данных.
- Откройте новую вкладку, щелкнув вкладку «Новый редактор SQL» .
- Запустите следующий запрос:
CREATE MODEL gemini_pro_model INPUT(
prompt STRING(MAX),
) OUTPUT(
content STRING(MAX),
) REMOTE OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/<<YOUR_PROJECT_ID>>/locations/us-central1/publishers/google/models/gemini-pro',
default_batch_size = 1
);
- Нажмите «Выполнить» . Результаты вашего запроса появятся в таблице «Результаты» .
6. Создайте удаленную модель для встраивания текста
Результатом предыдущего шага является сводная сводка, состоящая из заголовка и ключевых слов. Мы преобразуем этот ответ во встраивания, которые помогут нам генерировать соответствующие совпадения при выполнении запроса. Мы будем использовать Text Embedding Gecko 003 model
от Vertex AI удаленно из Spanner.
- В меню навигации нажмите Spanner Studio . На панели Проводника отображается список объектов в вашей базе данных.
- Откройте новую вкладку, щелкнув вкладку «Новый редактор SQL» .
- Запустите следующий запрос:
CREATE MODEL text_embeddings INPUT(content STRING(MAX))
OUTPUT(
embeddings
STRUCT<
statistics STRUCT<truncated BOOL, token_count FLOAT64>,
values ARRAY<FLOAT64>>
)
REMOTE OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/<<YOUR_PROJECT_ID>>/locations/us-central1/publishers/google/models/textembedding-gecko@003');
- Нажмите «Выполнить» . Результаты вашего запроса появятся в таблице «Результаты» .
7. Создайте генеративную информацию из рефератов патентов
Мы создадим таблицу patents_data_gemini
для хранения генеративной информации, которую мы сгенерируем с помощью модели Gemini 1.5 Pro, которую мы создали ранее.
Создать таблицу
- В меню навигации нажмите Spanner Studio . На панели Проводника отображается список объектов в вашей базе данных.
- Откройте новую вкладку, щелкнув вкладку «Новый редактор SQL» .
- Запустите следующий запрос:
CREATE TABLE patents_data_gemini (id string(100), gemini_response STRING(MAX)) PRIMARY KEY (id);
- Нажмите «Выполнить» . Результаты вашего запроса появятся в таблице «Результаты» .
Генерируйте идеи
Чтобы заполнить таблицу генеративной информацией, рекомендуется использовать приложение, использующее метод пакетной записи или мутаций. В этой лаборатории кода мы выполним следующий запрос DDL до 4 раз, чтобы заполнить таблицу.
INSERT INTO patents_data_gemini (id, gemini_response)
SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b where id not in (select id from patents_data_gemini) limit 50
));
Примечание. Если на этом этапе вы получаете сообщение об ошибке «Превышение квоты» (возможно в случае бесплатных кредитов с небольшой маржой), попробуйте пропустить вставку и запустить только запрос выбора, описанный в разделе обходного пути ниже.
Раздел обходных решений:
SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b limit 50
))
Наблюдайте за инсайтами
В таблицу включены аналитические данные, созданные для запроса 'Identify the areas of work or keywords in this abstract',
.
Примечание. Если вы выполнили приведенный выше запрос раздела обходного решения вместо INSERT DDL, пропустите эту часть и вместо этого запустите последний запрос SELECT на этой странице.
Давайте выполним следующий запрос, чтобы проверить результаты анализа:
select title, abstract, gemini_response from patents_data a inner join patents_data_gemini b
on a.id = b.id;
Видны следующие результаты:
Примечание. Если вы выполнили запрос раздела обходного решения, замените имя таблицы в приведенном выше запросе выбора на запрос в разделе обходного решения. Вместо этого вы должны запустить следующее:
select title, abstract, gemini_response from patents_data a inner join (SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b limit 50
))) b
on a.id = b.id;
Результат должен быть таким же, как на скриншоте выше.
8. Создайте вложения для сгенерированной информации
После заполнения информации в нашей таблице мы теперь можем использовать эту информацию для создания вложений. Эти встраивания помогают нам не полагаться на точные совпадения ключевых слов, а помогают генерировать результаты, основанные на концептуальном сходстве.
Примечание. Если вы выполнили запрос раздела обходного решения на предыдущем шаге, вы можете пропустить его и перейти к запросу раздела обходного решения на этом шаге.
Запустите следующий запрос для создания вложений:
- В меню навигации нажмите Spanner Studio . На панели Проводника отображается список объектов в вашей базе данных.
- Откройте новую вкладку, щелкнув вкладку «Новый редактор SQL» .
- Выполните следующий запрос, чтобы создать таблицу
patents_data_embeddings
.
CREATE TABLE patents_data_embeddings (id string(100), patents_embeddings ARRAY<FLOAT64>) PRIMARY KEY (id);
- Нажмите «Выполнить» . Результаты вашего запроса появятся в таблице «Результаты» .
- Запустите следующий запрос, чтобы создать внедрения.
INSERT INTO patents_data_embeddings (id, patents_embeddings)
SELECT id, embeddings.values as patents_embeddings
FROM ML.PREDICT(MODEL text_embeddings,
(SELECT id, gemini_response as content FROM patents_data_gemini));
- Нажмите «Выполнить» . Результаты вашего запроса появятся в таблице «Результаты» .
Наблюдайте за результатами
Таблица включает встраивания, созданные для заголовка и абстрактного текста.
Давайте запустим следующий запрос, чтобы проверить результаты:
select title, abstract, b.patents_embeddings from patents_data a inner join patents_data_embeddings b
on a.id = b.id;
Видны следующие результаты:
Раздел обходных решений :
Используйте этот запрос, если вы выполнили раздел обходного решения на других шагах:
select title, abstract, b.patents_embeddings from patents_data a inner join
(SELECT id, embeddings.values as patents_embeddings
FROM ML.PREDICT(MODEL text_embeddings,
(SELECT id, gemini_response as content FROM (SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b limit 50
)))))) b
on a.id = b.id;
Это должно привести к тем же результатам, что показано на скриншоте выше.
9. Подготовьтесь к векторному поиску
Теперь, когда мы создали встраивание текста, мы можем подготовить наше веб-приложение к выполнению поиска векторов сходства. В этой кодовой лаборатории мы создаем веб-приложение, которое включает в себя логику для предоставления результатов поиска на основе возможности поиска по сходству K-ближайших соседей . Вы можете использовать этот подготовленный набор данных с приложением поиска, чтобы визуализировать, как выглядят результаты поиска.
Для нашей лаборатории кода мы запустим пример запроса, который ищет подсказку, генерирует результаты на основе контекста и ограничивает результаты 10 записями.
Запустите следующий запрос:
- В меню навигации нажмите Spanner Studio . На панели Проводника отображается список объектов в вашей базе данных.
- Откройте новую вкладку, щелкнув вкладку «Новый редактор SQL» .
- Выполните следующий запрос, чтобы создать таблицу
patents_data_embeddings
.
SELECT a.id, a.title, a.abstract, 'A new Natural Language Processing related Machine Learning Model' search_text, COSINE_DISTANCE(c.patents_embeddings,
(SELECT embeddings.values
FROM ML.PREDICT(
MODEL text_embeddings,
(SELECT 'A new Natural Language Processing related Machine Learning Model' as content)))) as distance
FROM patents_data a inner join patents_data_gemini b on a.id = b.id
inner join patents_data_embeddings c on a.id = c.id
ORDER BY distance
LIMIT 10;
- Нажмите «Выполнить» . Результаты вашего запроса появятся в таблице «Результаты» .
Примечание. Если вы использовали запросы из раздела обходных решений, из-за ошибок квоты в одном из самых ранних операторов вставки вы можете пропустить все остальные шаги и напрямую запустить приведенный ниже запрос, чтобы просмотреть результаты поиска ближайшего соседа для векторных вложений в База данных гаечных ключей:
SELECT a.id, a.title, a.abstract, 'A new Natural Language Processing related Machine Learning Model' search_text, COSINE_DISTANCE(c.patents_embeddings,
(SELECT embeddings.values
FROM ML.PREDICT(
MODEL text_embeddings,
(SELECT 'A new Natural Language Processing related Machine Learning Model' as content)))) as distance
FROM patents_data a inner join (SELECT id, embeddings.values as patents_embeddings
FROM ML.PREDICT(MODEL text_embeddings,
(SELECT id, gemini_response as content FROM (SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b
)))))) c on a.id = c.id
ORDER BY distance
LIMIT 2;
Наблюдайте за результатами
В предыдущем запросе используется метод COSINE_DISTANCE
для поиска 10 ближайших совпадений для нашего приглашения.
Видны следующие результаты:
Полученные результаты по контексту очень близки к подсказке, которая была частью запроса.
10. Очистка
Чтобы избежать списания средств с вашей учетной записи Google Cloud за ресурсы, используемые в этом посте, выполните следующие действия:
- В консоли Google Cloud перейдите на страницу «Управление ресурсами» .
- В списке проектов выберите проект, который хотите удалить, и нажмите «Удалить» . Если вы не хотите удалять проект, просто удалите экземпляр, созданный вами в Spanner.
- В диалоговом окне введите идентификатор проекта, а затем нажмите «Завершить работу» , чтобы удалить проект.
11. Поздравления
Поздравляем! Вы успешно выполнили поиск по сходству с помощью встроенного векторного поиска Spanner. Кроме того, вы увидели, насколько легко работать с моделями внедрения и LLM, чтобы обеспечить генеративные функции ИИ непосредственно с помощью SQL.
Что дальше?
Узнайте больше о функции точного ближайшего соседа Spanner (поиск векторов KNN) здесь: https://cloud.google.com/spanner/docs/find-k-nearest-neighbors
Вы также можете узнать больше о том, как выполнять онлайн-прогнозы с помощью SQL с использованием интеграции VertexAI от Spanner здесь: https://cloud.google.com/spanner/docs/ml