1. 總覽
在各行各業中,專利研究都是瞭解競爭環境、發掘潛在授權或收購機會,以及避免侵犯現有專利的重要工具。
專利研究範圍廣泛且複雜,從無數技術摘要中篩選出相關創新內容,是一項艱鉅的任務。傳統的關鍵字搜尋往往不準確且耗時。摘要冗長且技術性高,難以快速掌握核心概念。這可能會導致研究人員錯過重要專利,或在不相關的結果上浪費時間。
目標
在本程式碼研究室中,我們將運用 Spanner、Gemini 1.0 Pro、Embeddings 和 Vector Search,讓專利搜尋程序更快、更直覺,且精準度極高。
建構項目
本實驗室的學習內容包括:
- 可建立 Spanner 執行個體
- 載入 Google 專利公開資料集
- 使用 Gemini 1.0 Pro 模型建立文字嵌入的遠端模型
- 從載入的資料集產生生成式洞察資訊
- 從洞察資料生成嵌入
- 對資料集發出問題相似度搜尋查詢
下圖說明實作時的資料流和步驟。

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

- 連至 Cloud Shell 後,請使用下列指令確認驗證已完成,專案也已設為獲派的專案 ID:
gcloud auth list
- 在 Cloud Shell 中執行下列指令,確認 gcloud 指令已瞭解您的專案。
gcloud config list project
- 如果未設定專案,請使用下列指令來設定:
gcloud config set project <YOUR_PROJECT_ID>
- 在控制台中搜尋 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 執行個體
- 建立名為
spanner-vertex的 Spanner 執行個體。
gcloud spanner instances create spanner-vertex \
--config=regional-us-central1 \
--description=spanner-vertex \
--nodes=1
建立資料庫
- 在 Google Cloud 控制台中,開啟「Spanner」頁面。
- 從清單中選取
spanner-vertex執行個體。 - 在「資料庫」下方,按一下「建立資料庫」。
- 將資料庫名稱設為「patents」。
- 按一下「建立」即可建立資料庫。
建立資料表
- 在 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. 將專利資料載入資料庫
我們將使用 BigQuery 上的 Google 專利公開資料集做為資料集。我們將使用 Spanner Studio 執行查詢。spanner-gemini-search 存放區包含 insert_into_patents_data.sql 指令碼,我們將執行該指令碼來載入專利資料。
- 在 Google Cloud 控制台中,開啟「Spanner」頁面。
- 從清單中選取
spanner-vertex執行個體。 - 選取
patents資料庫。 - 在導覽選單中,按一下「Spanner Studio」。「Explorer」窗格會顯示資料庫中的物件清單。
- 按一下「開啟新的 SQL 編輯器分頁」,開啟新分頁。
- 從編輯器中的
insert_into_patents_data.sql指令碼複製insert查詢陳述式。您可以複製 50 到 100 個插入陳述式,快速展示這個用途。 - 按一下「執行」。查詢結果會顯示在「結果」表格中。
5. 為 Gemini 1.0 Pro 建立遠端模型
將專利資料載入資料庫後,我們會建立遠端模型,使用 Gemini 1.0 Pro Vertex AI 模型生成摘要標題和關鍵字。
在 Spanner Studio 編輯器中執行下列 DDL 指令:
- 在導覽選單中,按一下「Spanner Studio」。「Explorer」窗格會顯示資料庫中的物件清單。
- 按一下「開啟新的 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. 建立文字嵌入的遠端模型
前一個步驟的結果會包含整合摘要,其中包含標題和關鍵字。我們會將這項回覆轉換為嵌入,以便在執行查詢時產生適當的相符結果。我們會從 Spanner 遠端使用 Vertex AI 的 Text Embedding Gecko 003 model。
- 在導覽選單中,按一下「Spanner Studio」。「Explorer」窗格會顯示資料庫中的物件清單。
- 按一下「開啟新的 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」。「Explorer」窗格會顯示資料庫中的物件清單。
- 按一下「開啟新的 SQL 編輯器分頁」,開啟新分頁。
- 執行以下查詢:
CREATE TABLE patents_data_gemini (id string(100), gemini_response STRING(MAX)) PRIMARY KEY (id);
- 按一下「執行」。查詢結果會顯示在「結果」表格中。
產生深入分析資訊
如要使用生成式洞察資料填入表格,建議使用批次寫入或突變方法。在本程式碼研究室中,我們最多會執行 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;
結果如下:

注意:如果您已執行「解決方法」一節中的查詢,請將上述 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. 為生成的洞察資料生成嵌入
在資料表中填入洞察資料後,我們現在可以使用這些洞察資料生成嵌入內容。這些嵌入內容可協助我們根據概念相似性產生結果,而不只是比對關鍵字。
注意:如果您在上一個步驟中執行了變通方法專區查詢,可以略過這個步驟,直接執行變通方法專區查詢。
執行下列查詢來生成嵌入:
- 在導覽選單中,按一下「Spanner Studio」。「Explorer」窗格會顯示資料庫中的物件清單。
- 按一下「開啟新的 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」。「Explorer」窗格會顯示資料庫中的物件清單。
- 按一下「開啟新的 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;
- 按一下「執行」。查詢結果會顯示在「結果」表格中。
注意:如果您使用因應措施一節中的查詢,由於其中一個最早的插入陳述式發生配額錯誤,您可以略過所有其他步驟,直接執行下列查詢,觀察在 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 個結果。
結果如下:

生成的結果在語境上與查詢中的提示相當接近。
10. 清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取本文章所用資源的費用,請按照下列步驟操作:
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