Top-k tài liệu theo tích vô hướng
Bước xếp hạng đầu tiên của một hệ truy hồi dense là tính điểm giữa vector câu hỏi và
Tiến độ của tôi ở bài này
Điểm và code bạn nộp đượ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: python-basics, numpy-vector-operations.
Nội dung đề bài
Mô tả bài toán
Bước xếp hạng đầu tiên của một hệ truy hồi dense là tính điểm giữa vector câu hỏi và từng vector tài liệu, rồi lấy ra k tài liệu điểm cao nhất. Chỉ số tài liệu được giữ lại chính là đầu vào cho bước đọc lại (reranking) về sau.
Yêu cầu
Viết hàm top_k_indices(query, docs, k) trả về danh sách chỉ số của k tài liệu có tích vô hướng với query lớn nhất.
Quy ước nộp bài
Nộp hàm top_k_indices trong solution.py. Hệ thống gọi hàm trực tiếp, so danh sách chỉ số với kỳ vọng; không đọc stdin và không in ra stdout.
Input
- query: vector câu hỏi, dãy số độ dài d.
- docs: danh sách tài liệu, mỗi tài liệu là dãy số độ dài d.
- k: số tài liệu cần lấy, số nguyên dương.
Output
Danh sách chỉ số tài liệu được sắp xếp tăng dần theo chỉ số. Nếu k lớn hơn số tài liệu thì trả về tất cả chỉ số. Khi điểm bằng nhau, ưu tiên chỉ số nhỏ hơn.
Ràng buộc
- Mọi tài liệu phải cùng số chiều với query; ném ValueError nếu khác.
- k phải là số nguyên dương; ném ValueError khi k <= 0.
- Chỉ dùng NumPy cho phép nhân ma trận, không viết vòng lặp Python cộng từng cặp.
Ví dụ 1
Input
top_k_indices(query=[1, 0], docs=[[1, 0], [0, 1], [2, 0], [0, 3]], k=2)
Output
[0, 2]
Ví dụ 2
Input
top_k_indices(query=[1, 0], docs=[[1, 0], [0, 1], [2, 0], [0, 3]], k=4)
Output
[0, 1, 2, 3]
Giải thích
Với query = [1, 0] và docs = [[1, 0], [0, 1], [2, 0], [0, 3]], điểm lần lượt là [1, 0, 2, 0]; với k = 2 hai chỉ số cao nhất là 2 và 0, nên kết quả là [0, 2].
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.
