1. 總覽
專利研究在各行業中都是一項重要的工具,有助於瞭解競爭狀況、找出潛在的授權或獲取機會,以及避免侵犯現有專利。
專利研究是龐大而複雜的。要逐一篩選無數技術抽象化,以找出相關創新,是一項艱鉅的任務。傳統的關鍵字搜尋通常不準確且耗時。抽象化架構繁瑣,且需要專業技術,因此難以迅速掌握核心概念。這可能會導致研究人員錯失重要專利,或是耗費時間研究不相關的結果。
目標
在本程式碼研究室中,我們會利用 Spanner 以及就地運用的 Gemini 1.0 Pro、嵌入和 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頁面。
- 從清單中選取
spanner-vertex
例項。 - 在「資料庫」下方,按一下「建立資料庫」。
- 將資料庫名稱設為專利。
- 按一下「建立」來建立資料庫。
建立表格
- 在 Google Cloud 控制台中,開啟「Spanner」Spanner頁面。
- 從清單中選取
spanner-vertex
例項。 - 選取
patents
資料庫。 - 在「Tables」分頁下方,按一下 [Create Table]。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頁面。
- 從清單中選取
spanner-vertex
例項。 - 選取
patents
資料庫。 - 在導覽選單中,按一下「Spanner Studio」。「Explorer」Explorer窗格會顯示資料庫中的物件清單。
- 按一下「新增 SQL 編輯器」分頁標籤開啟新分頁。
- 從編輯器的
insert_into_patents_data.sql
指令碼複製insert
查詢陳述式。您可以複製 50 到 100 個插入陳述式,快速瞭解這個應用實例。 - 按一下「執行」。查詢結果會顯示在「Results」資料表中。
5. 建立 Gemini 1.0 Pro 適用的遠端模型
將專利資料載入資料庫後,我們會建立遠端模型,這個模型會使用 Gemini 1.0 Pro Vertex AI 模型,生成一組標題和關鍵字的摘要。
在 Spanner Studio 編輯器中執行下列 DDL 指令:
- 在導覽選單中,按一下「Spanner Studio」。「Explorer」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
);
- 按一下「執行」。查詢結果會顯示在「Results」資料表中。
6. 建立文字嵌入的遠端模型
先前的步驟會產生包含標題和關鍵字的合併摘要。我們會將此回應轉換為嵌入項目,方便我們在執行查詢時產生適當的比對結果。我們會從遠端透過 Spanner 使用 Vertex AI 中的 Text Embedding Gecko 003 model
。
- 在導覽選單中,按一下「Spanner Studio」。「Explorer」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');
- 按一下「執行」。查詢結果會顯示在「Results」資料表中。
7. 根據專利摘要建立生成式深入分析資訊
我們會建立 patents_data_gemini
資料表,用於儲存生成式深入分析資訊,這些深入分析資訊將使用我們先前建立的 Gemini 1.5 Pro 模型生成。
建立表格
- 在導覽選單中,按一下「Spanner Studio」。「Explorer」Explorer窗格會顯示資料庫中的物件清單。
- 按一下「新增 SQL 編輯器」分頁標籤開啟新分頁。
- 執行以下查詢:
CREATE TABLE patents_data_gemini (id string(100), gemini_response STRING(MAX)) PRIMARY KEY (id);
- 按一下「執行」。查詢結果會顯示在「Results」資料表中。
產生深入分析資訊
如要在資料表中填入生成式深入分析資訊,建議使用採用批次寫入或異動方法的應用程式。在這個程式碼研究室中,我們會最多執行下列 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 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」Explorer窗格會顯示資料庫中的物件清單。
- 按一下「新增 SQL 編輯器」分頁標籤開啟新分頁。
- 執行下列查詢來建立
patents_data_embeddings
資料表。
CREATE TABLE patents_data_embeddings (id string(100), patents_embeddings ARRAY<FLOAT64>) PRIMARY KEY (id);
- 按一下「執行」。查詢結果會顯示在「Results」資料表中。
- 執行下列查詢來產生嵌入。
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));
- 按一下「執行」。查詢結果會顯示在「Results」資料表中。
觀察結果
這份表格包含系統為標題和摘要文字產生的嵌入項目,
執行下列查詢來驗證結果:
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 Nearest Neighbors」相似搜尋功能提供搜尋結果的邏輯。您可以搭配搜尋應用程式使用這個準備的資料集,以視覺化方式呈現搜尋結果。
在本程式碼研究室中,我們會執行範例查詢來搜尋提示、根據情境產生結果,並將結果限制為 10 個項目。
執行以下查詢:
- 在導覽選單中,按一下「Spanner Studio」。「Explorer」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;
- 按一下「執行」。查詢結果會顯示在「Results」資料表中。
注意:如果您在最早的插入陳述式中因為有配額錯誤而使用「解決方法」一節中的查詢,可以略過所有其他步驟並直接執行下列查詢,以觀察在 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 最鄰近 (KNN 向量搜尋) 功能,請前往:https://cloud.google.com/spanner/docs/find-k-nearest-neighbors
您也可以造訪下列網址,進一步瞭解如何使用 Spanner 的 VertexAI 整合功能以 SQL 執行線上預測:https://cloud.google.com/spanner/docs/ml