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

Mô hình Chủ đề LDA với Thuật toán Lấy mẫu Collapsed Gibbs

P(zi = k | z-i, w, d) ∝ nd, k-i + α∑k' (nd, k'-i + α) × vk, wi-i + β∑w' (vk, w'-i + β)

PythonNâng cao45 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ủ đề

machine learningnlptopic modelinggibbs sampling

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 θ và φ:

P(zi = k | z-i, w, d) ∝ nd, k-i + α∑k' (nd, k'-i + α) × vk, wi-i + β∑w' (vk, w'-i + β) 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 φk, v = vk, v + β∑v' (vk, v' + β).

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, new_z += 1, vnew_z, w += 1.
  • Tính toán ma trận φ 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ế.

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.