Xây dựng ứng dụng tìm kiếm bằng sáng chế với Spanner, Vector Search & Gemini 1.0 Pro!

1. Tổng quan

Trong nhiều ngành khác nhau, 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 cấp phép hoặc mua lại tiềm năng và tránh vi phạm các bằng sáng chế hiện có.

Việc nghiên cứu về bằng sáng chế rất rộng lớn và phức tạp. Việc sàng lọc qua vô số thông tin tóm tắt về kỹ thuật để tìm ra các sáng kiến có liên quan là một công việc khó khăn. Các 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. Phần tóm tắt thường dài và mang tính kỹ thuật nên rất khó nắm bắt nhanh ý tưởng cốt lõi. Điều này có thể khiến các 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 để quá 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, công cụ Nhúng và Tìm kiếm vectơ tại chỗ.

Sản phẩm bạn sẽ tạo ra

Trong phòng thí nghiệm này, bạn sẽ:

  1. Tạo một thực thể Spanner
  2. Tải tập dữ liệu công khai Google Patents
  3. Tạo mô hình từ xa để nhúng văn bản bằng mô hình Gemini 1.0 Pro
  4. Tạo thông tin chi tiết tạo sinh từ tập dữ liệu đã tải
  5. Tạo video nhúng từ thông tin chi tiết
  6. Đưa ra cụm từ tìm kiếm tương tự với tập dữ liệu

Sơ đồ dưới đây thể hiện luồng dữ liệu và các bước trong quá trình triển khai.

14cfdde5e24258a.png.

Yêu cầu

  • Một trình duyệt, chẳng hạn như Chrome hoặc Firefox
  • Một dự án trên Google Cloud đã bật tính năng thanh toán.

2. Trước khi bắt đầu

Tạo một dự án

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

Hình ảnh nút Kích hoạt Cloud Shell

  1. Sau khi kết nối với Cloud Shell, bạn cần kiểm tra để chắc chắn rằng mình đã được xác thực và dự án được đặt thành mã dự án bằng lệnh sau đây:
gcloud auth list
  1. 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
  1. Nếu dự án của bạn chưa được thiết lập, hãy sử dụng lệnh sau để thiết lập dự án:
gcloud config set project <YOUR_PROJECT_ID>
  1. Đảm bảo rằng bạn đã bật các API Vertex AI và Spanner bằng cách tìm các API này trong bảng điều khiển. Ngoài ra, bạn cũng có thể sử 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 cách khác là sử dụng đường liên kết này.

Hãy tham khảo tài liệu để biết các lệnh gcloud và cách sử dụng.

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 để tải tập dữ liệu bằng sáng chế.

Tạo một thực thể Spanner

  1. Tạo một thực thể 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

  1. Trong bảng điều khiển Google Cloud, hãy mở trang Spanner.
  2. Chọn thực thể spanner-vertex trong danh sách.
  3. Trong Cơ sở dữ liệu, hãy nhấp vào Tạo cơ sở dữ liệu.
  4. Đặt tên cơ sở dữ liệu thành bằng sáng chế.
  5. Nhấp vào Tạo để tạo cơ sở dữ liệu.

Tạo bảng

  1. Trong bảng điều khiển Google Cloud, hãy mở trang Spanner.
  2. Chọn thực thể spanner-vertex trong danh sách.
  3. Chọn cơ sở dữ liệu patents.
  4. Trong thẻ Bảng, hãy nhấp vào Tạo bảng. Trang Spanner Studio sẽ mở ra.
  5. Mở một thẻ mới bằng cách nhấp vào thẻ Trình chỉnh sửa SQL mới.
  6. 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

Tập dữ liệu công khai của Google Patents trên BigQuery sẽ được dùng làm tập dữ liệu. Chúng ta sẽ sử dụng Spanner Studio để chạy 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 tôi sẽ chạy để tải dữ liệu về bằng sáng chế.

  1. Trong bảng điều khiển Google Cloud, hãy mở trang Spanner.
  2. Chọn thực thể spanner-vertex trong danh sách.
  3. Chọn cơ sở dữ liệu patents.
  4. Trong trình đơn điều hướng, hãy nhấp vào Spanner Studio. Ngăn Explorer (Trình khám phá) sẽ hiển thị danh sách các đối tượng trong cơ sở dữ liệu của bạn.
  5. Mở một thẻ mới bằng cách nhấp vào thẻ Trình chỉnh sửa SQL mới.
  6. Sao chép câu lệnh truy vấn insert từ tập lệnh insert_into_patents_data.sql trong trình chỉnh sửa. Bạn có thể sao chép 50-100 câu lệnh chèn để xem bản minh hoạ nhanh về trường hợp sử dụng này.
  7. Nhấp vào Chạy. Kết quả của cụm từ tìm kiếm sẽ xuất hiện trong bảng Kết quả.

5. Tạo Mô hình từ xa cho Gemini 1.0 Pro

Sau khi dữ liệu về bằng sáng chế được tải vào 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 Vertex AI của Gemini 1.0 Pro để tạo một bộ tiêu đề và từ khoá tóm tắt.

Chạy lệnh DDL sau trong Spanner Studio Editor:

  1. Trong trình đơn điều hướng, hãy nhấp vào Spanner Studio. Ngăn Explorer (Trình khám phá) sẽ hiển thị danh sách các đối tượng trong cơ sở dữ liệu của bạn.
  2. Mở một thẻ mới bằng cách nhấp vào thẻ Trình chỉnh sửa SQL mới.
  3. 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
);
  1. Nhấp vào Chạy. Kết quả của cụm từ tìm kiếm sẽ xuất hiện trong bảng Kết quả.

6. Tạo mô hình từ xa để 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à các từ khoá. Chúng ta sẽ chuyển đổi phản hồi này thành các mục nhúng để giúp chúng ta tạo kết quả phù hợp phù hợp khi chạy truy vấn. Chúng tôi sẽ sử dụng Text Embedding Gecko 003 model của Vertex AI từ xa từ Spanner.

  1. Trong trình đơn điều hướng, hãy nhấp vào Spanner Studio. Ngăn Explorer (Trình khám phá) sẽ hiển thị danh sách các đối tượng trong cơ sở dữ liệu của bạn.
  2. Mở một thẻ mới bằng cách nhấp vào thẻ Trình chỉnh sửa SQL mới.
  3. 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');
  1. Nhấp vào Chạy. Kết quả của cụm từ tìm kiếm sẽ xuất hiện trong bảng Kết quả.

7. Tạo thông tin chi tiết 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 tạo sinh mà chúng tôi sẽ tạo bằng mô hình Gemini 1.5 Pro mà chúng tôi từng tạo.

Tạo bảng

  1. Trong trình đơn điều hướng, hãy nhấp vào Spanner Studio. Ngăn Explorer (Trình khám phá) sẽ hiển thị danh sách các đối tượng trong cơ sở dữ liệu của bạn.
  2. Mở một thẻ mới bằng cách nhấp vào thẻ Trình chỉnh sửa SQL mới.
  3. Chạy truy vấn sau:
CREATE TABLE patents_data_gemini (id string(100), gemini_response STRING(MAX)) PRIMARY KEY (id);
  1. Nhấp vào Chạy. Kết quả của cụm từ tìm kiếm sẽ xuất hiện trong bảng Kết quả.

Tạo thông tin chi tiết

Để điền thông tin chi tiết từ AI tạo sinh vào bảng, bạn nên 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. Đối với lớp học lập trình này, chúng ta sẽ chạy truy vấn DDL sau đây tối đa 4 lần để điền 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 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í với biên độ nhỏ), hãy cố gắng bỏ qua thao tác chèn và chỉ chạy truy vấn được 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
))

Quan sát 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 mục 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 các kết quả sau:

6041fab164aaab93.pngs

Lưu ý: Nếu bạn đã chạy truy vấn của phần giải pháp, hãy thay thế tên bảng trong truy vấn được chọn ở trên bằng truy vấn trong phần giải pháp. Vì vậy, bạn sẽ chạy 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ả phải giống với kết quả trong ảnh chụp màn hình kết quả ở trên.

8. Tạo video nhúng cho thông tin chi tiết đã 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 các thông tin chi tiết này để tạo các mục nhúng. Các mục nhúng này giúp chúng tôi không phải dựa vào các kiểu khớp từ khoá chính xác, mà giúp tạo ra kết quả dựa trên các điểm tương đồng về khái niệm.

Lưu ý: Nếu đã chạy truy vấn phần giải pháp ở bước trước, thì bạn cũng có thể bỏ qua truy vấn 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 mục nhúng:

  1. Trong trình đơn điều hướng, hãy nhấp vào Spanner Studio. Ngăn Explorer (Trình khám phá) sẽ hiển thị danh sách các đối tượng trong cơ sở dữ liệu của bạn.
  2. Mở một thẻ mới bằng cách nhấp vào thẻ Trình chỉnh sửa SQL mới.
  3. 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);
  1. Nhấp vào Chạy. Kết quả của cụm từ tìm kiếm sẽ xuất hiện trong bảng Kết quả.
  2. Chạy truy vấn sau để tạo các mục 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));
  1. Nhấp vào Chạy. Kết quả của cụm từ tìm kiếm sẽ xuất hiện trong bảng 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 tóm tắt.

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 các kết quả sau:

a1e968bac4ab1cb.png

Phần Giải pháp tạm thời:

Sử dụng truy vấn này nếu bạn đã thực hiện phần giải quyết ở 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ẽ trả về kết quả tương tự như trong ảnh chụp màn hình ở trên.

9. Chuẩn bị tìm kiếm vectơ

Bây giờ, chúng ta đã tạo văn bản nhúng, chúng ta có thể chuẩn bị ứng dụng web để sẵn sàng thực hiện 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 để cung cấp kết quả tìm kiếm dựa trên chức năng Tìm kiếm tương tự K-Nearest Neighbors. 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 để trực quan hoá cách kết quả tìm kiếm xuất hiện.

Đối với 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 câu lệnh, tạo kết quả dựa trên ngữ cảnh và giới hạn kết quả ở mức 10 mục nhập.

Chạy truy vấn sau:

  1. Trong trình đơn điều hướng, hãy nhấp vào Spanner Studio. Ngăn Explorer (Trình khám phá) sẽ hiển thị danh sách các đối tượng trong cơ sở dữ liệu của bạn.
  2. Mở một thẻ mới bằng cách nhấp vào thẻ Trình chỉnh sửa SQL mới.
  3. 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;
  1. Nhấp vào Chạy. Kết quả của cụm từ tìm kiếm sẽ xuất hiện trong bảng Kết quả.

Lưu ý: Nếu đã dùng các truy vấn trong phần giải pháp, do lỗi hạn mức ở một trong những câu lệnh chèn đầu tiên, nên bạn có thể bỏ qua tất cả các bước khác và trực tiếp chạy truy vấn bên dưới để quan sát kết quả tìm kiếm hàng xóm gần nhất đối với 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 các kết quả sau:

d26ca8b8238bdf25.png

Các kết quả được tạo khá gần với ngữ cảnh của câu lệnh thuộc truy vấn.

10. Dọn dẹp

Để tránh bị tính phí vào tài khoản Google Cloud cho các tài nguyên sử dụng trong bài đăng này, hãy làm theo các bước sau:

  1. Trong bảng điều khiển Google Cloud, hãy chuyển đến trang Quản lý tài nguyên.
  2. Trong danh sách dự án, hãy chọn dự án mà bạn muốn xoá, sau đó nhấp vào Delete (Xoá). Nếu không muốn xoá dự án, bạn chỉ cần xoá thực thể mà bạn đã tạo trong Spanner.
  3. 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 tìm kiếm tương tự bằng tìm kiếm vectơ tích hợp sẵn của Spanner. Ngoài ra, bạn đã thấy việc sử dụng các mô hình nhúng và LLM để cung cấp trực tiếp chức năng AI tạo sinh bằng SQL dễ dàng như thế nào.

Tiếp theo là gì?

Tìm hiểu thêm về tính năng hàng xóm gần nhất chính xác của Spanner (tìm kiếm vectơ KNN) 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 bằng công cụ tích hợp VertexAI của Spanner tại đây: https://cloud.google.com/spanner/docs/ml