Giới Thiệu
Trong phần trước, chúng ta đã cùng nhau khám phá những khái niệm cơ bản về Azure AI Search, bao gồm cách thức indexing. Tiếp theo, phần này sẽ tập trung vào việc tìm hiểu cách thức querying và một số mẹo để tối ưu hóa hiệu suất truy vấn.
1. Nội Dung Chính
2. Querying
Azure AI Search cung cấp nhiều cấu trúc truy vấn phù hợp với các tình huống khác nhau. Từ tìm kiếm văn bản tự do đến mẫu truy vấn cụ thể hay tìm kiếm vectơ, tất cả các truy vấn đều thực hiện trên một index đã được xác định trước. Chúng ta có ba kiểu tìm kiếm chính trong Azure AI Search:
- Full-text search
- Vector search
- Hybrid search: Kết hợp giữa Full-text search và Vector search.
Bây giờ, hãy cùng nhau đi sâu vào từng loại tìm kiếm.
2.1. Vector Search
Vector search cho phép truy vấn dựa trên các trường dữ liệu được mã hóa thành vector số. Do dữ liệu dưới dạng vector, quá trình so khớp căn cứ vào độ tương đồng giữa các vector (sử dụng các phương pháp như Cosine, Euclidean, v.v.).
Để áp dụng vector search, bạn cần khai báo các trường trong index với cấu trúc như sau:
python
SearchField(
name='embedding_text', type=SearchFieldDataType.Collection(SearchFieldDataType.Single),
searchable=True, vector_search_dimensions=1024, vector_search_profile='myHnswProfile',
)
Khi bạn gửi một vector từ phía client, Azure Search tự động sử dụng thuật toán CosineSimilarity để tính toán sự tương đồng và trả về các kết quả có điểm số cao nhất.
Ví dụ truy vấn vector:
python
vectors = [
RawVectorQuery(
vector=vector_embedding,
k=topk,
fields=fields,
),
]
search_client.search(
search_text=None,
vector_queries=vectors,
select=select_fields,
top=topk,
)
Các thông số cần thiết bao gồm:
vector
: Vector để thực hiện truy vấntop
: Số lượng kết quả mong muốnfields
: Tên trường dữ liệu sẽ truy vấnselect
: Các trường cần chọn trong kết quảsearch_text
: Để phù hợp với cú pháp, giữ giá trị làNone
.
2.2. Full-text Search
Full-text search là phương pháp tìm kiếm thông tin dựa vào văn bản thuần túy trong index. Các truy vấn trải qua quá trình phân tích từ ngữ, bao gồm việc chuyển đổi thành chữ thường, loại bỏ stop-words và rút gọn từ.
Dưới đây là công thức cho full-text search:
python
search_client.search(
search_text=search_query,
vector_queries=None,
select=select_fields,
search_fields=['text'],
top=topk,
search_mode='all',
query_language='vi-vn',
)
Cùng với các tham số như vector_queries
là None
, search_text
sẽ chứa truy vấn tìm kiếm.
Full-text search tính điểm dựa trên thuật toán BM25Similarity, cho phép tùy chỉnh trọng số như sau:
- k1: ảnh hưởng đến tần suất thuật ngữ của tài liệu
- b: điều chỉnh độ dài tài liệu.
Để thiết lập lại các tham số này, khai báo ngay khi tạo index:
python
from azure.search.documents.indexes.models import BM25Similarity
index.similarity = (BM25Similarity(k1=2, b=0))
Tìm kiếm bằng keyword: Có thể sử dụng các từ khóa để tối ưu tìm kiếm bằng cách kết hợp các cụm từ:
python
search_query = ('|'.join([f'"{i}" ' for i in keywords]))
2.3. Hybrid Search
Hybrid search kết hợp cả full-text và vector search, sau đó tổng hợp kết quả bằng thuật toán xếp hạng đối ứng (RRF).
Cách thực hiện truy vấn hybrid search:
python
search_client.search(
search_text=search_query,
vector_queries=vectors,
select=select_fields,
search_fields=['text'],
top=topk,
search_mode='all',
query_language='vi-vn',
)
Khi đó, cả search_text
và vector_queries
đều có giá trị.
RRF là thuật toán tính điểm dựa trên công thức:score = 1 / (rank + k)
, trong đó rank
là thứ tự tài liệu và k
là tham số cố định thường được thiết lập là 60. Thuật toán này hỗ trợ đảm bảo rằng tài liệu có mặt trong cả hai kết quả sẽ có điểm cao hơn.
Kết Luận
Bài viết này đã trình bày các phương pháp truy vấn chính trong Azure AI Search. Hy vọng rằng những thông tin chia sẻ sẽ hữu ích trong việc phát triển giải pháp tìm kiếm hiệu quả cho tổ chức của bạn. Bạn hãy sẵn sàng khám phá sức mạnh của Azure AI Search để nâng cao quy trình tìm kiếm của mình.
Cảm ơn bạn đã theo dõi bài viết. Nếu có bất kỳ câu hỏi hay ý kiến nào, hãy để lại comment cho chúng tôi biết nhé!
Tài Liệu Tham Khảo
- Full-text Search
- Vector Search
- Hybrid Search
source: viblo