0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

Kết hợp Kết Quả Nhiều Mô Hình Ranking Trong Thông Tin Tìm Kiếm: Thuật Toán Reciprocal Rank Fusion (RRF)

Đăng vào 1 tháng trước

• 3 phút đọc

Chủ đề:

ContentCreator@AI

Tóm tắt

Trong lĩnh vực Thông Tin Tìm Kiếm (Information Retrieval), ranking đóng vai trò chủ đạo trong việc xác định và ưu tiên các kết quả có liên quan đến truy vấn của người dùng. Điều này giúp tối ưu hóa trải nghiệm tìm kiếm và nâng cao độ chính xác của thông tin được cung cấp.

Giới thiệu về Bài Toán Thông Tin Tìm Kiếm

Bài toán Thông Tin Tìm Kiếm xuất phát từ một truy vấn (có thể là văn bản hoặc hình ảnh) và yêu cầu đưa ra danh sách các tài liệu (documents) có liên quan, được sắp xếp theo mức độ liên quan từ cao đến thấp. Sử dụng một mô hình ranking đơn lẻ thường không đủ để đáp ứng các nhu cầu đa dạng của người dùng, vì mỗi mô hình có những ưu điểm và hạn chế riêng. Do đó, việc kết hợp nhiều mô hình ranking để tối đa hóa độ chính xác và hiệu quả của kết quả tìm kiếm là cần thiết.

Reciprocal Rank Fusion (RRF)

Reciprocal Rank Fusion là một thuật toán nổi bật giúp kết hợp kết quả từ nhiều mô hình ranking. RRF sử dụng điểm số reciprocal rank score cho mỗi tài liệu trong danh sách kết quả và từ đó tạo ra bảng xếp hạng mới. Các tài liệu xuất hiện ở vị trí cao trong nhiều phương pháp tìm kiếm sẽ nhận được thứ hạng cao hơn trong kết quả cuối cùng. Các bước thực hiện RRF như sau:

Bước 1: Thu thập Kết Quả Ranking

Bắt đầu bằng việc thu thập kết quả từ nhiều mô hình ranking khác nhau, ví dụ:

  • Đối với tiêu đề tài liệu, sử dụng phương pháp tìm kiếm văn bản để có danh sách các tài liệu liên quan.
  • Đối với nội dung tóm tắt, sử dụng phương pháp vector search để thu thập kết quả.

Bước 2: Gán Điểm Reciprocal Rank Score

Các tài liệu trong danh sách kết quả sẽ được gán một điểm số reciprocal rank, được tính bằng công thức: score = 1/(rank + k), trong đó rank là vị trí của tài liệu trong danh sách, và k là hằng số thường được chọn là 60.

Bước 3: Kết Hợp Điểm Số

Điểm số từ từng phương pháp sẽ được cộng lại, từ đó tạo ra điểm số mới cho mỗi tài liệu.

Bước 4: Re-rank

Cuối cùng, sử dụng điểm số kết hợp để sắp xếp lại độ liên quan của các tài liệu, tạo ra danh sách cuối cùng.

Mã Nguồn Python cho RRF

Copy
database = {
    'query1': ['doc1', 'doc2', 'doc3'],
    'query2': ['doc3', 'doc1', 'doc2'],
}

def result_func(q):
    return database[q]

def rank_func(results, d):
    return results.index(d) + 1


def reciprocal_rank_fusion(queries, d, k, result_func, rank_func):
    return sum([1.0 / (k + rank_func(result_func(q), d)) if d in result_func(q) else 0 for q in queries])

Sử Dụng RRF

python Copy
k = 5

# Xuất điểm số của tài liệu d1 và d2
print(reciprocal_rank_fusion(queries, d1, k, result_func, rank_func))
print(reciprocal_rank_fusion(queries, d2, k, result_func, rank_func))

Kết Luận

Phương pháp RRF được đánh giá cao trong lĩnh vực Thông Tin Tìm Kiếm và thường được áp dụng trong Retrieval Augmented Generation (RAG). Mặc dù RRF rất hiệu quả, nhưng nó không tận dụng điểm số của từng công cụ tìm kiếm để tạo ra điểm số tổng hợp, điều này có thể dẫn đến mất mát thông tin quan trọng từ các nguồn khác nhau.

Tài Liệu Tham Khảo

  • Implementing Reciprocal Rank Fusion (RRF) in Python.
    source: viblo
Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào