使用 Spanner、Vector Search 建構專利搜尋應用程式;Gemini 1.0 Pro!

1. 總覽

在各行各業中,專利研究都是瞭解競爭環境、發掘潛在授權或收購機會,以及避免侵犯現有專利的重要工具。

專利研究範圍廣泛且複雜,從無數技術摘要中篩選出相關創新內容,是一項艱鉅的任務。傳統的關鍵字搜尋往往不準確且耗時。摘要冗長且技術性高,難以快速掌握核心概念。這可能會導致研究人員錯過重要專利,或在不相關的結果上浪費時間。

目標

在本程式碼研究室中,我們將運用 Spanner、Gemini 1.0 Pro、Embeddings 和 Vector Search,讓專利搜尋程序更快、更直覺,且精準度極高。

建構項目

本實驗室的學習內容包括:

  1. 可建立 Spanner 執行個體
  2. 載入 Google 專利公開資料集
  3. 使用 Gemini 1.0 Pro 模型建立文字嵌入的遠端模型
  4. 從載入的資料集產生生成式洞察資訊
  5. 從洞察資料生成嵌入
  6. 對資料集發出問題相似度搜尋查詢

下圖說明實作時的資料流和步驟。

14cfdde5e24258a.png

需求條件

  • ChromeFirefox 瀏覽器
  • 已啟用計費功能的 Google Cloud 專案。

2. 事前準備

建立專案

  1. Google Cloud 控制台的專案選取器頁面中,選取或建立 Google Cloud 專案
  2. 確認 Cloud 專案已啟用計費功能。瞭解如何檢查專案是否已啟用計費功能
  3. 您將使用 Cloud Shell,這是 Google Cloud 中執行的指令列環境,預先載入了 bq。點選 Google Cloud 控制台頂端的「啟用 Cloud Shell」。

「啟用 Cloud Shell」按鈕圖片

  1. 連至 Cloud Shell 後,請使用下列指令確認驗證已完成,專案也已設為獲派的專案 ID:
gcloud auth list
  1. 在 Cloud Shell 中執行下列指令,確認 gcloud 指令已瞭解您的專案。
gcloud config list project
  1. 如果未設定專案,請使用下列指令來設定:
gcloud config set project <YOUR_PROJECT_ID>
  1. 在控制台中搜尋 Vertex AI 和 Spanner API,確認已啟用這些 API。或者,您也可以在 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 執行個體

  1. 建立名為 spanner-vertexSpanner 執行個體
gcloud spanner instances create spanner-vertex \
--config=regional-us-central1 \
--description=spanner-vertex \
--nodes=1

建立資料庫

  1. 在 Google Cloud 控制台中,開啟「Spanner」頁面。
  2. 從清單中選取 spanner-vertex 執行個體。
  3. 在「資料庫」下方,按一下「建立資料庫」
  4. 將資料庫名稱設為「patents」。
  5. 按一下「建立」即可建立資料庫。

建立資料表

  1. 在 Google Cloud 控制台中,開啟「Spanner」頁面。
  2. 從清單中選取 spanner-vertex 執行個體。
  3. 選取 patents 資料庫。
  4. 在「資料表」分頁下方,按一下「建立資料表」。系統會開啟 Spanner Studio 頁面。
  5. 按一下「開啟新的 SQL 編輯器分頁」,開啟新分頁。
  6. 執行以下查詢:
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. 將專利資料載入資料庫

我們將使用 BigQuery 上的 Google 專利公開資料集做為資料集。我們將使用 Spanner Studio 執行查詢。spanner-gemini-search 存放區包含 insert_into_patents_data.sql 指令碼,我們將執行該指令碼來載入專利資料。

  1. 在 Google Cloud 控制台中,開啟「Spanner」頁面。
  2. 從清單中選取 spanner-vertex 執行個體。
  3. 選取 patents 資料庫。
  4. 在導覽選單中,按一下「Spanner Studio」。「Explorer」窗格會顯示資料庫中的物件清單。
  5. 按一下「開啟新的 SQL 編輯器分頁」,開啟新分頁。
  6. 從編輯器中的 insert_into_patents_data.sql 指令碼複製 insert 查詢陳述式。您可以複製 50 到 100 個插入陳述式,快速展示這個用途。
  7. 按一下「執行」。查詢結果會顯示在「結果」表格中。

5. 為 Gemini 1.0 Pro 建立遠端模型

將專利資料載入資料庫後,我們會建立遠端模型,使用 Gemini 1.0 Pro Vertex AI 模型生成摘要標題和關鍵字。

在 Spanner Studio 編輯器中執行下列 DDL 指令:

  1. 在導覽選單中,按一下「Spanner Studio」。「Explorer」窗格會顯示資料庫中的物件清單。
  2. 按一下「開啟新的 SQL 編輯器分頁」,開啟新分頁。
  3. 執行以下查詢:
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
);
  1. 按一下「執行」。查詢結果會顯示在「結果」表格中。

6. 建立文字嵌入的遠端模型

前一個步驟的結果會包含整合摘要,其中包含標題和關鍵字。我們會將這項回覆轉換為嵌入,以便在執行查詢時產生適當的相符結果。我們會從 Spanner 遠端使用 Vertex AI 的 Text Embedding Gecko 003 model

  1. 在導覽選單中,按一下「Spanner Studio」。「Explorer」窗格會顯示資料庫中的物件清單。
  2. 按一下「開啟新的 SQL 編輯器分頁」,開啟新分頁。
  3. 執行以下查詢:
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');
  1. 按一下「執行」。查詢結果會顯示在「結果」表格中。

7. 從專利摘要建立生成式洞察資料

我們會建立 patents_data_gemini 表格,儲存稍早使用 Gemini 1.5 Pro 模型生成的生成式洞察資料。

建立資料表

  1. 在導覽選單中,按一下「Spanner Studio」。「Explorer」窗格會顯示資料庫中的物件清單。
  2. 按一下「開啟新的 SQL 編輯器分頁」,開啟新分頁。
  3. 執行以下查詢:
CREATE TABLE patents_data_gemini (id string(100), gemini_response STRING(MAX)) PRIMARY KEY (id);
  1. 按一下「執行」。查詢結果會顯示在「結果」表格中。

產生深入分析資訊

如要使用生成式洞察資料填入表格,建議使用批次寫入或突變方法。在本程式碼研究室中,我們最多會執行 4 次下列 DDL 查詢,以填入資料表。

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;

結果如下:

6041fab164aaab93.png

注意:如果您已執行「解決方法」一節中的查詢,請將上述 select 查詢中的表格名稱,替換為「解決方法」一節中的查詢。因此請改為執行下列指令:

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. 為生成的洞察資料生成嵌入

在資料表中填入洞察資料後,我們現在可以使用這些洞察資料生成嵌入內容。這些嵌入內容可協助我們根據概念相似性產生結果,而不只是比對關鍵字。

注意:如果您在上一個步驟中執行了變通方法專區查詢,可以略過這個步驟,直接執行變通方法專區查詢。

執行下列查詢來生成嵌入:

  1. 在導覽選單中,按一下「Spanner Studio」。「Explorer」窗格會顯示資料庫中的物件清單。
  2. 按一下「開啟新的 SQL 編輯器分頁」,開啟新分頁。
  3. 執行下列查詢來建立 patents_data_embeddings 資料表。
CREATE TABLE patents_data_embeddings (id string(100), patents_embeddings ARRAY<FLOAT64>) PRIMARY KEY (id);
  1. 按一下「執行」。查詢結果會顯示在「結果」表格中。
  2. 執行下列查詢來生成嵌入。
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));
  1. 按一下「執行」。查詢結果會顯示在「結果」表格中。

查看結果

表格會顯示為標題和摘要文字生成的嵌入。

請執行下列查詢來驗證結果:

select title, abstract, b.patents_embeddings from patents_data a inner join patents_data_embeddings b
on a.id = b.id;

結果如下:

a1e968bac4ab1cb.png

解決方法

如果您在其他步驟中使用了變通方法,請使用下列查詢:

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 個項目。

執行以下查詢:

  1. 在導覽選單中,按一下「Spanner Studio」。「Explorer」窗格會顯示資料庫中的物件清單。
  2. 按一下「開啟新的 SQL 編輯器分頁」,開啟新分頁。
  3. 執行下列查詢來建立 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;
  1. 按一下「執行」。查詢結果會顯示在「結果」表格中。

注意:如果您使用因應措施一節中的查詢,由於其中一個最早的插入陳述式發生配額錯誤,您可以略過所有其他步驟,直接執行下列查詢,觀察在 Spanner 資料庫中對向量嵌入執行最鄰近搜尋的結果:

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 個結果。

結果如下:

d26ca8b8238bdf25.png

生成的結果在語境上與查詢中的提示相當接近。

10. 清除所用資源

如要避免系統向您的 Google Cloud 帳戶收取本文章所用資源的費用,請按照下列步驟操作:

  1. 在 Google Cloud 控制台中前往「管理資源」頁面。
  2. 在專案清單中選取要刪除的專案,然後按一下「刪除」。如果不想刪除專案,只要刪除您在 Spanner 中建立的執行個體即可。
  3. 在對話方塊中輸入專案 ID,然後按一下「Shut down」(關閉) 即可刪除專案。

11. 恭喜

恭喜!您已成功使用 Spanner 內建的向量搜尋功能執行相似度搜尋。此外,您也瞭解到使用嵌入和 LLM 模型有多麼簡單,可以直接透過 SQL 提供生成式 AI 功能。

後續步驟

如要進一步瞭解 Spanner 的精確近鄰 (KNN 向量搜尋) 功能,請參閱:https://cloud.google.com/spanner/docs/find-k-nearest-neighbors

如要進一步瞭解如何使用 Spanner 的 Vertex AI 整合服務,透過 SQL 執行線上預測,請參閱:https://cloud.google.com/spanner/docs/ml