python-040Đọc toàn bộ đề miễn phí

Tính Ma Trận Khoảng Cách Cặp Đôi Pairwise Thuần Vector Hóa

Trong hệ thống tìm kiếm vector (Vector Database) tại AI Empire Academy, ta có tập hợp N câu truy vấn và M đoạn văn bản, mỗi phần tử được nhúng thành một vector D chiều. Ta cần tính…

PythonNâng cao30 phút

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ủ đề

numpyvectorizationeuclidean distancecosine distancebroadcasting

Kiến thức tiên quyết: matrix algebra, l2 norm, broadcasting.

Nội dung đề bài

Mục tiêu kiến thức

  • Khai triển hằng đẳng thức vector |a - b|2 = |a|2 + |b|2 - 2(a · b) để chuyển bài toán khoảng cách cặp đôi thành phép nhân ma trận tối ưu BLAS.
  • Tính toán Khoảng cách Cosine (Cosine Distance) giữa hai tập vector embedding trong các hệ thống RAG (Retrieval-Augmented Generation).
  • Xử lý lỗi làm tròn số thực dẫn đến giá trị âm nhỏ dưới dấu căn bằng np.maximum().

Mô tả bài toán

Trong hệ thống tìm kiếm vector (Vector Database) tại AI Empire Academy, ta có tập hợp N câu truy vấn và M đoạn văn bản, mỗi phần tử được nhúng thành một vector D chiều. Ta cần tính khoảng cách giữa mọi cặp (ui, vj) để tạo thành ma trận khoảng cách kích thước N × M.

Hãy viết hàm: pairwise_distances(A: np.ndarray, B: np.ndarray, metric: str = "euclidean") -> np.ndarray

Quy tắc:

  • Kiểm tra tham số:
  • A có shape (N, D), B có shape (M, D).
  • Nếu $A.ndim

e 2hoặcB.ndim e 2hoặcA.shape[1] e B.shape[1]$: ném ngoại lệ ValueError("Kich thuoc chieu dac trung khong khop").

  • Nếu metric.lower() không thuộc {"euclidean", "cosine"}: ném ngoại lệ ValueError("Metric khong hop le").
  • Khoảng cách Euclidean:
  • Dùng công thức khai triển ma trận:

A2 = ∑ A2 (shape (N, 1)) B2 = ∑ B2 (shape (1, M)) D2 = max(A2 + B2 - 2(A BT), 0.0)

  • Trả về √(D2) shape (N, M).
  • Khoảng cách Cosine:
  • Chuẩn hóa L2 từng vector trong A và B (với hằng số chống chia 0 ε = 1e-12).
  • Tính ma trận tương đồng cosine S = Anorm BnormT.
  • Trả về khoảng cách cosine: 1.0 - S shape (N, M).
  • Yêu cầu hiệu năng:
  • Tuyệt đối không dùng bất kỳ vòng lặp for nào.

Input

  • Các tham số truyền vào hàm/lớp pairwise_distances hoặc dữ liệu đầu vào theo định dạng mô tả.

Output

  • Kết quả trả về của hàm/lớp pairwise_distances hoặc dữ liệu in ra màn hình theo đúng đặc tả.

Ràng buộc

  • 1 ≤ N, M ≤ 2000.
  • 1 ≤ D ≤ 512.
  • Thời gian chạy tối đa: 1000ms.
  • Giới hạn bộ nhớ: 256MB.

Ví dụ 1

Input

pairwise_distances(A=[[0.0, 0.0], [1.0, 1.0]], B=[[0.0, 0.0], [1.0, 1.0]], metric='euclidean')

Output

True

Giải thích

Hàm được gọi với các tham số mẫu trên và trả về kết quả chính xác theo yêu cầu.

3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

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.