1. Tổng quan
Trong nhiều ngành, nghiên cứu về bằng sáng chế là một công cụ quan trọng để hiểu rõ bối cảnh cạnh tranh, xác định các cơ hội tiềm năng về việc cấp phép hoặc mua lại và tránh vi phạm các bằng sáng chế hiện có.
Nghiên cứu về bằng sáng chế là một lĩnh vực rộng lớn và phức tạp. Việc sàng lọc vô số bản tóm tắt kỹ thuật để tìm ra những điểm cải tiến phù hợp là một việc khó khăn. Các cụm từ tìm kiếm truyền thống dựa trên từ khoá thường không chính xác và tốn thời gian. Bản tóm tắt dài dòng và mang tính kỹ thuật, khiến người đọc khó nắm bắt được ý tưởng cốt lõi một cách nhanh chóng. Điều này có thể khiến nhà nghiên cứu bỏ lỡ các bằng sáng chế quan trọng hoặc lãng phí thời gian vào những kết quả không liên quan.
Mục tiêu
Trong lớp học lập trình này, chúng ta sẽ nỗ lực để quy trình tìm kiếm bằng sáng chế diễn ra nhanh chóng, trực quan và cực kỳ chính xác bằng cách tận dụng Spanner, Gemini 1.0 Pro tại chỗ, Embeddings và Vector Search.
Sản phẩm bạn sẽ tạo ra
Trong phần này, bạn sẽ:
- Tạo một phiên bản Spanner
- Tải một Tập dữ liệu công khai của Google Bằng sáng chế
- Tạo mô hình từ xa cho các vectơ nhúng văn bản bằng mô hình Gemini 1.0 Pro
- Tạo thông tin chi tiết dựa trên AI tạo sinh từ tập dữ liệu đã tải
- Tạo các vectơ nhúng từ thông tin chi tiết
- Đưa ra các cụm từ tìm kiếm tương tự về vấn đề đối với tập dữ liệu
Sơ đồ sau đây minh hoạ luồng dữ liệu và các bước liên quan đến việc triển khai.

Yêu cầu
2. Trước khi bắt đầu
Tạo dự án
- Trong Google Cloud Console, trên trang chọn dự án, hãy chọn hoặc tạo một dự án trên Google Cloud.
- Đảm bảo rằng bạn đã bật tính năng thanh toán cho dự án trên đám mây của bạn. Tìm hiểu cách kiểm tra xem tính năng thanh toán có được bật trong một dự án hay không .
- Bạn sẽ sử dụng Cloud Shell, một môi trường dòng lệnh chạy trong Google Cloud và được tải sẵn bằng bq. Nhấp vào Kích hoạt Cloud Shell ở đầu bảng điều khiển Google Cloud.

- Sau khi kết nối với Cloud Shell, bạn có thể kiểm tra để đảm bảo rằng bạn đã được xác thực và dự án được đặt thành mã dự án của bạn bằng lệnh sau:
gcloud auth list
- Chạy lệnh sau trong Cloud Shell để xác nhận rằng lệnh gcloud biết về dự án của bạn.
gcloud config list project
- Nếu bạn chưa đặt dự án, hãy dùng lệnh sau để đặt:
gcloud config set project <YOUR_PROJECT_ID>
- Đảm bảo rằng bạn đã bật API Vertex AI và Spanner bằng cách tìm kiếm chúng trong bảng điều khiển. Ngoài ra, bạn cũng có thể dùng lệnh sau trong cửa sổ dòng lệnh Cloud Shell:
gcloud services enable spanner.googleapis.com --project <<YOUR_PROJECT_ID>>
gcloud services enable aiplatform.googleapis.com --project <<YOUR_PROJECT_ID>>
Một lựa chọn khác là sử dụng đường liên kết này.
Tham khảo tài liệu để biết các lệnh và cách sử dụng gcloud.
3. Chuẩn bị cơ sở dữ liệu Spanner
Hãy tạo một thực thể, cơ sở dữ liệu và bảng Spanner nơi tập dữ liệu bằng sáng chế sẽ được tải.
Tạo một phiên bản Spanner
- Tạo một phiên bản Spanner có tên là
spanner-vertex.
gcloud spanner instances create spanner-vertex \
--config=regional-us-central1 \
--description=spanner-vertex \
--nodes=1
Tạo cơ sở dữ liệu
- Trong bảng điều khiển Cloud, hãy mở trang Spanner.
- Chọn phiên bản
spanner-vertextrong danh sách. - Trong phần Cơ sở dữ liệu, hãy nhấp vào Tạo cơ sở dữ liệu.
- Đặt tên cơ sở dữ liệu thành patents.
- Nhấp vào Tạo để tạo cơ sở dữ liệu.
Tạo bảng
- Trong bảng điều khiển Cloud, hãy mở trang Spanner.
- Chọn phiên bản
spanner-vertextrong danh sách. - Chọn cơ sở dữ liệu
patents. - Trong thẻ Bảng, hãy nhấp vào Tạo bảng. Trang Spanner Studio sẽ mở ra.
- Mở một thẻ mới bằng cách nhấp vào New SQL editor tab (Thẻ trình chỉnh sửa SQL mới).
- Chạy truy vấn sau:
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. Tải dữ liệu bằng sáng chế vào cơ sở dữ liệu
Chúng tôi sẽ sử dụng Tập dữ liệu công khai về bằng sáng chế của Google trên BigQuery làm tập dữ liệu. Chúng ta sẽ sử dụng Spanner Studio để chạy các truy vấn. Kho lưu trữ spanner-gemini-search bao gồm tập lệnh insert_into_patents_data.sql mà chúng ta sẽ chạy để tải dữ liệu bằng sáng chế.
- Trong bảng điều khiển Cloud, hãy mở trang Spanner.
- Chọn phiên bản
spanner-vertextrong danh sách. - Chọn cơ sở dữ liệu
patents. - Trong trình đơn điều hướng, hãy nhấp vào Spanner Studio. Ngăn Explorer (Trình khám phá) cho thấy danh sách các đối tượng trong cơ sở dữ liệu của bạn.
- Mở một thẻ mới bằng cách nhấp vào New SQL editor tab (Thẻ trình chỉnh sửa SQL mới).
- Sao chép câu lệnh truy vấn
inserttừ tập lệnhinsert_into_patents_data.sqltrong trình chỉnh sửa. Bạn có thể sao chép 50 đến 100 câu lệnh chèn để xem bản minh hoạ nhanh về trường hợp sử dụng này. - Nhấp vào Chạy. Kết quả của truy vấn sẽ xuất hiện trong bảng Results (Kết quả).
5. Tạo Mô hình từ xa cho Gemini 1.0 Pro
Sau khi tải dữ liệu bằng sáng chế lên cơ sở dữ liệu, chúng tôi sẽ tạo một mô hình từ xa sử dụng mô hình AI Gemini 1.0 Pro Vertex AI để tạo một bộ tiêu đề và từ khoá được tóm tắt.
Chạy lệnh DDL sau trong Trình chỉnh sửa Spanner Studio:
- Trong trình đơn điều hướng, hãy nhấp vào Spanner Studio. Ngăn Explorer (Trình khám phá) cho thấy danh sách các đối tượng trong cơ sở dữ liệu của bạn.
- Mở một thẻ mới bằng cách nhấp vào New SQL editor tab (Thẻ trình chỉnh sửa SQL mới).
- Chạy truy vấn sau:
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
);
- Nhấp vào Chạy. Kết quả của truy vấn sẽ xuất hiện trong bảng Results (Kết quả).
6. Tạo Mô hình từ xa cho các câu nhúng văn bản
Kết quả của bước trước đó bao gồm một bản tóm tắt hợp nhất bao gồm tiêu đề và từ khoá. Chúng tôi sẽ chuyển đổi câu trả lời này thành các vectơ nhúng để giúp chúng tôi tạo ra các kết quả phù hợp khi chạy một cụm từ tìm kiếm. Chúng ta sẽ sử dụng Text Embedding Gecko 003 model từ Vertex AI từ xa qua Spanner.
- Trong trình đơn điều hướng, hãy nhấp vào Spanner Studio. Ngăn Explorer (Trình khám phá) cho thấy danh sách các đối tượng trong cơ sở dữ liệu của bạn.
- Mở một thẻ mới bằng cách nhấp vào New SQL editor tab (Thẻ trình chỉnh sửa SQL mới).
- Chạy truy vấn sau:
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');
- Nhấp vào Chạy. Kết quả của truy vấn sẽ xuất hiện trong bảng Results (Kết quả).
7. Tạo thông tin chi tiết dựa trên AI tạo sinh từ bản tóm tắt bằng sáng chế
Chúng ta sẽ tạo một bảng patents_data_gemini để lưu trữ thông tin chi tiết mang tính tạo sinh mà chúng ta sẽ tạo bằng mô hình Gemini 1.5 Pro mà chúng ta đã tạo trước đó.
Tạo bảng
- Trong trình đơn điều hướng, hãy nhấp vào Spanner Studio. Ngăn Explorer (Trình khám phá) cho thấy danh sách các đối tượng trong cơ sở dữ liệu của bạn.
- Mở một thẻ mới bằng cách nhấp vào New SQL editor tab (Thẻ trình chỉnh sửa SQL mới).
- Chạy truy vấn sau:
CREATE TABLE patents_data_gemini (id string(100), gemini_response STRING(MAX)) PRIMARY KEY (id);
- Nhấp vào Chạy. Kết quả của truy vấn sẽ xuất hiện trong bảng Results (Kết quả).
Tạo thông tin chi tiết
Để điền thông tin chi tiết được tạo vào bảng, bạn nên sử dụng một ứng dụng dùng phương thức ghi hàng loạt hoặc phương thức đột biến. Trong lớp học lập trình này, chúng ta sẽ chạy truy vấn DDL sau tối đa 4 lần để điền dữ liệu vào bảng.
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
));
Lưu ý: Nếu bạn gặp lỗi Quota Exceeded (Vượt quá hạn mức) ở bước này (có thể xảy ra trong trường hợp tín dụng miễn phí có lợi nhuận nhỏ), hãy thử bỏ qua bước chèn và chỉ chạy truy vấn chọn trong phần giải pháp bên dưới.
Phần giải pháp:
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
))
Xem thông tin chi tiết
Bảng này bao gồm thông tin chi tiết được tạo cho câu lệnh 'Identify the areas of work or keywords in this abstract', trong cụm từ tìm kiếm.
Lưu ý: Nếu bạn đã chạy truy vấn phần giải pháp ở trên thay vì INSERT DDL, thì hãy bỏ qua phần này và chạy truy vấn SELECT cuối cùng trên trang này.
Hãy chạy truy vấn sau để xác minh kết quả của thông tin chi tiết:
select title, abstract, gemini_response from patents_data a inner join patents_data_gemini b
on a.id = b.id;
Bạn sẽ thấy những kết quả sau:

Lưu ý: Nếu bạn đã chạy truy vấn trong phần giải pháp thay thế, hãy thay thế tên bảng trong truy vấn chọn ở trên bằng truy vấn trong phần giải pháp thay thế. Vì vậy, bạn sẽ chạy lệnh bên dưới:
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;
Kết quả sẽ giống như kết quả trong ảnh chụp màn hình ở trên.
8. Tạo các vectơ nhúng cho thông tin chi tiết được tạo
Sau khi điền thông tin chi tiết vào bảng, giờ đây, chúng ta có thể sử dụng những thông tin chi tiết này để tạo các mục nhúng. Các vectơ nhúng này giúp chúng tôi không phải dựa vào các cụm từ khoá khớp chính xác, mà giúp tạo ra kết quả dựa trên sự tương đồng về khái niệm.
Lưu ý: Nếu đã chạy truy vấn phần giải pháp trong bước trước, bạn có thể bỏ qua bước này và chuyển sang truy vấn phần giải pháp trong bước này.
Chạy truy vấn sau để tạo các vectơ nhúng:
- Trong trình đơn điều hướng, hãy nhấp vào Spanner Studio. Ngăn Explorer (Trình khám phá) cho thấy danh sách các đối tượng trong cơ sở dữ liệu của bạn.
- Mở một thẻ mới bằng cách nhấp vào New SQL editor tab (Thẻ trình chỉnh sửa SQL mới).
- Chạy truy vấn sau để tạo bảng
patents_data_embeddings.
CREATE TABLE patents_data_embeddings (id string(100), patents_embeddings ARRAY<FLOAT64>) PRIMARY KEY (id);
- Nhấp vào Chạy. Kết quả của truy vấn sẽ xuất hiện trong bảng Results (Kết quả).
- Chạy truy vấn sau để tạo các vectơ nhúng.
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));
- Nhấp vào Chạy. Kết quả của truy vấn sẽ xuất hiện trong bảng Results (Kết quả).
Quan sát kết quả
Bảng này bao gồm các mục nhúng được tạo cho tiêu đề và văn bản được trừu tượng hoá.
Hãy chạy truy vấn sau để xác minh kết quả:
select title, abstract, b.patents_embeddings from patents_data a inner join patents_data_embeddings b
on a.id = b.id;
Bạn sẽ thấy những kết quả sau:

Phần giải pháp:
Sử dụng truy vấn này nếu bạn đã thực hiện phần giải pháp thay thế trong các bước khác:
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;
Thao tác này sẽ cho ra kết quả giống như trong ảnh chụp màn hình ở trên.
9. Chuẩn bị cho tính năng tìm kiếm vectơ
Giờ đây, sau khi tạo các vectơ nhúng văn bản, chúng ta có thể chuẩn bị ứng dụng web để sẵn sàng thực hiện các tìm kiếm vectơ tương tự. Trong lớp học lập trình này, chúng ta sẽ tạo một ứng dụng web có chứa logic để đưa ra kết quả tìm kiếm dựa trên khả năng Tìm kiếm tương tự K lân cận gần nhất. Bạn có thể sử dụng tập dữ liệu đã chuẩn bị này với một ứng dụng tìm kiếm để hình dung cách kết quả tìm kiếm xuất hiện.
Trong lớp học lập trình này, chúng ta sẽ chạy một truy vấn mẫu để tìm kiếm một câu lệnh, tạo kết quả dựa trên bối cảnh và giới hạn kết quả ở 10 mục.
Chạy truy vấn sau:
- Trong trình đơn điều hướng, hãy nhấp vào Spanner Studio. Ngăn Explorer (Trình khám phá) cho thấy danh sách các đối tượng trong cơ sở dữ liệu của bạn.
- Mở một thẻ mới bằng cách nhấp vào New SQL editor tab (Thẻ trình chỉnh sửa SQL mới).
- Chạy truy vấn sau để tạo bảng
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;
- Nhấp vào Chạy. Kết quả của truy vấn sẽ xuất hiện trong bảng Results (Kết quả).
Lưu ý: Nếu đã sử dụng các truy vấn trong phần giải pháp, do lỗi hạn mức trong một trong những câu lệnh chèn sớm nhất, bạn có thể bỏ qua tất cả các bước khác và chạy trực tiếp truy vấn bên dưới để quan sát kết quả của việc thực hiện tìm kiếm lân cận gần nhất trên các mục nhúng vectơ trong cơ sở dữ liệu 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;
Quan sát kết quả
Truy vấn trước đó sử dụng phương thức COSINE_DISTANCE để tìm 10 kết quả phù hợp nhất cho câu lệnh của chúng ta.
Bạn sẽ thấy những kết quả sau:

Các kết quả được tạo khá gần với câu lệnh trong cụm từ tìm kiếm.
10. Dọn dẹp
Để tránh bị tính phí vào tài khoản Google Cloud của bạn cho các tài nguyên được dùng trong bài đăng này, hãy làm theo các bước sau:
- Trong bảng điều khiển Google Cloud, hãy chuyển đến trang Quản lý tài nguyên.
- Trong danh sách dự án, hãy chọn dự án mà bạn muốn xoá, rồi nhấp vào Xoá. Nếu bạn không muốn xoá dự án, hãy xoá phiên bản mà bạn đã tạo trong Spanner.
- Trong hộp thoại, hãy nhập mã dự án rồi nhấp vào Tắt để xoá dự án.
11. Xin chúc mừng
Xin chúc mừng! Bạn đã thực hiện thành công một tìm kiếm tương tự bằng tính năng tìm kiếm vectơ tích hợp của Spanner. Ngoài ra, bạn cũng thấy được mức độ dễ dàng khi làm việc với các mô hình nhúng và mô hình ngôn ngữ lớn để cung cấp chức năng AI tạo sinh trực tiếp bằng SQL.
Tiếp theo là gì?
Tìm hiểu thêm về tính năng tìm kiếm vectơ K lân cận gần nhất (KNN) chính xác của Spanner tại đây: https://cloud.google.com/spanner/docs/find-k-nearest-neighbors
Bạn cũng có thể đọc thêm về cách thực hiện dự đoán trực tuyến bằng SQL thông qua tính năng tích hợp VertexAI của Spanner tại đây: https://cloud.google.com/spanner/docs/ml