Mô hình Chủ đề LDA với Thuật toán Lấy mẫu Collapsed Gibbs
P(zi = k | z-i, w, d) propto nd, k-i + alphaΣk' (nd, k'-i + alpha) × ⟦frac:vk, wi-i + beta|Σw' (vk, w'-i
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: dirichlet prior, collapsed gibbs, markov chain.
Nội dung đề bài
Mục tiêu kiến thức
- Hiểu mô hình sinh xác suất Latent Dirichlet Allocation (LDA) cho kho văn bản.
- Triển khai thuật toán Collapsed Gibbs Sampling loại trừ biến ẩn theta và phi:
P(zi = k | z-i, w, d) propto nd, k-i + alphaΣk' (nd, k'-i + alpha) × vk, wi-i + betaΣw' (vk, w'-i + beta) trong đó nd, k-i là số từ trong tài liệu d được gán cho chủ đề k (bỏ qua từ thứ i), và vk, wi-i là số lần từ wi được gán cho chủ đề k trong toàn bộ kho tài liệu.
- Tính ma trận phân phối Chủ đề - Từ vựng phik, v = vk, v + betaΣv' (vk, v' + beta).
Mô tả bài toán
Cài đặt lớp LDATopicModelGibbs(n_topics=2, alpha=0.1, beta=0.1, n_iter=30, random_state=42):
- fit(self, corpus: list[list[str]]) -> self:
- corpus: danh sách các tài liệu, mỗi tài liệu là danh sách các token (từ).
- Kiểm tra: corpus không rỗng, mỗi tài liệu có ít nhất 1 từ. Nếu sai, raise ValueError.
- Xây dựng từ điển vocab ánh xạ từ thành chỉ số nguyên 0, …, V-1.
- Khởi tạo gán chủ đề ngẫu nhiên cho từng từ zd, n ∈ [0, K-1].
- Chạy n_iter vòng lặp Collapsed Gibbs Sampling:
- Với mỗi tài liệu d, với mỗi vị trí từ n có từ w:
- Trừ đếm hiện tại: nd, z -= 1, vz, w -= 1.
- Tính xác suất có điều kiện cho từng chủ đề k ∈ [0, K-1].
- Chuẩn hóa xác suất và lấy mẫu chủ đề mới theo hàm phân phối ngẫu nhiên xác định.
- Cộng đếm chủ đề mới: nd, newz += 1, vnewz, w += 1.
- Tính toán ma trận phi kích thước (K, V) đại diện cho phân phối từ vựng của mỗi chủ đề.
- get_topic_words(self, top_n: int = 3) -> list[list[str]]:
- Trả về danh sách gồm K phần tử, mỗi phần tử là danh sách top_n từ có xác suất cao nhất trong chủ đề tương ứng.
Input
- Các tham số truyền vào hàm/lớp LDATopicModelGibbs 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 LDATopicModelGibbs 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ớ: 256MB.
- Dữ liệu đầu vào tuân thủ đúng kiểu dữ liệu và miền giá trị được mô tả.
Ví dụ 1
Input
LDATopicModelGibbs(corpus=[['bank', 'river', 'water', 'stream'], ['bank', 'river', 'flow', 'water'], ['money', 'loan', 'bank', 'finance'], ['loan', 'finance', 'credit', 'money']], n_topics=2, n_iter=40, top_n=2)
Output
2
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.
Ví dụ 2
Input
LDATopicModelGibbs(corpus=[])
Output
True
Giải thích
Hàm được gọi với bộ tham số thứ hai và trả về kết quả tương ứng theo 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.
