Chỉ Mục Vector Nhúng Dày Đặc (Dense Vector Flat Index) từ Gốc
Thay vì tính u · v|u| |v| cho mỗi truy vấn, ta chuẩn hóa chuẩn L2 tất cả các vector ngay khi nạp vào chỉ mục (v ← v|v|2).
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: vector-cosine-similarity-stable.
Nội dung đề bài
Mục tiêu kiến thức
- Hiểu kiến trúc cơ bản của Vector Database (FAISS, Milvus, Chroma, Pinecone):
- Chỉ mục
Flat Index: Lưu trữ toàn bộ vector thô và tính toán tương đồng chính xác tuyệt đối (Exact Nearest Neighbors). - Tối ưu hóa tính toán Cosine Similarity:
Thay vì tính u · v|u| |v| cho mỗi truy vấn, ta chuẩn hóa chuẩn L2 tất cả các vector ngay khi nạp vào chỉ mục (v ← v|v|2). Khi đó Cosine Similarity trở thành phép nhân vô hướng đơn giản: Sim(u, v) = unorm · vnorm.
Yêu cầu
Xây dựng lớp DenseVectorFlatIndex:
class DenseVectorFlatIndex:
def __init__(self, dim: int):
pass
def add(self, vectors: np.ndarray, doc_ids: list[str]) -> None:
pass
def search(self, query_vector: np.ndarray, top_k: int = 3) -> list[tuple[str, float]]:
passdim: Số chiều của vector embedding (ví dụ 128, 768, 1536).add(vectors, doc_ids):vectors: Ma trận numpy shape (N, dim).doc_ids: Danh sách N mã định danh văn bản tương ứng.- Tự động chuẩn hóa L2 vector hóa trước khi lưu trữ.
search(query_vector, top_k):- Chuẩn hóa L2 vector truy vấn (D,).
- Tính tích vô hướng ma trận với toàn bộ kho vector.
- Trả về top k cặp
(doc_id, cosine_similarity)xếp theo điểm giảm dần.
Input
- Lớp
DenseVectorFlatIndex(dim): Khởi tạo đối tượng với các tham số, trọng số hoặc cấu hình tương ứng.
Output
- Các phương thức của
DenseVectorFlatIndex: Trả về kết quả tính toán hoặc cập nhật trạng thái nội bộ của đối tượng.
Ràng buộc
- Thời gian chạy tối đa: 2000ms.
- Giới hạn bộ nhớ: 256MB.
- 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
index = DenseVectorFlatIndex(dim=3)
vectors = np.array([[10.0, 0.0, 0.0], [0.0, 5.0, 0.0]])
index.add(vectors, ['doc1', 'doc2'])
query = np.array([1.0, 0.1, 0.0])
results = index.search(query, top_k=2)Output
[('doc1', 0.9950371902099893), ('doc2', 0.09950371902099893)]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
index = DenseVectorFlatIndex(dim=2)
index.add(np.array([[1.0, 1.0]]), ['doc_small'])
index.add(np.array([[100.0, 100.0]]), ['doc_large'])
query = np.array([2.0, 2.0])
results = index.search(query, top_k=2)Output
[('doc_small', 0.9999999999999998), ('doc_large', 0.9999999999999998)]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.
