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.
Bí quyết đằng sau cuộc cách mạng này nằm ở tính năng Tìm kiếm vectơ. Thay vì dựa vào kiểu khớp từ khoá đơn giản, tính năng tìm kiếm vectơ sẽ chuyển đổi văn bản thành các giá trị đại diện dạng số (nội suy). Điều này cho phép chúng tôi tìm kiếm dựa trên ý nghĩa của cụm từ tìm kiếm, chứ không chỉ dựa trên các từ cụ thể được sử dụng. Trong lĩnh vực tìm kiếm tài liệu, đây là một bước ngoặt. Hãy tưởng tượng bạn tìm thấy một bằng sáng chế cho "thiết bị đo nhịp tim đeo" ngay cả khi cụm từ chính xác không được sử dụng trong tài liệu.
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ế nhanh hơn, trực quan hơn và chính xác hơn bằng cách tận dụng AlloyDB, tiện ích pgvector và Gemini 1.5 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ể AlloyDB và tải dữ liệu của Tập dữ liệu công khai về bằng sáng chế
- Bật pgvector và tiện ích mô hình AI tạo sinh trong AlloyDB
- Tạo nội dung nhúng từ thông tin chi tiết
- Tìm kiếm theo độ tương đồng Cosine theo thời gian thực cho văn bản tìm kiếm của người dùng
- Triển khai giải pháp trong Cloud Functions không có máy chủ
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.
High level diagram representing the flow of the Patent Search Application with AlloyDB
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>
- Bật các API bắt buộc. Bạn có thể sử dụng lệnh gcloud trong thiết bị đầu cuối Cloud Shell:
gcloud services enable alloydb.googleapis.com \
compute.googleapis.com \
cloudresourcemanager.googleapis.com \
servicenetworking.googleapis.com \
run.googleapis.com \
cloudbuild.googleapis.com \
cloudfunctions.googleapis.com \
aiplatform.googleapis.com
Bạn có thể sử dụng bảng điều khiển để tìm kiếm từng sản phẩm hoặc sử dụng đường liên kết này thay cho lệnh gcloud.
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 AlloyDB
Hãy tạo một cụm, thực thể và bảng AlloyDB nơi tập dữ liệu về bằng sáng chế sẽ được tải.
Tạo đối tượng AlloyDB
Tạo một cụm và một phiên bản có mã cụm "patent-cluster
", mật khẩu "alloydb
", tương thích với PostgreSQL 15 và khu vực là "us-central1
", mạng được đặt thành "default
". Đặt mã phiên bản thành "patent-instance
". Nhấp vào TẠO CỤM. Bạn có thể xem thông tin chi tiết về cách tạo cụm tại đường liên kết này: https://cloud.google.com/alloydb/docs/cluster-create.
Tạo bảng
Bạn có thể tạo bảng bằng cách sử dụng câu lệnh DDL bên dưới trong AlloyDB Studio:
CREATE TABLE patents_data ( id VARCHAR(25), type VARCHAR(25), number VARCHAR(20), country VARCHAR(2), date VARCHAR(20), abstract VARCHAR(300000), title VARCHAR(100000), kind VARCHAR(5), num_claims BIGINT, filename VARCHAR(100), withdrawn BIGINT) ;
Bật tiện ích
Để xây dựng Ứng dụng tìm kiếm bằng sáng chế, chúng ta sẽ sử dụng các tiện ích pgvector và google_ml_integration. Tiện ích pgvector cho phép bạn lưu trữ và tìm kiếm các vectơ nhúng. Tiện ích google_ml_integration cung cấp các hàm mà bạn sử dụng để truy cập vào các điểm cuối dự đoán của Vertex AI nhằm nhận thông tin dự đoán trong SQL. Bật các tiện ích này bằng cách chạy các DDL sau:
CREATE EXTENSION vector;
CREATE EXTENSION google_ml_integration;
Cấp quyền
Chạy câu lệnh bên dưới để cấp quyền thực thi trên hàm "nhúng":
GRANT EXECUTE ON FUNCTION embedding TO postgres;
Cấp VAI TRÒ Người dùng Vertex AI cho tài khoản dịch vụ AlloyDB
Trên bảng điều khiển IAM của Google Cloud, hãy cấp cho tài khoản dịch vụ AlloyDB (có dạng như sau: service-<<PROJECT_NUMBER>>@gcp-sa-alloydb.iam.gserviceaccount.com) quyền truy cập vào vai trò "Người dùng Vertex AI". PROJECT_NUMBER sẽ có số dự án của bạn.
Ngoài ra, bạn cũng có thể cấp quyền truy cập bằng lệnh gcloud:
PROJECT_ID=$(gcloud config get-value project)
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \
--role="roles/aiplatform.user"
Sửa đổi bảng để thêm cột Vectơ để lưu trữ các phần nhúng
Chạy DDL bên dưới để thêm trường abstract_embeddings vào bảng mà chúng ta vừa tạo. Cột này sẽ cho phép lưu trữ các giá trị vectơ của văn bản:
ALTER TABLE patents_data ADD column abstract_embeddings vector(768);
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 AlloyDB Studio để chạy các truy vấn. Kho lưu trữ alloydb-pgvector 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 AlloyDB.
- Chọn cụm mới tạo và nhấp vào thực thể.
- Trong trình đơn Điều hướng AlloyDB, hãy nhấp vào AlloyDB Studio. Đăng nhập bằng thông tin xác thực của bạn.
- Mở một thẻ mới bằng cách nhấp vào biểu tượng Thẻ mới ở bên phải.
- Sao chép câu lệnh truy vấn
insert
từ tập lệnhinsert_into_patents_data.sql
được đề cập ở trên vào 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 nội dung nhúng cho dữ liệu bằng sáng chế
Trước tiên, hãy kiểm thử hàm nhúng bằng cách chạy truy vấn mẫu sau:
SELECT embedding( 'textembedding-gecko@003', 'AlloyDB is a managed, cloud-hosted SQL database service.');
Thao tác này sẽ trả về vectơ nhúng, trông giống như một mảng số thực, cho văn bản mẫu trong truy vấn. Có dạng như sau:
Cập nhật trường Vector abstract_embeddings
Chạy DML bên dưới để cập nhật bản tóm tắt bằng sáng chế trong bảng bằng các nội dung nhúng tương ứng:
UPDATE patents_data set abstract_embeddings = embedding( 'textembedding-gecko@003', abstract);
6. Tìm kiếm vectơ
Bây giờ, bảng, dữ liệu, nội dung nhúng đã sẵn sàng, hãy thực hiện Tìm kiếm vectơ theo thời gian thực cho văn bản tìm kiếm của người dùng. Bạn có thể kiểm thử việc này bằng cách chạy truy vấn dưới đây:
SELECT id || ' - ' || title as literature FROM patents_data ORDER BY abstract_embeddings <=> embedding('textembedding-gecko@003', 'A new Natural Language Processing related Machine Learning Model')::vector LIMIT 10;
Trong truy vấn này,
- Văn bản tìm kiếm của người dùng là: "Một mô hình học máy mới liên quan đến việc xử lý ngôn ngữ tự nhiên".
- Chúng ta sẽ chuyển đổi thành phần này thành phần nhúng trong phương thức nhúng() bằng cách sử dụng mô hình: textembedding-gecko@003.
- "<=>" thể hiện việc sử dụng phương thức khoảng cách COSINE SIMILARITY.
- Chúng ta đang chuyển đổi kết quả của phương thức nhúng thành loại vectơ để tương thích với các vectơ được lưu trữ trong cơ sở dữ liệu.
- LIMIT 10 cho biết chúng ta đang chọn 10 kết quả phù hợp nhất với văn bản tìm kiếm.
Dưới đây là kết quả:
Như bạn có thể quan sát trong kết quả, các cụm từ trùng khớp khá gần với văn bản tìm kiếm.
7. Chuyển ứng dụng sang web
Bạn đã sẵn sàng đưa ứng dụng này lên web chưa? Hãy làm theo các bước sau:
- Chuyển đến Trình chỉnh sửa Cloud Shell rồi nhấp vào biểu tượng "Cloud Code — Sign in" (Mã trên đám mây — Đăng nhập) ở góc dưới cùng bên trái (Thanh trạng thái) của trình chỉnh sửa. Chọn Dự án Google Cloud hiện tại đã bật tính năng thanh toán và đảm bảo bạn cũng đã đăng nhập vào chính dự án đó trên Gemini (ở góc bên phải của thanh trạng thái).
- Nhấp vào biểu tượng Cloud Code (Mã trên đám mây) rồi đợi hộp thoại Cloud Code (Mã trên đám mây) bật lên. Chọn Ứng dụng mới và trong cửa sổ bật lên Tạo ứng dụng mới, hãy chọn ứng dụng Chức năng trên đám mây:
Trên trang 2/2 của cửa sổ bật lên Create New Application (Tạo ứng dụng mới), hãy chọn Java: Hello World rồi nhập tên dự án là "alloydb-pgvector" ở vị trí bạn muốn rồi nhấp vào OK:
- Trong cấu trúc dự án thu được, hãy tìm pom.xml rồi thay thế tệp này bằng nội dung trong tệp kho lưu trữ. Ngoài một số phần phụ thuộc khác, dự án này phải có các phần phụ thuộc sau:
- Thay thế tệp HelloWorld.java bằng nội dung trong tệp repo.
Xin lưu ý rằng bạn phải thay thế các giá trị bên dưới bằng giá trị thực tế của mình:
String ALLOYDB_DB = "postgres";
String ALLOYDB_USER = "postgres";
String ALLOYDB_PASS = "*****";
String ALLOYDB_INSTANCE_NAME = "projects/<<YOUR_PROJECT_ID>>/locations/us-central1/clusters/<<YOUR_CLUSTER>>/instances/<<YOUR_INSTANCE>>";
//Replace YOUR_PROJECT_ID, YOUR_CLUSTER, YOUR_INSTANCE with your actual values
Xin lưu ý rằng hàm này yêu cầu văn bản tìm kiếm làm tham số đầu vào có khoá "search" (tìm kiếm) và trong quá trình triển khai này, chúng ta chỉ trả về một kết quả khớp gần nhất từ cơ sở dữ liệu:
// Get the request body as a JSON object.
JsonObject requestJson = new Gson().fromJson(request.getReader(), JsonObject.class);
String searchText = requestJson.get("search").getAsString();
//Sample searchText: "A new Natural Language Processing related Machine Learning Model";
BufferedWriter writer = response.getWriter();
String result = "";
HikariDataSource dataSource = AlloyDbJdbcConnector();
try (Connection connection = dataSource.getConnection()) {
//Retrieve Vector Search by text (converted to embeddings) using "Cosine Similarity" method
try (PreparedStatement statement = connection.prepareStatement("SELECT id || ' - ' || title as literature FROM patents_data ORDER BY abstract_embeddings <=> embedding('textembedding-gecko@003', '" + searchText + "' )::vector LIMIT 1")) {
ResultSet resultSet = statement.executeQuery();
resultSet.next();
String lit = resultSet.getString("literature");
result = result + lit + "\n";
System.out.println("Matching Literature: " + lit);
}
writer.write("Here is the closest match: " + result);
}
- Để triển khai Hàm trên đám mây mà bạn vừa tạo, hãy chạy lệnh sau từ dòng lệnh Cloud Shell. Trước tiên, hãy nhớ chuyển đến thư mục dự án tương ứng bằng lệnh:
cd alloydb-pgvector
Sau đó, hãy chạy lệnh:
gcloud functions deploy patent-search --gen2 --region=us-central1 --runtime=java11 --source=. --entry-point=cloudcode.helloworld.HelloWorld --trigger-http
BƯỚC QUAN TRỌNG:
Sau khi triển khai, bạn sẽ thấy các hàm trong bảng điều khiển Hàm Cloud Run của Google. Tìm hàm mới tạo và mở hàm đó, chỉnh sửa cấu hình và thay đổi những nội dung sau:
- Chuyển đến phần Thời gian chạy, bản dựng, kết nối và cài đặt bảo mật
- Tăng thời gian chờ lên 180 giây
- Chuyển đến thẻ KẾT NỐI:
- Trong phần cài đặt Ingress, hãy nhớ chọn "Allow all traffic" (Cho phép tất cả lưu lượng truy cập).
- Trong phần Cài đặt đầu ra, hãy nhấp vào trình đơn thả xuống Mạng rồi chọn "Thêm trình kết nối VPC mới" và làm theo hướng dẫn bạn thấy trên hộp thoại bật lên:
- Đặt tên cho Trình kết nối VPC và đảm bảo khu vực giống với phiên bản của bạn. Giữ nguyên giá trị Mạng là mặc định và đặt Mạng con thành Dải IP tuỳ chỉnh với dải IP là 10.8.0.0 hoặc một dải IP tương tự có sẵn.
- Mở rộng phần Hiển thị chế độ cài đặt điều chỉnh theo tỷ lệ và đảm bảo bạn đã thiết lập cấu hình chính xác như sau:
- Nhấp vào TẠO và trình kết nối này sẽ xuất hiện trong phần cài đặt đầu ra.
- Chọn trình kết nối mới tạo
- Chọn định tuyến tất cả lưu lượng truy cập thông qua trình kết nối VPC này.
8. Kiểm thử ứng dụng
Sau khi triển khai, bạn sẽ thấy điểm cuối ở định dạng sau:
https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/patent-search
Bạn có thể kiểm thử từ Cửa sổ dòng lệnh Cloud Shell bằng cách chạy lệnh sau:
gcloud functions call patent-search --region=us-central1 --gen2 --data '{"search": "A new Natural Language Processing related Machine Learning Model"}'
Kết quả:
Bạn cũng có thể kiểm thử hàm này trong danh sách Hàm trên đám mây. Chọn hàm đã triển khai rồi chuyển đến thẻ "TESTING" (KIỂM THỬ). Trong hộp văn bản Định cấu hình sự kiện kích hoạt cho yêu cầu json, hãy nhập nội dung sau:
{"search": "A new Natural Language Processing related Machine Learning Model"}
Nhấp vào nút TEST THE FUNCTION (KIỂM TRA HÀM) và bạn có thể thấy kết quả ở bên phải trang:
Vậy là xong! Bạn có thể thực hiện Tìm kiếm vectơ tương đồng bằng cách sử dụng mô hình Nhúng trên dữ liệu AlloyDB một cách đơn giản như vậy.
9. 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 mục Quản lý
- trang 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á.
- Trong hộp thoại, hãy nhập mã dự án, sau đó nhấp vào Shut down (Tắt) để xoá dự án.
10. 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 nội dung tương tự bằng AlloyDB, pgvector và tìm kiếm vectơ. Bằng cách kết hợp các tính năng của AlloyDB, Vertex AI và Tìm kiếm vectơ, chúng tôi đã tiến một bước dài trong việc giúp việc tìm kiếm tài liệu trở nên dễ dàng, hiệu quả và thực sự mang lại ý nghĩa.