Thông tin về lớp học lập trình này
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 để 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 sáng kiến có liên quan là một nhiệm vụ khó khăn. Phương pháp 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. 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 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 cho các 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 để giúp quy trình tìm kiếm bằng sáng chế trở nên nhanh chóng, trực quan và chính xác hơn bằng cách tận dụng Spanner, Gemini 1.0 Pro, tính năng Nhúng và Tìm kiếm vectơ tại chỗ.
Sản phẩm bạn sẽ tạo ra
Trong lớp học này, bạn sẽ:
- Tạo một thực thể Spanner
- Tải Tập dữ liệu công khai của Google Patents
- Tạo mô hình từ xa cho các mục 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 nội dung nhúng từ thông tin chi tiết
- Đưa ra cụm từ tìm kiếm tương đồng cho tập dữ liệu
Sơ đồ sau đây thể hiện 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 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 bạn đã bật tính năng thanh toán cho dự án trên Cloud. Tìm hiểu cách kiểm tra xem tính năng thanh toán có được bật trên 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 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, hãy kiểm tra để đảm bảo 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 dự án của bạn chưa được đặt, hãy sử dụng lệnh sau để đặt dự án:
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 các API đó trong bảng điều khiển. Ngoài ra, bạn cũng có thể sử dụng lệnh sau trong 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.
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ể Spanner, cơ sở dữ liệu và bảng nơi 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 Google Cloud Console, hãy mở trang Spanner.
- Chọn thực thể
spanner-vertex
trong 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 Google Cloud Console, 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 về bằng sáng chế của Google trên BigQuery sẽ được dùng làm tập dữ liệu của chúng tôi. 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 Google Cloud Console, 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á) hiển thị danh sách các đối tượng trong cơ sở dữ liệu.
- 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
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 nhanh trường hợp sử dụng này. - Nhấp vào Chạy. Kết quả truy vấn của bạn 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 tải dữ liệu bằng sáng chế vào cơ sở dữ liệu, chúng ta sẽ tạo một mô hình từ xa sử dụng mô hình AI Vertex 1.0 Pro của Gemini để tạo một tập hợp tóm tắt gồm tiêu đề và từ khoá.
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á) hiển thị danh sách các đối tượng trong cơ sở dữ liệu.
- 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ả truy vấn của bạn sẽ xuất hiện trong bảng Kết quả.
6. Tạo mô hình từ xa cho tính năng 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 tổng hợp bao gồm tiêu đề và 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 tạo các kết quả phù hợp khi chạy truy vấn. 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á) hiển thị danh sách các đối tượng trong cơ sở dữ liệu.
- 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ả truy vấn của bạn 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 ta sẽ tạo bằng mô hình Gemini 1.5 Pro đã 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á) hiển thị danh sách các đối tượng trong cơ sở dữ liệu.
- 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ả truy vấn của bạn 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ạo sinh vào bảng, bạn nên sử dụng một ứng dụng sử 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 đây tối đa 4 lần để điền sẵ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 (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ó biên độ nhỏ), hãy thử bỏ qua thao tá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
))
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 truy vấn.
Lưu ý: Nếu bạn đã chạy truy vấn phần giải pháp trên thay vì INSERT DDL, hãy bỏ qua phần này và chạy truy vấn SELECT cuối cùng trong 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 trong phần giải pháp, 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. Vì vậy, bạn sẽ chạy mã dưới đây:
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 kết quả ở trên.
8. Tạo nội dung 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, chúng ta có thể sử dụng những thông tin chi tiết này để tạo nội dung nhúng. Những nội dung nhúng này giúp chúng tôi không chỉ dựa vào kết quả khớp chính xác với từ khoá mà còn 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 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á) hiển thị danh sách các đối tượng trong cơ sở dữ liệu.
- 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ả truy vấn 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ả truy vấn của bạn 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 nội dung 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:
Sử dụng truy vấn này nếu bạn đã thực hiện phần giải pháp 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, khi đã tạo các 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 các lượt tìm kiếm vectơ tương đồng. Trong lớp học lập trình này, chúng ta sẽ tạo một ứng dụng web có logic để đưa ra kết quả tìm kiếm dựa trên khả năng Tìm kiếm theo mức độ tương đồng K-Nearest Neighbors (K-hàng xóm 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 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á) hiển thị danh sách các đối tượng trong cơ sở dữ liệu.
- 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ả truy vấn của bạn sẽ xuất hiện trong bảng 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 các 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à trực tiếp chạy truy vấn bên dưới để quan sát kết quả của việc tìm kiếm hàng xóm gần nhất trên các vectơ nhúng 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 với câu lệnh của chúng ta.
Bạn sẽ thấy các kết quả sau:
Kết quả được tạo khá gần với câu lệnh trong truy vấn.
10. Dọn dẹp
Để tránh bị tính phí cho tài khoản Google Cloud của bạn đối với các tài nguyên được sử dụng trong bài đăng này, hãy làm theo các bước sau:
- Trong Google Cloud Console, 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 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, sau đó nhấp vào Shut down (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 lượt tìm kiếm tương đồng bằng tính năng tìm kiếm vectơ tích hợp 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 chức năng AI tạo sinh trực tiếp bằng SQL thật dễ dàng.
Tiếp theo là gì?
Tìm hiểu thêm về tính năng tìm kiếm vectơ KNN (tìm kiếm k-hàng xóm gần nhất) 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