Scoring trong Azure AI Search - Part 3: Vượt qua Từ khóa với Semantic Ranking và Hybrid Search

0 0 0

Người đăng: Trung Đức

Theo Viblo Asia

Mở đầu

Những hạn chế của tìm kiếm thuần túy dựa trên từ khóa (lexical search) ngày càng rõ ràng: bỏ lỡ các từ đồng nghĩa, không nắm bắt được các khái niệm liên quan, và khó khăn trong việc trả lời các câu hỏi phức tạp. Để giải quyết những thách thức này, Azure AI Search cung cấp các tính năng ranking nâng cao, đặc biệt là Semantic Ranking và khả năng kết hợp tìm kiếm đa phương thức thông qua Hybrid Search.

Phần 3 này sẽ đưa bạn vào thế giới của các kỹ thuật ranking tiên tiến này, giải thích cách chúng hoạt động, lợi ích mang lại, và làm thế nào để tích hợp chúng vào ứng dụng của bạn, tạo ra trải nghiệm tìm kiếm thông minh và hiệu quả hơn đáng kể.

Semantic Ranking: Tìm kiếm bằng Ngữ nghĩa

Semantic Search là gì?

Semantic Search (Tìm kiếm ngữ nghĩa) là một tập hợp các tính năng trong Azure AI Search sử dụng các mô hình Máy học (Machine Learning) và Trí tuệ nhân tạo (AI) tiên tiến, bao gồm cả các mô hình ngôn ngữ lớn (LLMs), để hiểu sâu hơn về ý nghĩa của cả truy vấn người dùng và nội dung tài liệu trong index của bạn. Thay vì chỉ khớp từ khóa, nó cố gắng hiểu ý địnhngữ cảnh.

Lợi ích vượt trội:

  • Hiểu ý định người dùng: Tìm thấy kết quả phù hợp ngay cả khi từ ngữ trong truy vấn không khớp chính xác với tài liệu (ví dụ: tìm "làm sao để máy tính chạy nhanh hơn" có thể trả về tài liệu về "tối ưu hóa hiệu năng PC").
  • Xử lý từ đồng nghĩa và khái niệm liên quan: Tự động nhận biết các từ/cụm từ có cùng ý nghĩa.
  • Cung cấp câu trả lời trực tiếp: Có khả năng trích xuất câu trả lời ngắn gọn từ nội dung tài liệu (Semantic Answers).
  • Tóm tắt nội dung liên quan: Tạo ra các đoạn tóm tắt (captions) nêu bật sự liên quan của tài liệu với truy vấn, dựa trên ngữ nghĩa.

Cách hoạt động:

Semantic Search không thay thế hoàn toàn BM25 mà hoạt động như một lớp xếp hạng lại (re-ranking) thứ cấp. Quy trình cơ bản:

  1. Truy xuất ban đầu: Azure AI Search vẫn sử dụng thuật toán dựa trên từ khóa (như BM25) hoặc vector search để lấy một tập hợp kết quả ban đầu tiềm năng.
  2. Xếp hạng lại bằng ML: Các mô hình Semantic sẽ phân tích sâu hơn tập kết quả này, đánh giá mức độ liên quan về mặt ngữ nghĩa giữa truy vấn và từng tài liệu, sau đó tính toán một điểm số rerankerScore mới và sắp xếp lại kết quả dựa trên điểm số này.

Các tính năng chính:

  • Semantic Ranking: Cốt lõi của tính năng, thực hiện việc xếp hạng lại dựa trên ngữ nghĩa.
  • Semantic Captions & Highlights: Tự động tạo ra các đoạn văn bản ngắn (captions) từ nội dung tài liệu giải thích tại sao tài liệu đó liên quan đến truy vấn. Các thuật ngữ quan trọng về mặt ngữ nghĩa cũng được đánh dấu (highlights).
  • Semantic Answers: (Nếu được kích hoạt và có kết quả phù hợp) Trích xuất câu trả lời trực tiếp, ngắn gọn cho các câu hỏi trong truy vấn từ nội dung tài liệu.

Kích hoạt và Cấu hình:

  • Yêu cầu: Cần sử dụng Azure AI Search ở các cấp dịch vụ (tier) Standard (S1, S2, S3) hoặc các cấp Storage Optimized (L1, L2).

  • Kích hoạt ở cấp dịch vụ: Cần bật tính năng Semantic Search trong phần "Semantic Ranker" của dịch vụ Azure AI Search trên Azure Portal. Có gói miễn phí giới hạn và gói Standard trả phí theo khối lượng.

  • Cấu hình trong Index: Định nghĩa một semanticConfiguration trong schema của index, chỉ định:

    • titleField: Trường chứa tiêu đề chính.
    • contentFields: Các trường chứa nội dung chính để phân tích ngữ nghĩa.
    • keywordFields: Các trường chứa từ khóa quan trọng (nếu có).
    "semantic": { "configurations": [ { "name": "my-semantic-config", "prioritizedFields": { "titleField": { "fieldName": "documentTitle" }, "prioritizedContentFields": [ { "fieldName": "abstract" }, { "fieldName": "mainContent" } ], "prioritizedKeywordsFields": [ { "fieldName": "keywords" } ] } } ]
    }
    

Sử dụng trong Query:

Để tận dụng Semantic Search, bạn cần điều chỉnh câu lệnh query:

  • Sử dụng tham số queryType=semantic.

  • Chỉ định semanticConfiguration đã định nghĩa trong index.

  • (Tùy chọn) Yêu cầu captions bằng captions=extractive|highlight-<true/false>.

  • (Tùy chọn) Yêu cầu answers bằng answers=extractive|count-<number>.

  • Ví dụ (REST API):

    POST https://[service name].search.windows.net/indexes/[index name]/docs/search?api-version=[api-version]
    Content-Type: application/json
    api-key: [admin or query key]
    { "search": "what are the benefits of using Azure AI Search semantic ranking?", "queryType": "semantic", "semanticConfiguration": "my-semantic-config", "captions": "extractive|highlight-true", "answers": "extractive|count-1", "select": "documentTitle, mainContent, keywords", "count": true
    }
    
  • Ví dụ tương đương với Python SDK (azure-search-documents):

import os
from azure.core.credentials import AzureKeyCredential
from azure.search.documents import SearchClient
from azure.search.documents.models import QueryType, QueryCaptionType, QueryAnswerType # --- Thay thế bằng thông tin của bạn ---
service_endpoint = os.environ.get("AZURE_SEARCH_SERVICE_ENDPOINT", "[Your Search Service Endpoint]")
index_name = os.environ.get("AZURE_SEARCH_INDEX_NAME", "[Your Index Name]")
key = os.environ.get("AZURE_SEARCH_API_KEY", "[Your API Key]")
# --- --------------------------------- --- # Khởi tạo SearchClient
credential = AzureKeyCredential(key)
search_client = SearchClient(endpoint=service_endpoint, index_name=index_name, credential=credential) # Chuẩn bị các tham số cho semantic query
search_text = "what are the benefits of using Azure AI Search semantic ranking?"
semantic_config_name = "my-semantic-config" # Tên configuration đã định nghĩa trong index # Thực hiện truy vấn semantic
results = search_client.search( search_text=search_text, query_type=QueryType.SEMANTIC, # Kích hoạt semantic search semantic_configuration_name=semantic_config_name, # Chỉ định cấu hình semantic query_caption=QueryCaptionType.EXTRACTIVE, # Yêu cầu captions query_caption_highlight_enabled=True, # Bật highlight cho captions query_answer=QueryAnswerType.EXTRACTIVE, # Yêu cầu answers answer_count=1, # Số lượng answers mong muốn select=["documentTitle", "mainContent", "keywords"], # Các trường muốn lấy về top=5 # Lấy top 5 kết quả sau khi re-rank
) # Xử lý kết quả
semantic_answers = results.get_answers()
if semantic_answers: print("Semantic Answers:") for answer in semantic_answers: if answer.highlights: print(f" Answer: {answer.highlights}") else: print(f" Answer: {answer.text}") print(f" Score: {answer.score:.4f}\n") print("Search Results:")
for result in results: print(f"--- Document (ID: {result.get('documentId', 'N/A')}) ---") # Giả sử bạn có trường ID là 'documentId' print(f" Title: {result['documentTitle']}") print(f" Reranker Score: {result['@search.reranker_score']:.4f}") # Điểm semantic captions = result.get('@search.captions') if captions: print(" Captions:") for caption in captions: if caption.highlights: print(f" Caption: {caption.highlights}") else: print(f" Caption: {caption.text}") # In ra nội dung khác nếu cần # print(f" Content: {result['mainContent'][:200]}...") # Ví dụ in 200 ký tự đầu print("-" * 10)

Khi nào nên dùng và Hạn chế:

  • Lý tưởng cho: Hệ thống hỏi đáp (Q&A), tìm kiếm trong cơ sở tri thức (knowledge base), tìm kiếm tài liệu phức tạp, các tình huống mà ý định người dùng quan trọng hơn từ khóa chính xác.
  • Hạn chế:
    • Chi phí: Yêu cầu tier trả phí và có thể phát sinh chi phí dựa trên số lượng truy vấn semantic.
    • Độ trễ: Có thể làm tăng một chút độ trễ của query do bước re-ranking.
    • Giới hạn ngôn ngữ: Hỗ trợ tốt nhất cho tiếng Anh và một số ngôn ngữ khác (kiểm tra tài liệu Microsoft để biết danh sách cập nhật).
    • Giới hạn về số lượng và độ dài văn bản xử lý.
    • (Cá nhân) Mình vẫn chưa tìm thấy thông tin về mô hình ML được sử dụng cũng như cách customize được chúng 😦

Vector Search và Hybrid Search: Kết hợp Sức mạnh

Bên cạnh việc cải thiện tìm kiếm dựa trên từ khóa với Semantic Ranking, Azure AI Search còn hỗ trợ Vector Search, một phương pháp tìm kiếm hoàn toàn khác dựa trên sự tương đồng về ngữ nghĩa được biểu diễn dưới dạng các vector số học (embeddings).

Sơ lược về Vector Search:

  • Hoạt động bằng cách chuyển đổi cả truy vấn và nội dung tài liệu thành các vector embeddings (thường bằng các mô hình AI).
  • Tìm kiếm dựa trên việc tính toán "khoảng cách" hoặc "góc" giữa vector truy vấn và các vector tài liệu (ví dụ: cosine similarity).
  • Rất mạnh trong việc tìm kiếm các khái niệm tương tự, hình ảnh giống nhau, sản phẩm tương đồng... ngay cả khi không có từ khóa chung.
  • Scoring trong Vector Search thường dựa trên điểm tương đồng (similarity score).

Hybrid Search:

Hybrid Search là kỹ thuật cho phép bạn thực hiện đồng thời cả tìm kiếm dựa trên từ khóa (BM25 hoặc có thể được tăng cường bởi Semantic Ranking) và tìm kiếm vector trong cùng một yêu cầu truy vấn.

Tại sao cần Hybrid Search?

  • Tận dụng ưu điểm: Kết hợp độ chính xác của từ khóa (keyword precision) cho các thuật ngữ cụ thể, tên riêng, mã hiệu... với khả năng gợi nhớ theo ngữ nghĩa (semantic recall) của vector search cho các khái niệm, ý tưởng liên quan.
  • Độ phủ tốt hơn: Giúp tìm thấy các kết quả mà một trong hai phương pháp có thể bỏ lỡ nếu dùng riêng lẻ.
  • Kết quả toàn diện: Cung cấp danh sách kết quả tổng hợp, cân bằng giữa khớp từ khóa và tương đồng ngữ nghĩa

Reciprocal Rank Fusion (RRF): Kết hợp kết quả thông minh:

Khi bạn thực hiện Hybrid Search, Azure AI Search cần một cách để hợp nhất hai danh sách kết quả (một từ keyword, một từ vector) thành một danh sách duy nhất được xếp hạng. Phương pháp mặc định và hiệu quả là Reciprocal Rank Fusion (RRF).

  • Cách hoạt động: RRF không nhìn vào điểm số gốc (BM25 score hay vector similarity score). Thay vào đó, nó xem xét thứ hạng của mỗi tài liệu trong từng danh sách kết quả riêng lẻ. Nó ưu tiên các tài liệu xuất hiện ở thứ hạng cao trong bất kỳ danh sách nào. Công thức cơ bản là tính tổng nghịch đảo của thứ hạng: Score = sum(1 / (k + rank)) (với k là hằng số nhỏ, thường là 60).
  • Lợi ích: Đơn giản, hiệu quả, và có xu hướng đẩy các kết quả phù hợp nhất từ cả hai phương pháp lên đầu danh sách.

Cấu hình và Thực hiện Hybrid Query:

Để thực hiện Hybrid Search, câu lệnh query của bạn cần bao gồm cả phần cho keyword search và phần cho vector search:

  • search: Chứa chuỗi truy vấn cho keyword search (BM25/Semantic).

  • vectorQueries: Một mảng chứa các truy vấn vector (bao gồm vector embedding của truy vấn và các tham số như k - số lượng hàng xóm gần nhất cần tìm, fields - tên trường vector).

  • (Tùy chọn) vectorFilterMode: Chỉ định cách áp dụng bộ lọc (pre-filter hay post-filter cho vector search).

  • Ví dụ (REST API):

    POST https://[service name].search.windows.net/indexes/[index name]/docs/search?api-version=[api-version]
    Content-Type: application/json
    api-key: [admin or query key]
    { "search": "high performance laptop for gaming", // Phần keyword search "select": "productId, productName, category, description", "vectorQueries": [ { "vector": [0.1, 0.5, ...], // Vector embedding của query "high performance laptop for gaming" "k": 5, // Tìm 5 kết quả vector gần nhất "fields": "descriptionVector", // Tìm trong trường vector này "kind": "vector" } ], "filter": "category eq 'Laptops'", "top": 10, "count": true // Nếu dùng Semantic thì thêm queryType=semantic và semanticConfiguration
    }
    
  • Ví dụ tương đương với Python SDK (azure-search-documents):

import os
import numpy as np # Giả sử vector là numpy array
from azure.core.credentials import AzureKeyCredential
from azure.search.documents import SearchClient
from azure.search.documents.models import VectorizableTextQuery # --- Thay thế bằng thông tin của bạn ---
service_endpoint = os.environ.get("AZURE_SEARCH_SERVICE_ENDPOINT", "[Your Search Service Endpoint]")
index_name = os.environ.get("AZURE_SEARCH_INDEX_NAME", "[Your Index Name]")
key = os.environ.get("AZURE_SEARCH_API_KEY", "[Your API Key]")
# --- --------------------------------- --- # Khởi tạo SearchClient
credential = AzureKeyCredential(key)
search_client = SearchClient(endpoint=service_endpoint, index_name=index_name, credential=credential) # Chuẩn bị các tham số cho hybrid query
keyword_query = "high performance laptop for gaming"
vector_field_name = "descriptionVector" # Tên trường vector trong index của bạn # --- Quan trọng: Tạo vector embedding cho query ---
# Bạn cần sử dụng một mô hình embedding (ví dụ: Azure OpenAI) để tạo vector này
# Đoạn mã này chỉ giả định bạn đã có sẵn vector `query_embedding`
# Ví dụ sử dụng thư viện Azure OpenAI (cần cài đặt `openai`):
# from openai import AzureOpenAI
# embedding_client = AzureOpenAI(azure_endpoint="...", api_key="...", api_version="...")
# query_embedding = embedding_client.embeddings.create(input=keyword_query, model="your-embedding-model-deployment-name").data[0].embedding
# query_embedding = np.array(query_embedding, dtype=np.float32).tolist() # Chuyển thành list nếu cần # Giả lập vector đã được tạo
query_embedding = np.random.rand(1536).astype(np.float32).tolist() # Thay thế bằng vector thật
# -------------------------------------------------- # Tạo đối tượng vector query
vector_query = VectorizableTextQuery(vector=query_embedding, k_nearest_neighbors=5, fields=vector_field_name) # Thực hiện truy vấn hybrid
results = search_client.search( search_text=keyword_query, # Phần keyword search vector_queries=[vector_query], # Phần vector search (là một list) select=["productId", "productName", "category", "description"], # Các trường muốn lấy về filter="category eq 'Laptops'", # Áp dụng filter top=10
) # Xử lý kết quả (kết quả đã được hợp nhất bằng RRF)
print(f"Hybrid Search Results for: '{keyword_query}'")
for result in results: print(f"--- Product ID: {result['productId']} ---") print(f" Name: {result['productName']}") print(f" Category: {result['category']}") # Điểm số này là điểm RRF kết hợp từ cả keyword và vector search print(f" RRF Score: {result['@search.score']:.4f}") print(f" Description: {result['description'][:150]}...") print("-" * 10)

Scoring trong Hybrid Search:

Lưu ý rằng điểm @search.score trả về cho mỗi kết quả trong Hybrid Search là điểm số được tính bởi RRF, không phải điểm BM25 hay điểm tương đồng vector gốc.

So sánh các Phương pháp Ranking

Phương pháp Cách hoạt động chính Tốt nhất cho... Ưu điểm Nhược điểm
BM25 Khớp từ khóa, tần suất, độ hiếm Tìm kiếm từ khóa chính xác, thuật ngữ cụ thể Nhanh, đơn giản, hiệu quả cho nhiều trường hợp Bỏ lỡ ngữ nghĩa, từ đồng nghĩa
Scoring Profiles Điều chỉnh điểm BM25 bằng weights, functions (độ mới...) Tùy chỉnh relevance theo logic nghiệp vụ cụ thể Linh hoạt, kiểm soát tốt các yếu tố ngoài từ khóa Cần cấu hình thủ công, có thể phức tạp
Semantic Ranking Re-ranking bằng ML dựa trên ngữ nghĩa Hiểu ý định, Q&A, tìm kiếm khái niệm Hiểu sâu ngữ nghĩa, cung cấp captions/answers Yêu cầu tier cao, chi phí, độ trễ, giới hạn ngôn ngữ
Vector Search Tìm kiếm dựa trên tương đồng vector (embeddings) Tìm khái niệm/item tương tự, đa phương tiện Không phụ thuộc từ khóa, tìm kiếm ngữ nghĩa mạnh mẽ Cần tạo embeddings, có thể khó diễn giải điểm số, "hộp đen"
Hybrid Search Kết hợp Keyword (BM25/Semantic) + Vector + RRF Kết hợp độ chính xác từ khóa và độ phủ ngữ nghĩa Toàn diện, tận dụng ưu điểm cả hai loại, kết quả mạnh mẽ nhất thường xuyên Phức tạp hơn để thiết lập và tinh chỉnh, cần quản lý cả hai luồng tìm kiếm

Kết luận

Việc chỉ dựa vào khớp từ khóa đã không còn đủ để đáp ứng kỳ vọng ngày càng cao về trải nghiệm tìm kiếm. Azure AI Search với Semantic RankingHybrid Search cung cấp những công cụ mạnh mẽ để bạn xây dựng các ứng dụng tìm kiếm thực sự thông minh, có khả năng hiểu sâu sắc ý định người dùng và kết hợp linh hoạt nhiều phương pháp tiếp cận.

Semantic Ranking giúp đưa ngữ nghĩa vào cuộc chơi, trong khi Hybrid Search cho phép bạn kết hợp sự chính xác của từ khóa với khả năng khám phá khái niệm của vector search. Mặc dù việc triển khai các tính năng nâng cao này đòi hỏi sự đầu tư về cấu hình, chi phí (đối với Semantic) và quản lý (đối với Vector/Hybrid), nhưng kết quả mang lại – một hệ thống tìm kiếm chính xác hơn, phù hợp hơn và thông minh hơn – chắc chắn sẽ làm hài lòng người dùng của bạn.

Lựa chọn giữa Semantic Ranking, Hybrid Search, hay thậm chí chỉ sử dụng Scoring Profiles phụ thuộc vào bài toán cụ thể, dữ liệu bạn có, trải nghiệm người dùng mà bạn muốn hướng tới và tất nhiên là bạn sẽ cần thử nghiệm tương đối nhiều trong bài toán Production để lựa chọn phương án tối ưu nhất

References

Bình luận

Bài viết tương tự

- vừa được xem lúc

So sánh Windows Azure Blob Storage và Amazon Simple Storage Service (S3)

Trong bài đăng viết này, chúng ta sẽ cùng nhau so sánh giữa Windows Azure Blob Storage và Amazon Simple Storage Service (S3) dựa trên quan điểm chức năng cốt lõi của chúng. Trong bài chia sẻ này, chúng ta sẽ tập trung vào các khái niệm cốt lõi, giá cả và so sánh tính năng giữa các blob containers và

0 0 133

- vừa được xem lúc

Tìm hiểu cơ bản về LUIS trong Microsoft Cognitive Services

Trong bài trước mình đã có giới thiệu sơ lược về QnA Maker - một dịch vụ lưu trữ ngôn ngữ tự nhiên trên nền tảng đám mây. Tuy nhiên để có thể sử dụng chatbot linh hoạt và với xu hướng càng thân thiện với người dùng, thì hôm nay mình giới thiệu thêm về LUIS.

0 0 41

- vừa được xem lúc

Tìm hiểu cơ bản về QnA Maker

QnA Maker là dịch vụ lưu trữ ngôn ngữ tự nhiên trên nền tảng đám mây (do microsoft cung cấp ). Không chỉ đơn thuần là lưu trữ, QnA Maker còn có thể thu thập nội dung, cách thức câu hỏi từng người dùng để phân tích và đưa ra gợi ý hay chọn câu trả lời phù hợp khi có nhiều câu trả lời trên cùng 1 nội

0 0 44

- vừa được xem lúc

Kinh nghiệm thi chứng chỉ AZ-900

Giới thiệu về bản thân. Xin chào các bạn, mình đang là 1 junior cloud engineer.

0 0 58

- vừa được xem lúc

Hướng dẫn cấu hình đăng nhập Cognito AWS thông qua OAuth2 Azure

Sơ lược về Cognito: Amazon Cognito là dịch vụ của Amazon Web Services cung cấp xác thực, ủy quyền và quản lý người dùng cho các ứng dụng web và di động của bạn. Người dùng có thể đăng nhập trực tiếp b

0 0 48

- vừa được xem lúc

Đừng lạc lối nữa! Azure Cognitive Search sẽ giúp bạn tìm đúng những gì bạn đang tìm kiếm

Mở đầu. Azure là một nền tảng đám mây thông minh, do chính Microsoft phát triển.

0 0 26