Xử lý Song song Đếm Tần suất Từ Đa tiến trình theo Map-Reduce
Trong hệ thống NLP xây dựng bộ từ điển tiền huấn luyện mô hình ngôn ngữ lớn tại AI Empire Academy, ta cần đếm tần suất xuất hiện của hàng triệu từ vựng trong văn bản. Để tận dụng 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ủ đề
Kiến thức tiên quyết: multiprocessing pool, concurrent futures, counter, gil concepts.
Nội dung đề bài
Mục tiêu kiến thức
- Vượt qua rào cản Global Interpreter Lock (GIL) của CPython đối với các tác vụ thâm dụng CPU (CPU-bound) bằng đa tiến trình (
multiprocessing). - Cài đặt mô hình xử lý phân tán Map-Reduce: chia nhỏ dữ liệu (Chunking), phân tán xử lý (Map) và tổng hợp kết quả (Reduce).
- Đảm bảo tính tương thích đa nền tảng (đặc biệt là cơ chế
spawntrên Windows: hàm worker phải ở top-level để serialize được qua pickle).
Mô tả bài toán
Trong hệ thống NLP xây dựng bộ từ điển tiền huấn luyện mô hình ngôn ngữ lớn tại AI Empire Academy, ta cần đếm tần suất xuất hiện của hàng triệu từ vựng trong văn bản. Để tận dụng toàn bộ số nhân CPU, ta áp dụng mô hình Map-Reduce:
- Hàm Map:
map_count_tokens(text_chunk: list[str]) -> dict[str, int] - Nhận vào một danh sách các từ/câu văn bản thô.
- Chuẩn hóa: chuyển toàn bộ về chữ thường (
lower()), loại bỏ khoảng trắng thừa ở hai đầu (strip()). - Bỏ qua các chuỗi rỗng sau khi strip.
- Trả về dictionary đếm tần suất xuất hiện của từng từ trong chunk đó.
- Lưu ý: Hàm này phải nằm ở top-level module để
picklecó thể chuyển giao giữa các process trên hệ điều hành Windows.
- Hàm Điều phối & Reduce:
parallel_word_count(chunks: list[list[str]], num_workers: int = 2) -> dict[str, int] - Nếu
num_workers <= 0, ném ngoại lệValueError("num_workers phai lon hon 0"). - Nếu
chunksrỗng, trả về{}. - Khởi tạo pool tiến trình với tối đa
num_workerstiến trình làm việc. - Phân phối từng chunk cho các worker thực thi hàm
map_count_tokens. - Thu thập các dictionary cục bộ và tổng hợp (Reduce) bằng cách cộng dồn tần suất của các từ giống nhau.
- Trả về dictionary tổng hợp chứa tần suất của toàn bộ kho ngữ liệu.
Input
- Các tham số truyền vào hàm/lớp map_count_tokens 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 map_count_tokens hoặc dữ liệu in ra màn hình theo đúng đặc tả.
Ràng buộc
- Thời gian chạy tối đa: 2000ms.
- Giới hạn bộ nhớ: 512MB.
- Không được làm mất hay ghi đè tần suất khi gộp kết quả.
Ví dụ 1
Input
map_count_tokens(chunks=[['AI', 'Empire', 'academy', 'AI'], ['academy', 'python', 'AI', '']], num_workers=2)Output
{'ai': 3, 'empire': 1, 'academy': 2, 'python': 1}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.
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.
