Trục đổi mức tương tác lấy khả năng mở rộng

Trục đổi mức tương tác lấy khả năng mở rộng An architecture diagram generated by Archify. Cặp query và passage · cần một điểm liên quan · Architecture component Cặp query và passage cần một điểm liên quan Bi-encoder · mã hoá hai bên độc lập · Architecture component Bi-encoder mã hoá hai bên độc lập Một vector mỗi bên · tính sẵn được, tìm rất nhanh · Architecture component · quét cả corpus Một vector mỗi bên tính sẵn được, tìm rất nhanh quét cả corpus Late interaction · giữ vector theo từng token · Architecture component Late interaction giữ vector theo từng token Khớp mịn hơn · đổi lại index phình to · Architecture component · ở giữa Khớp mịn hơn đổi lại index phình to ở giữa Cross-encoder · đọc query và passage cùng lúc · Architecture component Cross-encoder đọc query và passage cùng lúc Chính xác nhất · phải chạy lại cho từng cặp · Architecture component · chỉ vài chục cặp Chính xác nhất phải chạy lại cho từng cặp chỉ vài chục cặp tách rời hẳn giữ theo token ghép lại làm một được tốc độ được một phần được độ chính xác Legend Frontend Backend Database Cloud Message bus

Vì sao không chạy cross-encoder trên cả corpus

  • • Cross-encoder phải chạy transformer lại cho từng cặp query và passage
  • • Mười triệu chunk nghĩa là mười triệu lần chạy cho mỗi câu hỏi
  • • Vì vậy mới có hai chặng: bi-encoder lấy rộng, cross-encoder chấm kỹ

Late interaction đứng ở giữa trục

  • • ColBERT mã hoá hai bên độc lập nhưng giữ biểu diễn ở mức token
  • • Tương tác được hoãn tới cuối nên vẫn precompute được tài liệu
  • • Đổi lại index lớn hơn nhiều so với một vector mỗi chunk

Không có kiến trúc nào thắng tuyệt đối

  • • Chọn theo chất lượng, kích thước index, độ trễ và chi phí
  • • Ba điểm số dense, fusion và rerank không nằm trên cùng một thang đo
  • • Log riêng dense_score, sparse_score, fusion_score, rerank_score