Hybrid Retrieval – Kết Hợp Dense Vector Và BM25 (Reciprocal Rank Fusion)
Hybrid search kết hợp hai tín hiệu bổ sung nhau:
Tiến độ của tôi ở bài này
Điểm được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: bm25-corpus-indexer-ranking, cosine-similarity-search.
Nội dung đề bài
Mục tiêu kiến thức
Hybrid search kết hợp hai tín hiệu bổ sung nhau:
- BM25 (sparse): tốt với keyword matching và rare terms
- Dense retrieval (dense): tốt với semantic similarity
Reciprocal Rank Fusion (RRF): RRF(d) = ∑r ∈ R 1k + r(d) Trong đó k=60 (hằng số), r(d) là hạng của tài liệu d trong danh sách r.
Yêu cầu
def reciprocal_rank_fusion(ranked_lists: list[list[int]], k=60) -> list[int]:
# Combine multiple ranked lists using RRF
pass
def hybrid_retrieval(
query_tokens: list[str],
query_vector: np.ndarray,
doc_tokens: list[list[str]],
doc_vectors: np.ndarray,
top_k=5, rrf_k=60
) -> list[int]:
# Returns document indices ranked by RRF fusion of BM25 + cosine
passInput
- Hàm
bm25_scores(query_tokens,doc_tokens,k1,b): Các tham số đầu vào chứa dữ liệu Tensor/mảng NumPy hoặc giá trị siêu tham số tương ứng. - Hàm
reciprocal_rank_fusion(ranked_lists,k): Các tham số đầu vào chứa dữ liệu Tensor/mảng NumPy hoặc giá trị siêu tham số tương ứng. - Hàm
hybrid_retrieval(query_tokens,query_vector,doc_tokens,doc_vectors,top_k,rrf_k): Các tham số đầu vào chứa dữ liệu Tensor/mảng NumPy hoặc giá trị siêu tham số tương ứng.
Output
- Hàm
bm25_scores: Trả về kết quả kiểuAnytheo đúng đặc tả kỹ thuật và kích thước quy định. - Hàm
reciprocal_rank_fusion: Trả về kết quả kiểulisttheo đúng đặc tả kỹ thuật và kích thước quy định. - Hàm
hybrid_retrieval: Trả về kết quả kiểulisttheo đúng đặc tả kỹ thuật và kích thước quy định.
Ràng buộc
- Thời gian chạy tối đa: 5000ms.
- Giới hạn bộ nhớ: 512MB.
- Dữ liệu đầu vào hợp lệ theo đúng kiểu dữ liệu và miền giá trị được mô tả.
Ví dụ 1
Input
ranked = [[0, 1, 2], [0, 1, 2]]
reciprocal_rank_fusion(ranked)Output
[0, 1, 2]Giải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Ví dụ 2
Input
np.random.seed(42)
doc_tokens = [['python', 'ai'], ['deep', 'learning'], ['bm25', 'retrieval'], ['neural', 'network'], ['machine', 'learning']]
doc_vectors = np.random.randn(5, 8)
query_vector = np.random.randn(8)
result = hybrid_retrieval(['python', 'ai'], query_vector, doc_tokens, doc_vectors, top_k=3)Output
[0, 3, 1]Giải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
