1. 總覽
在各個產業中,專利研究是瞭解競爭環境、找出潛在的授權或收購商機,以及避免侵害現有專利的重要工具。
專利研究範圍廣泛且複雜。篩選無數的技術摘要,找出相關的創新技術,是一項艱鉅的任務。傳統的關鍵字搜尋方式往往不準確且耗時。摘要內容冗長且技術性,很難讓讀者快速掌握核心概念。這可能導致研究人員錯過重要專利,或浪費時間在無關的結果上。
目標
在本程式碼研究室中,我們將利用 Spanner 和原地 Gemini 1.0 Pro、嵌入和向量搜尋,讓專利搜尋過程更快速、更直覺且精確無比。
建構項目
在本研究室中,您將:
- 可建立 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頁面。
- 從清單中選取
spanner-vertex
執行個體。 - 在「資料庫」下方,點選「建立資料庫」。
- 將資料庫名稱設為 patents。
- 按一下「建立」,建立資料庫。
建立表格
- 在 Google Cloud 控制台中開啟「Spanner」Spanner頁面。
- 從清單中選取
spanner-vertex
執行個體。 - 選取
patents
資料庫。 - 在「資料表」分頁下方,按一下「建立資料表」。Spanner Studio 頁面隨即開啟。
- 按一下「New SQL editor」分頁,開啟新的分頁。
- 執行以下查詢:
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 Patents 公開資料集做為資料集。我們將使用 Spanner Studio 執行查詢。spanner-gemini-search 存放區包含我們要執行的 insert_into_patents_data.sql
指令碼,用於載入專利資料。
- 在 Google Cloud 控制台中開啟「Spanner」Spanner頁面。
- 從清單中選取
spanner-vertex
執行個體。 - 選取
patents
資料庫。 - 在導覽選單中,按一下「Spanner Studio」。「Explorer」窗格會顯示資料庫中的物件清單。
- 按一下「New SQL editor」分頁,開啟新的分頁。
- 從編輯器中的
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」窗格會顯示資料庫中的物件清單。
- 按一下「New SQL editor」分頁,開啟新的分頁。
- 執行以下查詢:
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」窗格會顯示資料庫中的物件清單。
- 按一下「New SQL editor」分頁,開啟新的分頁。
- 執行以下查詢:
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」窗格會顯示資料庫中的物件清單。
- 按一下「New SQL editor」分頁,開啟新的分頁。
- 執行以下查詢:
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
));
注意:如果您在這個步驟中收到「Quota Exceeded」錯誤 (如果您使用的是免費額度較少的方案,就有可能發生這種情況),請嘗試略過插入作業,只執行下方因應措施部分中的選取查詢。
解決方法部分:
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」。「Explorer」窗格會顯示資料庫中的物件清單。
- 按一下「New SQL editor」分頁,開啟新的分頁。
- 執行下列查詢,建立
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-Nearest Neighbors 相似度搜尋功能提供搜尋結果的邏輯。您可以將這個準備好的資料集搭配搜尋應用程式使用,以視覺化方式呈現搜尋結果。
在程式碼研究室中,我們將執行範例查詢,搜尋提示、根據內容產生結果,並將結果限制在 10 個項目。
執行以下查詢:
- 在導覽選單中,按一下「Spanner Studio」。「Explorer」窗格會顯示資料庫中的物件清單。
- 按一下「New SQL editor」分頁,開啟新的分頁。
- 執行下列查詢,建立
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 內建的向量搜尋功能執行相似度搜尋。此外,您也瞭解如何輕鬆使用嵌入和大型語言模型,直接透過 SQL 提供生成式 AI 功能。
後續步驟
如要進一步瞭解 Spanner 的 K 近鄰 (KNN 向量搜尋) 功能,請參閱以下網頁:https://cloud.google.com/spanner/docs/find-k-nearest-neighbors
您也可以參閱 https://cloud.google.com/spanner/docs/ml 進一步瞭解如何使用 Spanner 的 VertexAI 整合功能,透過 SQL 執行線上預測。