1. Tổng quan
Trong nhiều ngành, tính năng tìm kiếm theo bối cảnh là một chức năng quan trọng, là trung tâm của các ứng dụng. Trong một thời gian dài, tính năng Tạo sinh truy xuất đã là yếu tố thúc đẩy chính cho sự phát triển quan trọng này của công nghệ nhờ các cơ chế truy xuất dựa trên AI tạo sinh. Các mô hình tạo sinh, với cửa sổ ngữ cảnh lớn và chất lượng đầu ra ấn tượng, đang làm thay đổi AI. RAG cung cấp một cách có hệ thống để chèn ngữ cảnh vào các ứng dụng và tác nhân AI, dựa trên các cơ sở dữ liệu có cấu trúc hoặc thông tin từ nhiều phương tiện. Dữ liệu theo bối cảnh này rất quan trọng để làm rõ tính chân thực và độ chính xác của kết quả, nhưng những kết quả đó chính xác đến mức nào? Doanh nghiệp của bạn có phụ thuộc nhiều vào độ chính xác và mức độ liên quan của những kết quả trùng khớp theo bối cảnh này không? Vậy thì dự án này sẽ khiến bạn thích thú!
Bí mật ẩn giấu của tính năng tìm kiếm vectơ không chỉ là việc tạo vectơ mà còn là việc biết liệu các kết quả khớp vectơ của bạn có thực sự tốt hay không. Chúng ta đều đã từng có lúc nhìn chằm chằm vào danh sách kết quả và tự hỏi: "Công cụ này có hoạt động không?!" Hãy cùng tìm hiểu cách thực sự đánh giá chất lượng của các kết quả trùng khớp vectơ. Bạn có thể thắc mắc "Vậy RAG có gì thay đổi?" Mọi thứ! Trong nhiều năm, việc Tạo nội dung tăng cường truy xuất (RAG) có vẻ như là một mục tiêu đầy hứa hẹn nhưng khó đạt được. Cuối cùng, chúng ta đã có các công cụ để xây dựng ứng dụng RAG với hiệu suất và độ tin cậy cần thiết cho các nhiệm vụ quan trọng.
Giờ đây, chúng ta đã có kiến thức cơ bản về 3 điều:
- Tìm kiếm theo bối cảnh có ý nghĩa gì đối với trợ lý và cách thực hiện việc đó bằng tính năng Tìm kiếm vectơ.
- Chúng tôi cũng đã tìm hiểu sâu về việc sử dụng tính năng Tìm kiếm vectơ trong phạm vi dữ liệu của bạn, tức là trong chính cơ sở dữ liệu của bạn (nếu bạn chưa biết thì tất cả Cơ sở dữ liệu trên Google Cloud đều hỗ trợ tính năng này!).
- Chúng tôi đã đi trước một bước so với phần còn lại của thế giới khi hướng dẫn bạn cách thực hiện chức năng RAG Tìm kiếm vectơ có trọng lượng nhẹ với hiệu suất và chất lượng cao nhờ chức năng Tìm kiếm vectơ AlloyDB được cung cấp bởi chỉ mục ScaNN.
Nếu chưa xem qua các thử nghiệm RAG cơ bản, trung cấp và nâng cao, bạn nên đọc 3 bài viết đó theo thứ tự tại đây, tại đây và tại đây.
Tính năng Tìm kiếm bằng sáng chế hỗ trợ người dùng tìm các bằng sáng chế có liên quan theo ngữ cảnh đến văn bản tìm kiếm của họ. Chúng tôi đã xây dựng một phiên bản của tính năng này trước đây. Bây giờ, chúng ta sẽ xây dựng ứng dụng đó bằng các tính năng RAG mới và nâng cao, cho phép tìm kiếm theo ngữ cảnh được kiểm soát chất lượng cho ứng dụng đó. Hãy cùng tìm hiểu nhé!
Hình ảnh dưới đây cho thấy quy trình tổng thể của những gì đang diễn ra trong ứng dụng này.~
Mục tiêu
Cho phép người dùng tìm kiếm bằng sáng chế dựa trên nội dung mô tả bằng văn bản với hiệu suất và chất lượng được cải thiện, đồng thời có thể đánh giá chất lượng của các kết quả trùng khớp được tạo bằng các tính năng RAG mới nhất của AlloyDB.
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 Tập dữ liệu công khai về bằng sáng chế
- Tạo chỉ mục siêu dữ liệu và chỉ mục ScaNN
- Triển khai tính năng Tìm kiếm vectơ nâng cao trong AlloyDB bằng phương thức lọc nội tuyến của ScaNN
- Triển khai tính năng Recall eval
- Đánh giá phản hồi truy vấn
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. 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. Thiết lập cơ sở dữ liệu
Trong lớp học lập trình này, chúng ta sẽ sử dụng AlloyDB làm cơ sở dữ liệu cho dữ liệu về bằng sáng chế. Máy chủ này sử dụng các cụm để lưu giữ tất cả tài nguyên, chẳng hạn như cơ sở dữ liệu và nhật ký. Mỗi cụm có một phiên bản chính cung cấp điểm truy cập vào dữ liệu. Bảng sẽ chứa dữ liệu thực tế.
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 cụm và thực thể
- Chuyển đến trang AlloyDB trong Cloud Console. Bạn có thể dễ dàng tìm thấy hầu hết các trang trong Cloud Console bằng cách tìm kiếm các trang đó bằng thanh tìm kiếm của bảng điều khiển.
- Chọn CREATE CLUSTER (TẠO CHUỖI) trên trang đó:
- Bạn sẽ thấy một màn hình như màn hình bên dưới. Tạo một cụm và thực thể với các giá trị sau (Đảm bảo các giá trị khớp với nhau trong trường hợp bạn đang nhân bản mã ứng dụng từ kho lưu trữ):
- mã cụm: "
vector-cluster
" - mật khẩu: "
alloydb
" - PostgreSQL 15 / đề xuất sử dụng phiên bản mới nhất
- Vùng: "
us-central1
" - Mạng: "
default
"
- Khi chọn mạng mặc định, bạn sẽ thấy một màn hình như dưới đây.
Chọn THIẾT LẬP KẾT NỐI.
- Tại đó, hãy chọn "Sử dụng dải IP được phân bổ tự động" rồi chọn Tiếp tục. Sau khi xem lại thông tin, hãy chọn TẠO KẾT NỐI.
- Sau khi thiết lập mạng, bạn có thể tiếp tục tạo cụm. Nhấp vào CREATE CLUSTER (TẠO CLUSTER) để hoàn tất việc thiết lập cụm như minh hoạ bên dưới:
Hãy nhớ thay đổi mã phiên bản (bạn có thể tìm thấy mã này tại thời điểm định cấu hình cụm / phiên bản) thành
vector-instance
. Nếu bạn không thể thay đổi giá trị này, hãy nhớ sử dụng mã nhận dạng thực thể trong tất cả các tệp tham chiếu sắp tới.
Xin lưu ý rằng quá trình tạo cụm sẽ mất khoảng 10 phút. Sau khi tạo thành công, bạn sẽ thấy một màn hình hiển thị thông tin tổng quan về cụm bạn vừa tạo.
4. Nhập dữ liệu
Bây giờ, đã đến lúc thêm một bảng chứa dữ liệu về cửa hàng. Chuyển đến AlloyDB, chọn cụm chính rồi chọn AlloyDB Studio:
Bạn có thể phải đợi thực thể của mình hoàn tất quá trình tạo. Sau khi hoàn tất, hãy đăng nhập vào AlloyDB bằng thông tin xác thực mà bạn đã tạo khi tạo cụm. Sử dụng dữ liệu sau để xác thực với PostgreSQL:
- Tên người dùng : "
postgres
" - Cơ sở dữ liệu : "
postgres
" - Mật khẩu : "
alloydb
"
Sau khi bạn xác thực thành công vào AlloyDB Studio, các lệnh SQL sẽ được nhập vào Trình chỉnh sửa. Bạn có thể thêm nhiều cửa sổ Trình chỉnh sửa bằng biểu tượng dấu cộng ở bên phải cửa sổ cuối cùng.
Bạn sẽ nhập các lệnh cho AlloyDB trong cửa sổ trình chỉnh sửa, sử dụng các tuỳ chọn Run (Chạy), Format (Định dạng) và Clear (Xoá) nếu cần.
Bật tiện ích
Để xây dựng ứng dụng này, 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 IF NOT EXISTS google_ml_integration CASCADE;
CREATE EXTENSION IF NOT EXISTS vector;
Nếu bạn muốn kiểm tra các tiện ích đã được bật trên cơ sở dữ liệu, hãy chạy lệnh SQL sau:
select extname, extversion from pg_extension;
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, abstract_embeddings vector(768)) ;
Cột abstract_embeddings sẽ cho phép lưu trữ các giá trị vectơ của văn bản.
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ó thể chạy lệnh dưới đây từ Dòng lệnh Cloud Shell:
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"
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. Dữ liệu được lấy vào tệp insert_scripts.sql
này và chúng ta sẽ chạy tệp này để tải dữ liệu về 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_scripts.sql
được đề cập ở trên vào trình chỉnh sửa. Bạn có thể sao chép 10 đến 50 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 sẽ xuất hiện trong bảng Kết quả.
Lưu ý: Bạn có thể nhận thấy tập lệnh chèn có rất nhiều dữ liệu. Điều này là do chúng ta đã đưa các phần nhúng vào tập lệnh chèn. Nhấp vào "View Raw" (Xem thô) trong trường hợp bạn gặp sự cố khi tải tệp trong github. Việc này được thực hiện để giúp bạn không gặp rắc rối (trong các bước sắp tới) khi tạo nhiều mục nhúng (ví dụ: tối đa 20-25 mục) trong trường hợp bạn đang sử dụng tài khoản thanh toán bằng khoản tín dụng dùng thử cho Google Cloud.
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('text-embedding-005', '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 chỉ khi bạn chưa chèn dữ liệu abstract_embeddings vào tập lệnh chèn:
UPDATE patents_data set abstract_embeddings = embedding( 'text-embedding-005', abstract);
Bạn có thể gặp sự cố khi tạo nhiều nội dung nhúng (ví dụ: tối đa 20-25 nội dung) nếu đang sử dụng tài khoản thanh toán bằng khoản tín dụng dùng thử cho Google Cloud. Vì lý do đó, tôi đã đưa các phần nhúng vào tập lệnh chèn và bạn nên tải phần nhúng đó vào bảng nếu đã hoàn tất bước "tải dữ liệu bằng sáng chế vào cơ sở dữ liệu".
6. Thực hiện RAG nâng cao bằng các tính năng mới của AlloyDB
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 bên dưới:
SELECT id || ' - ' || title as title FROM patents_data ORDER BY abstract_embeddings <=> embedding('text-embedding-005', 'Sentiment Analysis')::vector LIMIT 10;
Trong truy vấn này,
- Văn bản mà người dùng tìm kiếm là: "Phân tích cảm xúc".
- Chúng ta sẽ chuyển đổi văn bản này thành văn bản nhúng trong phương thức nhúng() bằng cách sử dụng mô hình: text-embedding-005.
- "<=>" 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.
AlloyDB đưa RAG Tìm kiếm vectơ lên một tầm cao mới:
Có rất nhiều tính năng được giới thiệu. Hai trong số các tính năng tập trung vào nhà phát triển là:
- Lọc cùng dòng
- Trình đánh giá thu hồi
Lọc cùng dòng
Trước đây, với tư cách là nhà phát triển, bạn phải thực hiện truy vấn Tìm kiếm vectơ và phải xử lý việc lọc và gọi lại. Trình tối ưu hoá truy vấn AlloyDB đưa ra lựa chọn về cách thực thi truy vấn bằng bộ lọc. Lọc cùng dòng là một kỹ thuật tối ưu hoá truy vấn mới cho phép trình tối ưu hoá truy vấn AlloyDB đánh giá cả điều kiện lọc siêu dữ liệu và tìm kiếm vectơ cùng lúc, tận dụng cả chỉ mục vectơ và chỉ mục trên các cột siêu dữ liệu. Điều này đã làm tăng hiệu suất gợi nhắc, cho phép nhà phát triển tận dụng những gì AlloyDB cung cấp ngay từ đầu.
Lọc cùng dòng phù hợp nhất với các trường hợp có độ chọn lọc trung bình. Khi tìm kiếm thông qua chỉ mục vectơ, AlloyDB chỉ tính toán khoảng cách cho các vectơ khớp với điều kiện lọc siêu dữ liệu (các bộ lọc chức năng trong truy vấn thường được xử lý trong mệnh đề WHERE). Điều này giúp cải thiện đáng kể hiệu suất cho các truy vấn này, bổ sung cho các ưu điểm của lọc sau hoặc lọc trước.
- Cài đặt hoặc cập nhật tiện ích pgvector
CREATE EXTENSION IF NOT EXISTS vector WITH VERSION '0.8.0.google-3';
Nếu bạn đã cài đặt tiện ích pgvector, hãy nâng cấp tiện ích vectơ lên phiên bản 0.8.0.google-3 trở lên để có được các tính năng của trình đánh giá gợi nhắc.
ALTER EXTENSION vector UPDATE TO '0.8.0.google-3';
Bạn chỉ cần thực hiện bước này nếu tiện ích vectơ của bạn là <0.8.0.google-3>.
Lưu ý quan trọng: Nếu số lượng hàng ít hơn 100, bạn sẽ không cần tạo chỉ mục ScaNN vì chỉ mục này sẽ không áp dụng cho ít hàng hơn. Trong trường hợp đó, vui lòng bỏ qua các bước sau.
- Để tạo chỉ mục ScaNN, hãy cài đặt tiện ích alloydb_scann.
CREATE EXTENSION IF NOT EXISTS alloydb_scann;
- Trước tiên, hãy chạy Cụm từ tìm kiếm vectơ không có chỉ mục và không bật Bộ lọc nội tuyến:
SELECT id || ' - ' || title as title FROM patents_data
WHERE num_claims >= 15
ORDER BY abstract_embeddings <=> embedding('text-embedding-005', 'Sentiment Analysis')::vector LIMIT 10;
Kết quả sẽ tương tự như:
- Chạy tính năng Phân tích giải thích trên trang đó: (không có chỉ mục hoặc tính năng Lọc cùng dòng)
Thời gian thực thi là 2,4 mili giây
- Hãy tạo một chỉ mục thông thường trên trường num_claims để chúng ta có thể lọc theo trường này:
CREATE INDEX idx_patents_data_num_claims ON patents_data (num_claims);
- Hãy tạo chỉ mục ScaNN cho ứng dụng Tìm kiếm bằng sáng chế. Chạy mã sau trong AlloyDB Studio:
CREATE INDEX patent_index ON patents_data
USING scann (abstract_embeddings cosine)
WITH (num_leaves=32);
Lưu ý quan trọng: (num_leaves=32)
áp dụng cho tổng tập dữ liệu của chúng ta có hơn 1000 hàng. Nếu số lượng hàng ít hơn 100, bạn không cần tạo chỉ mục vì chỉ mục sẽ không áp dụng cho ít hàng.
- Đặt tính năng Lọc cùng dòng được bật trên Chỉ mục ScaNN:
SET scann.enable_inline_filtering = on
- Bây giờ, hãy chạy cùng một truy vấn có bộ lọc và Tìm kiếm vectơ:
SELECT id || ' - ' || title as title FROM patents_data
WHERE num_claims >= 15
ORDER BY abstract_embeddings <=> embedding('text-embedding-005', 'Sentiment Analysis')::vector LIMIT 10;
Như bạn có thể thấy, thời gian thực thi giảm đáng kể cho cùng một Tìm kiếm vectơ. Chế độ Lọc cùng dòng đã truyền chỉ mục ScaNN vào Tìm kiếm vectơ để thực hiện việc này!!!
Tiếp theo, hãy đánh giá khả năng gợi nhắc cho Tìm kiếm vectơ có hỗ trợ ScaNN này.
Trình đánh giá thu hồi
Mức độ gợi nhắc trong tính năng tìm kiếm theo mức độ tương đồng là tỷ lệ phần trăm số lượng thực thể có liên quan được truy xuất từ một lượt tìm kiếm, tức là số lượng kết quả dương tính thật. Đây là chỉ số phổ biến nhất dùng để đo lường chất lượng của kết quả tìm kiếm. Một nguồn gây tổn thất về tỷ lệ gợi nhắc đến từ sự khác biệt giữa thuật toán tìm kiếm gần đúng bằng thuật toán kề cận nhất (aNN) và thuật toán tìm kiếm k (chính xác) bằng thuật toán kề cận nhất (kNN). Các chỉ mục vectơ như ScaNN của AlloyDB triển khai các thuật toán aNN, cho phép bạn tăng tốc độ tìm kiếm vectơ trên các tập dữ liệu lớn để đổi lấy một mức độ đánh đổi nhỏ về khả năng gợi nhắc. Giờ đây, AlloyDB cho phép bạn đo lường sự đánh đổi này ngay trong cơ sở dữ liệu cho từng truy vấn và đảm bảo rằng sự đánh đổi này ổn định theo thời gian. Bạn có thể cập nhật các tham số truy vấn và chỉ mục để phản hồi thông tin này nhằm đạt được kết quả và hiệu suất tốt hơn.
Logic đằng sau việc gợi nhắc kết quả tìm kiếm là gì?
Trong ngữ cảnh tìm kiếm vectơ, tỷ lệ thu hồi đề cập đến tỷ lệ phần trăm vectơ mà chỉ mục trả về là các vectơ láng giềng gần nhất thực sự. Ví dụ: nếu một truy vấn kề cận gần nhất cho 20 kề cận gần nhất trả về 19 kề cận gần nhất theo thực tế, thì tỷ lệ thu hồi là 19/20x100 = 95%. Tỷ lệ thu hồi là chỉ số dùng để đánh giá chất lượng tìm kiếm và được xác định là tỷ lệ phần trăm kết quả được trả về gần nhất một cách khách quan với các vectơ truy vấn.
Bạn có thể tìm thấy tỷ lệ gợi nhắc cho một truy vấn vectơ trên chỉ mục vectơ cho một cấu hình nhất định bằng cách sử dụng hàm evaluate_query_recall. Hàm này cho phép bạn điều chỉnh các tham số để đạt được kết quả truy vấn vectơ mà bạn muốn.
Lưu ý quan trọng:
Nếu bạn gặp lỗi từ chối cấp quyền trên chỉ mục HNSW trong các bước sau, hãy bỏ qua toàn bộ phần đánh giá khả năng gợi nhắc này. Điều này có thể liên quan đến các hạn chế về quyền truy cập tại thời điểm này vì phiên bản này mới được phát hành tại thời điểm lớp học lập trình này được ghi lại.
- Đặt cờ Bật tính năng quét chỉ mục trên chỉ mục ScaNN và chỉ mục HNSW:
SET scann.enable_indexscan = on
SET hnsw.enable_index_scan = on
- Chạy truy vấn sau trong AlloyDB Studio:
SELECT
*
FROM
evaluate_query_recall($$
SELECT
id || ' - ' || title AS title,
abstract
FROM
patents_data
where num_claims >= 15
ORDER BY
abstract_embeddings <=> embedding('text-embedding-005',
'sentiment analysis')::vector
LIMIT 25 $$,
'{"scann.num_leaves_to_search":1, "scann.pre_reordering_num_neighbors":10}',
ARRAY['scann']);
Hàm evaluate_query_recall nhận truy vấn làm tham số và trả về khả năng gợi nhắc của truy vấn đó. Tôi đang sử dụng cùng một truy vấn mà tôi đã dùng để kiểm tra hiệu suất làm truy vấn đầu vào của hàm. Tôi đã thêm SCaNN làm phương thức lập chỉ mục. Để biết thêm các tuỳ chọn tham số, hãy tham khảo tài liệu.
Kết quả gợi nhắc cho cụm từ tìm kiếm Tìm kiếm vectơ mà chúng ta đã sử dụng:
Tôi thấy RECALL (LƯỢT NHẬN LẠI) là 70%. Bây giờ, tôi có thể sử dụng thông tin này để thay đổi các tham số chỉ mục, phương thức và tham số truy vấn, đồng thời cải thiện khả năng gợi nhắc cho Tìm kiếm vectơ này!
7. Kiểm thử bằng tham số chỉ mục và truy vấn đã sửa đổi
Bây giờ, hãy kiểm thử truy vấn bằng cách sửa đổi các tham số truy vấn dựa trên lệnh gọi lại đã nhận được.
- Tôi đã sửa đổi số lượng hàng trong tập hợp kết quả thành 7 (từ 25 trước đó) và tôi thấy tỷ lệ LƯU NHỚ được cải thiện, tức là 86%.
Điều này có nghĩa là theo thời gian thực, tôi có thể thay đổi số lượng kết quả trùng khớp mà người dùng nhìn thấy để cải thiện mức độ liên quan của các kết quả trùng khớp đó theo ngữ cảnh tìm kiếm của người dùng.
- Hãy thử lại bằng cách sửa đổi các tham số chỉ mục:
Đối với kiểm thử này, tôi sẽ sử dụng "Khoảng cách L2" thay vì hàm khoảng cách tương đồng "Cosine". Tôi cũng sẽ thay đổi giới hạn của truy vấn thành 10 để cho thấy liệu chất lượng của kết quả tìm kiếm có được cải thiện hay không ngay cả khi số lượng tập hợp kết quả tìm kiếm tăng lên.
[TRƯỚC] Truy vấn sử dụng hàm khoảng cách Cosine Similarity:
SELECT
*
FROM
evaluate_query_recall($$
SELECT
id || ' - ' || title AS title,
abstract
FROM
patents_data
where num_claims >= 15
ORDER BY
abstract_embeddings <=> embedding('text-embedding-005',
'sentiment analysis')::vector
LIMIT 10 $$,
'{"scann.num_leaves_to_search":1, "scann.pre_reordering_num_neighbors":10}',
ARRAY['scann']);
Lưu ý rất quan trọng: Bạn có thể thắc mắc "Làm cách nào để biết truy vấn này sử dụng độ tương đồng COSINE?" Bạn có thể xác định hàm khoảng cách bằng cách sử dụng "<=>" để biểu thị khoảng cách Cosine.
Đường liên kết đến Tài liệu về các hàm khoảng cách của tính năng Tìm kiếm vectơ.
Kết quả của truy vấn trên là:
Như bạn có thể thấy, TỶ LỆ LẠI NHẬN là 70% mà không có bất kỳ thay đổi nào đối với logic chỉ mục của chúng ta. Bạn còn nhớ chỉ mục ScaNN mà chúng ta đã tạo ở bước 6 của phần Lọc cùng dòng, "patent_index
"? Chỉ mục này vẫn có hiệu lực trong khi chúng ta chạy truy vấn ở trên.
Bây giờ, hãy tạo một chỉ mục bằng một truy vấn hàm khoảng cách khác: Khoảng cách L2: <->
drop index patent_index;
CREATE INDEX patent_index_L2 ON patents_data
USING scann (abstract_embeddings L2)
WITH (num_leaves=32);
Câu lệnh xoá chỉ mục chỉ để đảm bảo không có chỉ mục không cần thiết nào trên bảng.
Bây giờ, tôi có thể thực thi truy vấn sau để đánh giá RECALL sau khi thay đổi hàm khoảng cách của chức năng Tìm kiếm vectơ.
[SAU] Truy vấn sử dụng hàm khoảng cách tương đồng cosine:
SELECT
*
FROM
evaluate_query_recall($$
SELECT
id || ' - ' || title AS title,
abstract
FROM
patents_data
where num_claims >= 15
ORDER BY
abstract_embeddings <-> embedding('text-embedding-005',
'sentiment analysis')::vector
LIMIT 10 $$,
'{"scann.num_leaves_to_search":1, "scann.pre_reordering_num_neighbors":10}',
ARRAY['scann']);
Kết quả của truy vấn trên là:
Thật là một sự biến đổi về giá trị gợi nhắc, 90%!!!
Bạn có thể thay đổi các tham số khác trong chỉ mục, chẳng hạn như num_leaves, v.v. dựa trên giá trị gợi nhắc mong muốn và tập dữ liệu mà ứng dụng của bạn sử dụng.
8. 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 trình 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á.
- Trong hộp thoại, hãy nhập mã dự án, sau đó nhấp vào Shut down (Tắt) để xoá dự án.
- Ngoài ra, bạn chỉ cần xoá cụm AlloyDB (thay đổi vị trí trong siêu liên kết này nếu bạn không chọn us-central1 cho cụm tại thời điểm định cấu hình) mà chúng ta vừa tạo cho dự án này bằng cách nhấp vào nút DELETE CLUSTER (XOÁ CỤM).
9. Xin chúc mừng
Xin chúc mừng! Bạn đã tạo thành công cụm từ tìm kiếm theo ngữ cảnh cho tính năng Tìm kiếm bằng sáng chế bằng công cụ Tìm kiếm vectơ nâng cao của AlloyDB để đạt được hiệu suất cao và thực sự dựa trên ý nghĩa. Tôi đã tạo một ứng dụng tác nhân đa công cụ được kiểm soát chất lượng sử dụng ADK và tất cả nội dung AlloyDB mà chúng ta đã thảo luận tại đây để tạo một Trình phân tích và tìm kiếm vectơ bằng sáng chế chất lượng cao và hiệu quả mà bạn có thể xem tại đây: https://youtu.be/Y9fvVY0yZTY
Nếu bạn muốn tìm hiểu cách tạo tác nhân đó, vui lòng tham khảo codelab này.