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ẽ:
- Tạo một thực thể Spanner
- Tải tập dữ liệu công khai Google Patents
- Tạo mô hình từ xa để nhúng văn bản bằng mô hình Gemini 1.0 Pro
- Tạo thông tin chi tiết tạo sinh từ tập dữ liệu đã tải
- Tạo video nhúng từ thông tin chi tiết
- Đư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.
Yêu cầu
2. Trước khi bắt đầu
Tạo một dự án
- 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.
- Đả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 .
- 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.
- 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
- 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 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>
- Đả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
- 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
- Trong bảng điều khiển Google Cloud, hãy mở trang Spanner.
- Chọn thực thể
spanner-vertex
trong danh sách. - Trong 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 bằng sáng chế.
- Nhấp vào Tạo để tạo cơ sở dữ liệu.
Tạo bảng
- Trong bảng điều khiển Google Cloud, hãy mở trang Spanner.
- Chọn thực thể
spanner-vertex
trong 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 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
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ế.
- Trong bảng điều khiển Google Cloud, hãy mở trang Spanner.
- Chọn thực thể
spanner-vertex
trong 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á) sẽ hiển thị 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 thẻ Trình chỉnh sửa SQL mới.
- Sao chép câu lệnh truy vấn
insert
từ tập lệnhinsert_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. - 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:
- 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.
- Mở một thẻ mới bằng cách nhấp vào 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 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.
- 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.
- Mở một thẻ mới bằng cách nhấp vào 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 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
- 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.
- Mở một thẻ mới bằng cách nhấp vào 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 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:
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:
- 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.
- Mở một thẻ mới bằng cách nhấp vào 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 cụm từ tìm kiếm sẽ xuất hiện trong bảng Kết quả.
- 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));
- 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:
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:
- 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.
- Mở một thẻ mới bằng cách nhấp vào 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 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:
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:
- 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á, 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.
- 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